<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>현재 개발중</title>
    <link>https://sunow.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 8 May 2026 14:06:03 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>서나쓰</managingEditor>
    <image>
      <title>현재 개발중</title>
      <url>https://tistory1.daumcdn.net/tistory/4417952/attach/806189fe1a154bd1aa29ddb125892d7f</url>
      <link>https://sunow.tistory.com</link>
    </image>
    <item>
      <title>[Linux] iptables로 포트 포워딩하기</title>
      <link>https://sunow.tistory.com/entry/Linux-iptables%EB%A1%9C-%ED%8F%AC%ED%8A%B8-%ED%8F%AC%EC%9B%8C%EB%94%A9%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;포트폴리오 사이트를 띄우기 위해 E2 서버를 띄우고 가비아에서 구매한 도메인을 구매했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가비아에서는 해당 도메인이 80포트만 지원하기 때문에 8080 포트에서 80 포트로 포트 포워딩을 해야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. iptables 조회&amp;nbsp;&lt;/h4&gt;
&lt;pre id=&quot;code_1718847178490&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo iptables -t nat -L --line-numbers&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--line-numbers 옵션을 주면 번호가 부여가 되는데 삭제할 때 유용하다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-06-20 오전 10.56.36.png&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3o2Qj/btsH5kPKAKO/XV9bUAtLqS12FeynEQr6Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3o2Qj/btsH5kPKAKO/XV9bUAtLqS12FeynEQr6Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3o2Qj/btsH5kPKAKO/XV9bUAtLqS12FeynEQr6Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3o2Qj%2FbtsH5kPKAKO%2FXV9bUAtLqS12FeynEQr6Tk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;891&quot; height=&quot;234&quot; data-filename=&quot;스크린샷 2024-06-20 오전 10.56.36.png&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 포트 포워딩 등록&lt;/h4&gt;
&lt;pre id=&quot;code_1718848503959&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8080&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 포트포워딩 삭제&lt;/h4&gt;
&lt;pre id=&quot;code_1718848654091&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo iptables -t nat -D PREROUTING {line 숫자}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>study/TIL </category>
      <category>AWS</category>
      <category>linux</category>
      <category>포트포워딩</category>
      <author>서나쓰</author>
      <guid isPermaLink="true">https://sunow.tistory.com/111</guid>
      <comments>https://sunow.tistory.com/entry/Linux-iptables%EB%A1%9C-%ED%8F%AC%ED%8A%B8-%ED%8F%AC%EC%9B%8C%EB%94%A9%ED%95%98%EA%B8%B0#entry111comment</comments>
      <pubDate>Thu, 20 Jun 2024 10:57:59 +0900</pubDate>
    </item>
    <item>
      <title>원티드 프리온보딩 - 백엔드 챌린지 (Docker)</title>
      <link>https://sunow.tistory.com/entry/%EC%9B%90%ED%8B%B0%EB%93%9C-%ED%94%84%EB%A6%AC%EC%98%A8%EB%B3%B4%EB%94%A9-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%B1%8C%EB%A6%B0%EC%A7%80-Docker</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Git만큼 사랑받는 개발 툴이 된 Docker&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;stackoverflow 2022 개발자 설문조사에서 앞으로 배우고 싶은 언어에 npm 다음으로 Docker가 올랐다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.33.01.png&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjXz5e/btr8gVEk1QK/gpeYrdQS76Bnwy1PcnmeF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjXz5e/btr8gVEk1QK/gpeYrdQS76Bnwy1PcnmeF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjXz5e/btr8gVEk1QK/gpeYrdQS76Bnwy1PcnmeF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjXz5e%2Fbtr8gVEk1QK%2FgpeYrdQS76Bnwy1PcnmeF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1632&quot; height=&quot;668&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.33.01.png&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker란 무엇일까?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.docker.com/get-started/overview/&quot;&gt;Docker overview&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1680744797415&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;Docker overview&quot; data-og-description=&quot; &quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/get-started/overview/&quot; data-og-url=&quot;https://docs.docker.com/get-started/overview/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d8PpXi/hySaTuexy4/NU07OCiuVbjxJYuWuxSdOk/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/b4hOPA/hySaSPCGmr/s3iVWJl2qLaJSaoRciCc10/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://docs.docker.com/get-started/overview/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/get-started/overview/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d8PpXi/hySaTuexy4/NU07OCiuVbjxJYuWuxSdOk/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/b4hOPA/hySaSPCGmr/s3iVWJl2qLaJSaoRciCc10/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&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;Docker overview&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Open platform이다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어플리케이션을 인프라에서 분리한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;신속하다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인프라를 어플리케이션을 관리하는 것처럼 관리할 수 있다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드 배포에 용이하다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;code&gt;컨테이너&lt;/code&gt; 기반 &lt;code&gt;가상화&lt;/code&gt; 도구&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플리케이션을 &lt;code&gt;컨테이너&lt;/code&gt; 라는 단위로 격리하여 실행하고 배포하는 기술&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Container란 무엇일까?&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너는 &lt;code&gt;가상화 기술&lt;/code&gt; 중 하나&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;호스트 운영체제 위에 여러 개의 격리된 환경을 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각각의 컨테이너 안에서 애플리케이션을 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상화 기술이란 무엇일까?&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;하나의 물리적인 컴퓨터자원(CPU, 메모리, 저장장치 등)을 가상적으로 분할&lt;/b&gt; 하여 여러 개의 &lt;b&gt;가상 컴퓨터 환경을 만들어내는 기술&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 물리적인 컴퓨터 자원을 더욱 &lt;code&gt;효율적&lt;/code&gt; 으로 사용할 수 있으며 서버나 애플리케이션 등을 운영하는데 있어 &lt;code&gt;유연성&lt;/code&gt; 과 &lt;code&gt;안전성&lt;/code&gt; 을 제공한다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.33.30.png&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6zUov/btr8lO41rCL/ToAOJbDkBgbUSBL5avlcx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6zUov/btr8lO41rCL/ToAOJbDkBgbUSBL5avlcx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6zUov/btr8lO41rCL/ToAOJbDkBgbUSBL5avlcx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6zUov%2Fbtr8lO41rCL%2FToAOJbDkBgbUSBL5avlcx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1460&quot; height=&quot;534&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.33.30.png&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;534&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;span style=&quot;color: #000000;&quot;&gt;가상화 서버 없이 서버 올리기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.33.42.png&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfcPDe/btr8gwyiL65/6KbUiMKGnakkLg1tSRcjr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfcPDe/btr8gwyiL65/6KbUiMKGnakkLg1tSRcjr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfcPDe/btr8gwyiL65/6KbUiMKGnakkLg1tSRcjr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfcPDe%2Fbtr8gwyiL65%2F6KbUiMKGnakkLg1tSRcjr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1500&quot; height=&quot;556&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.33.42.png&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;556&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;span style=&quot;color: #000000;&quot;&gt;하이퍼바이저를 통한 가상화 서버&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.33.52.png&quot; data-origin-width=&quot;1482&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpNSOp/btr8lOYcN1E/w2dLrNdUlpjDuV281kdKF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpNSOp/btr8lOYcN1E/w2dLrNdUlpjDuV281kdKF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpNSOp/btr8lOYcN1E/w2dLrNdUlpjDuV281kdKF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpNSOp%2Fbtr8lOYcN1E%2Fw2dLrNdUlpjDuV281kdKF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1482&quot; height=&quot;542&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.33.52.png&quot; data-origin-width=&quot;1482&quot; data-origin-height=&quot;542&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;span style=&quot;color: #000000;&quot;&gt;컨테이너 엔진을 통한 가상화 서버&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.34.42.png&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ogDNK/btr8nR8dBAQ/0kXxAhY6qnUyCijGyw21Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ogDNK/btr8nR8dBAQ/0kXxAhY6qnUyCijGyw21Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ogDNK/btr8nR8dBAQ/0kXxAhY6qnUyCijGyw21Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FogDNK%2Fbtr8nR8dBAQ%2F0kXxAhY6qnUyCijGyw21Ek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;283&quot; height=&quot;716&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.34.42.png&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;716&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #000000; text-align: left;&quot;&gt;  하이퍼 바이저란?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #000000; text-align: left;&quot;&gt;- 가상머신(Virtual Machine, VM)을 생성하고 구동하는 소프트웨어&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #000000; text-align: left;&quot;&gt;- OS에 자원을 할당 및 조율&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #000000; text-align: left;&quot;&gt;- OS들의 요청을 번역하여 하드웨어에 전달&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #000000; text-align: left;&quot;&gt;- 대표적으로 VMware가 있다&lt;/span&gt;&lt;/p&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eJYn9P/btr8h9hNmFb/aFKkO4OKNracyoUh5fnfGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eJYn9P/btr8h9hNmFb/aFKkO4OKNracyoUh5fnfGK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;718&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.36.29.png&quot; width=&quot;334&quot; style=&quot;width: 50.0252%; margin-right: 10px;&quot; data-widthpercent=&quot;50.61&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eJYn9P/btr8h9hNmFb/aFKkO4OKNracyoUh5fnfGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeJYn9P%2Fbtr8h9hNmFb%2FaFKkO4OKNracyoUh5fnfGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;744&quot; height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqOdKD/btr8nebhy1T/MJ9n7Aw9oeab6kwDObDKx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqOdKD/btr8nebhy1T/MJ9n7Aw9oeab6kwDObDKx1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;722&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.36.43.png&quot; width=&quot;319&quot; height=&quot;316&quot; style=&quot;width: 48.812%;&quot; data-widthpercent=&quot;49.39&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqOdKD/btr8nebhy1T/MJ9n7Aw9oeab6kwDObDKx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqOdKD%2Fbtr8nebhy1T%2FMJ9n7Aw9oeab6kwDObDKx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;730&quot; height=&quot;722&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;aside&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  컨테이너란? 대표적으로 Docker가 있다 - 컨테이너 엔진은 GuestOS가 있고 도커 엔진은 없다 &amp;rarr; 더 가볍다&lt;/span&gt;&lt;/aside&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: #000000;&quot;&gt;Virtual Machine VS Container&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.37.43.png&quot; data-origin-width=&quot;1490&quot; data-origin-height=&quot;714&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhv1zA/btr8htng3dM/3MKUKcdURrK7ZuKimkKm11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhv1zA/btr8htng3dM/3MKUKcdURrK7ZuKimkKm11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhv1zA/btr8htng3dM/3MKUKcdURrK7ZuKimkKm11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdhv1zA%2Fbtr8htng3dM%2F3MKUKcdURrK7ZuKimkKm11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;653&quot; height=&quot;313&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.37.43.png&quot; data-origin-width=&quot;1490&quot; data-origin-height=&quot;714&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너 기반 특징&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;리눅스 커널의 기능을 사용하여 만들어짐&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;chroot : 파일 시스템을 격리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;namespace : 프로세서 격리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cgroup : 하드웨어 자원 격리&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로세스 단위의 격리 환경&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker란 무엇일까?&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;code&gt;컨테이너&lt;/code&gt; 기반 &lt;code&gt;가상화&lt;/code&gt; 도구&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;리눅스 컨테이너 기술인 LXC(Linux Containers) 기반&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플리케이션을 &lt;code&gt;컨테이너&lt;/code&gt; 라는 단위로 격리하여 실행하고 배포하는 기술&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다양한 운영체제에서 사용할 수 있으며, 컨테이너화된 애플리케이션을 손쉽게 빌드. 배포, 관리할 수 있는 다양한 기능을 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 기능들을 통해 애플리케이션을 빠르게 개발하고, 효율적으로 배포, 관리할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker Architecture&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.38.03.png&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nAJQW/btr8kev6Ggg/FxWtZOtkUILwMWz2pVmlg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nAJQW/btr8kev6Ggg/FxWtZOtkUILwMWz2pVmlg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nAJQW/btr8kev6Ggg/FxWtZOtkUILwMWz2pVmlg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnAJQW%2Fbtr8kev6Ggg%2FFxWtZOtkUILwMWz2pVmlg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1340&quot; height=&quot;684&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.38.03.png&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 데몬(Docker daemon = dockerd)&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 엔진의 핵심 구성요소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 호스트에서 컨테니러를 관리하고 실행하는 역할&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너를 생성, 시작, 중지, 삭제하는 등의 작업을 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너 이미지를 관리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;외부에서 이미지를 다운로드하고 빌드하는 작업 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 클라이언트(Docker Client)&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커와 상호작용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker 명령어를 사용하면 Docker daemon으로 보내어 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 오브젝트(Docker Object)&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 이미지(Docker Image)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 컨테이너를 만들기 위한 읽기 전용 템플릿&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 컨테이너(Docker Container)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 도커 이미지의 실행 가능한 인스턴스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플리케이션을 싱행하기 위한 모든 파일과 설정 정보를 포함하는 패키지&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 레지스트리(Docker Registries)&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 이미지를 관리하고 저장하는 곳&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker hub : 디폴트 레지스트리, 누구나 접근 가능한 공개형 저장소&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 라이프 사이클&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.38.52.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EQWJu/btr8lOcTAS2/E6JBhOluLXDldvnBpvvLlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EQWJu/btr8lOcTAS2/E6JBhOluLXDldvnBpvvLlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EQWJu/btr8lOcTAS2/E6JBhOluLXDldvnBpvvLlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEQWJu%2Fbtr8lOcTAS2%2FE6JBhOluLXDldvnBpvvLlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;618&quot; height=&quot;522&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.38.52.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;694&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 파일&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.39.13.png&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxHK6V/btr8hxXIO9V/UGKwS6ht0mo0KjQJsjIcL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxHK6V/btr8hxXIO9V/UGKwS6ht0mo0KjQJsjIcL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxHK6V/btr8hxXIO9V/UGKwS6ht0mo0KjQJsjIcL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxHK6V%2Fbtr8hxXIO9V%2FUGKwS6ht0mo0KjQJsjIcL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1452&quot; height=&quot;624&quot; data-filename=&quot;스크린샷 2023-04-06 오전 10.39.13.png&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실습 순서&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 레지스트리에서 이미지 다운 받기&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680745365255&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull httpd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 이미지 리스트&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680745396068&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 이미지를 사용해 새로운 컨테이너 만들기&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680745469414&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; docker run httpd
 docker run --name secondContainer httpd
 docker run -p 8888:80 -v ~/Desktop/git/httpdtest:/usr/local/apache2/htdocs httpd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt; httpd 이미지 실행&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt; httpd 이미지를 실행할 때 이름 옵션 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt; httpd 이미지를 실행할 때 80 포트를 8888로 매핑, httpd에 있는 파일 위치에 내가 매핑하고 싶은 파일 위치를 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 도커 실행 중지&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680745573192&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stop 9b0f49de746c
docker stop -a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt; 특정 이미지만 중지, 혹은 모든 도커 중지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 도커 컨테이너 삭제&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680745613774&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker rm 6026ab9b44cc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 파일을 활용한 실습&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 도커 파일 작성&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680745660372&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FROM httpd:latest
COPY  index.html /usr/local/apache2/htdocs/index.html
EXPOSE 80&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 이미지 만들기&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680745683787&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker build -t my-httpd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt; -t는 내가 원하는 태그 이름을 달 수 있는 옵션&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 이미지 실행&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680745709035&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d -p 8888:80 my-httpd&lt;/code&gt;&lt;/pre&gt;</description>
      <category>study/TIL </category>
      <category>도커</category>
      <category>도커이미지</category>
      <category>도커컨테이너</category>
      <category>원티드</category>
      <category>프리온보딩</category>
      <author>서나쓰</author>
      <guid isPermaLink="true">https://sunow.tistory.com/105</guid>
      <comments>https://sunow.tistory.com/entry/%EC%9B%90%ED%8B%B0%EB%93%9C-%ED%94%84%EB%A6%AC%EC%98%A8%EB%B3%B4%EB%94%A9-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%B1%8C%EB%A6%B0%EC%A7%80-Docker#entry105comment</comments>
      <pubDate>Thu, 6 Apr 2023 10:48:56 +0900</pubDate>
    </item>
    <item>
      <title>ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)</title>
      <link>https://sunow.tistory.com/entry/ERROR-2002-HY000-Cant-connect-to-local-MySQL-server-through-socket-tmpmysqlsock-2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;평소에 dbvear를 쓰고 회사 mysql 서버에 그냥 연결해서 써서 컴퓨터에서 mysql을 직접 구동한 적이 백만년전..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토이프로젝트 위해 mysql 구동하고 임시 db를 작성하기 위해 mysql을 실행하던 중 생긴 에러..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://so-es-immer.tistory.com/entry/ERROR-2002-HY000-socket-tmpmysqlsock-2-%ED%95%B4%EA%B2%B0%ED%95%98%EB%A0%A4%EA%B3%A0-brew-services-start-mysql-%ED%95%A8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://so-es-immer.tistory.com/entry/ERROR-2002-HY000-socket-tmpmysqlsock-2-%ED%95%B4%EA%B2%B0%ED%95%98%EB%A0%A4%EA%B3%A0-brew-services-start-mysql-%ED%95%A8&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1678151778401&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;ERROR 2002 (HY000):  socket '/tmp/mysql.sock' (2) 해결하려고 brew services start mysql 함&quot; data-og-description=&quot;http://meonggae.blogspot.com/2017/03/db-mac-mysql-1-error-2002-hy000-cant.html [db] mac에서 mysql환경설정 셋팅하기 1편 - 설치 및 접속, ERROR 2002 (HY000) : Can't connect to local MySQL server db, mysql, error2002 meonggae.blogspot.com ➜ s&quot; data-og-host=&quot;so-es-immer.tistory.com&quot; data-og-source-url=&quot;https://so-es-immer.tistory.com/entry/ERROR-2002-HY000-socket-tmpmysqlsock-2-%ED%95%B4%EA%B2%B0%ED%95%98%EB%A0%A4%EA%B3%A0-brew-services-start-mysql-%ED%95%A8&quot; data-og-url=&quot;https://so-es-immer.tistory.com/entry/ERROR-2002-HY000-socket-tmpmysqlsock-2-%ED%95%B4%EA%B2%B0%ED%95%98%EB%A0%A4%EA%B3%A0-brew-services-start-mysql-%ED%95%A8&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b7iOqm/hyRROMquKU/kNyq1l3K3ajQ3w3Cxp5Ujk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/xNOAs/hyRRF9OcCD/jB5kfBo9igBBqIiAQeA1a1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/A63oc/hyRRMnxnlo/3pAGiShiJboCB4dd3sBROK/img.jpg?width=935&amp;amp;height=701&amp;amp;face=0_0_935_701&quot;&gt;&lt;a href=&quot;https://so-es-immer.tistory.com/entry/ERROR-2002-HY000-socket-tmpmysqlsock-2-%ED%95%B4%EA%B2%B0%ED%95%98%EB%A0%A4%EA%B3%A0-brew-services-start-mysql-%ED%95%A8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://so-es-immer.tistory.com/entry/ERROR-2002-HY000-socket-tmpmysqlsock-2-%ED%95%B4%EA%B2%B0%ED%95%98%EB%A0%A4%EA%B3%A0-brew-services-start-mysql-%ED%95%A8&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b7iOqm/hyRROMquKU/kNyq1l3K3ajQ3w3Cxp5Ujk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/xNOAs/hyRRF9OcCD/jB5kfBo9igBBqIiAQeA1a1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/A63oc/hyRRMnxnlo/3pAGiShiJboCB4dd3sBROK/img.jpg?width=935&amp;amp;height=701&amp;amp;face=0_0_935_701');&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;ERROR 2002 (HY000): socket '/tmp/mysql.sock' (2) 해결하려고 brew services start mysql 함&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;http://meonggae.blogspot.com/2017/03/db-mac-mysql-1-error-2002-hy000-cant.html [db] mac에서 mysql환경설정 셋팅하기 1편 - 설치 및 접속, ERROR 2002 (HY000) : Can't connect to local MySQL server db, mysql, error2002 meonggae.blogspot.com ➜ s&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;so-es-immer.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 블로그 글 보고 똑같이 따라했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysql을 치면 계속 제목과 같은 에러가 나서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널을 아예 끄고 다시 시작&lt;/p&gt;
&lt;pre id=&quot;code_1678151855066&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew services start mysql
mysql -uroot -p&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;성공적으로 mysql 서버 가동이 되었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 root 비번 찾으러 가야지..&lt;/p&gt;</description>
      <category>study/TIL </category>
      <category>MAC</category>
      <category>mysql</category>
      <author>서나쓰</author>
      <guid isPermaLink="true">https://sunow.tistory.com/104</guid>
      <comments>https://sunow.tistory.com/entry/ERROR-2002-HY000-Cant-connect-to-local-MySQL-server-through-socket-tmpmysqlsock-2#entry104comment</comments>
      <pubDate>Tue, 7 Mar 2023 10:18:16 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 301, 302 redirect 시키기</title>
      <link>https://sunow.tistory.com/entry/Spring-301-302-redirect-%EC%8B%9C%ED%82%A4%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;웹 크롤링을 하다가 보면 해당 url을 접근하지 못하거나 에러가 생겨 리다이렉트를 해야하는 경우가 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 301과 302의 차이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nsinc.tistory.com/168&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://nsinc.tistory.com/168&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667204266984&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;[HTTP] 301과 302 Redirect의 차이&quot; data-og-description=&quot;HTTP Response Status Code는 요청에 대한 웹서버의 응답을 나타내는 코드를 말합니다. 이 코드를 바탕으로 웹브라우저나 검색엔진 크롤러는 요청을 어떻게 처리해야할지 판단하게 됩니다. 유명한 코&quot; data-og-host=&quot;nsinc.tistory.com&quot; data-og-source-url=&quot;https://nsinc.tistory.com/168&quot; data-og-url=&quot;https://nsinc.tistory.com/168&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cqMQYh/hyQnTQYKFj/9KlATgQMEVPckALAMqXFQK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bnGbfF/hyQpyj89sV/M2wjQ4c2d5ul9VX1UL7R31/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://nsinc.tistory.com/168&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nsinc.tistory.com/168&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cqMQYh/hyQnTQYKFj/9KlATgQMEVPckALAMqXFQK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bnGbfF/hyQpyj89sV/M2wjQ4c2d5ul9VX1UL7R31/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;[HTTP] 301과 302 Redirect의 차이&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;HTTP Response Status Code는 요청에 대한 웹서버의 응답을 나타내는 코드를 말합니다. 이 코드를 바탕으로 웹브라우저나 검색엔진 크롤러는 요청을 어떻게 처리해야할지 판단하게 됩니다. 유명한 코&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nsinc.tistory.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;우리 프로젝트는 크롤링에 필요하기 때문에 302 리다이렉트 필요&lt;/p&gt;
&lt;pre id=&quot;code_1667204361678&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * 리다이렉트
 */
@GetMapping(value=&quot;/redirect&quot;)
public RedirectView redirect(String url) {
    log.info(&quot;url : &quot;+ url);
    RedirectView redirectView = new RedirectView(url);
    redirectView.setStatusCode(HttpStatus.FOUND);
    return redirectView;
}&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;HTTP Status 코드는 아래에서 확인하면 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#redirection_messages&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#redirection_messages&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667204396555&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;HTTP response status codes - HTTP | MDN&quot; data-og-description=&quot;HTTP response status codes indicate whether a specific HTTP request has been successfully completed. Responses are grouped in five classes:&quot; data-og-host=&quot;developer.mozilla.org&quot; data-og-source-url=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#redirection_messages&quot; data-og-url=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Status&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bYrh9h/hyQnQGJrlz/Kc2l6ZWVH06ucLDCkFZBn1/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#redirection_messages&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#redirection_messages&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bYrh9h/hyQnQGJrlz/Kc2l6ZWVH06ucLDCkFZBn1/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080');&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;HTTP response status codes - HTTP | MDN&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;HTTP response status codes indicate whether a specific HTTP request has been successfully completed. Responses are grouped in five classes:&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.mozilla.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;</description>
      <category>study/TIL </category>
      <category>httpStatus</category>
      <category>Java</category>
      <category>Spring</category>
      <author>서나쓰</author>
      <guid isPermaLink="true">https://sunow.tistory.com/102</guid>
      <comments>https://sunow.tistory.com/entry/Spring-301-302-redirect-%EC%8B%9C%ED%82%A4%EA%B8%B0#entry102comment</comments>
      <pubDate>Mon, 31 Oct 2022 17:20:12 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] Class로 구성된 js 파일 import, 사용하기</title>
      <link>https://sunow.tistory.com/entry/Vuejs-Class%EB%A1%9C-%EA%B5%AC%EC%84%B1%EB%90%9C-js-%ED%8C%8C%EC%9D%BC-import-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;모듈화를 하기 위해 class로 구성하는 외부 js 파일의 사용이 필요할 때가 생겼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 구성은&lt;/p&gt;
&lt;pre id=&quot;code_1664945573088&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export defualt class foo {
	constructor() {
    	this.func();
    }
    
    func() {
    }
    
    fun2() {
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue에서 파일을 따로 빼내서 vue 파일에서 사용할 경우 내보내기(export)를 꼭 해야한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 Vue파일에서 해당 파일 import를 하고 사용해야 한다&lt;/p&gt;
&lt;pre id=&quot;code_1664945746115&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
import foo from &quot;foo.js 경로&quot;

export defult {
	data() {
    	return {
        	foo : new foo();
        }
    },
    mounted() {
    	this.foo.fun2();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;class 파일에서 정의한 메소드가 꼭 mounted가 아니라 method에서 호출해도 되고 created에서 호출해도 된다. 호출하는 방식을 예시를 든 것이다.&lt;/p&gt;</description>
      <category>study/TIL </category>
      <category>Java</category>
      <category>javascript</category>
      <category>VUE</category>
      <author>서나쓰</author>
      <guid isPermaLink="true">https://sunow.tistory.com/101</guid>
      <comments>https://sunow.tistory.com/entry/Vuejs-Class%EB%A1%9C-%EA%B5%AC%EC%84%B1%EB%90%9C-js-%ED%8C%8C%EC%9D%BC-import-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0#entry101comment</comments>
      <pubDate>Wed, 5 Oct 2022 13:56:43 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] 외부 javascript 구문 추가 방법</title>
      <link>https://sunow.tistory.com/entry/Vuejs-%EC%99%B8%EB%B6%80-javascript-%EA%B5%AC%EB%AC%B8-%EC%B6%94%EA%B0%80-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;외부 플러그인이나 제품을 사용하다가 보면 script 추가 안내문을 받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;html을 사용하거나 웹빌드를 사용하면 쉽게 설치할 수 있지만 vue나 react를 사용해 웹 작업을 한다면 제공하는 script문을 추가하기 어렵다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&amp;lt;script async src=&quot;url...&quot;&amp;gt;&amp;lt;/script&amp;gt;&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;이 구문을 head 태그 다음에 넣기 위해 수많은 구글링을 하였고 마침내 해결방법을 알아내었다&lt;/p&gt;
&lt;pre id=&quot;code_1664945102561&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    addScript() {
      let scripts = [
          '필요한 url',
      ];

      for (let i = 0, len = scripts.length; i &amp;lt; len; i++) {
        let script = document.createElement('script');
        script.setAttribute('type', 'text/javascript');
        script.setAttribute('src', scripts[i]);
        script.async = true;
        document
        .getElementsByTagName('head')[0]
        .appendChild(script);
      }
    }&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;Vue는 script 구문에서 &lt;u&gt;&lt;b&gt;data, method, created&lt;/b&gt;&lt;/u&gt; 등의 방법으로 작성할 수 있는데 이 함수를 method에 추가하고 created에 &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;this.addscript()&lt;/b&gt;&lt;/span&gt;를 호출하면 Vue 처음 화면이 렌더링될 때 head 태그 뒤에 script 구문을 넣을 수 있다.&lt;/p&gt;</description>
      <category>study/TIL </category>
      <category>javascript</category>
      <category>js</category>
      <category>VUE</category>
      <author>서나쓰</author>
      <guid isPermaLink="true">https://sunow.tistory.com/100</guid>
      <comments>https://sunow.tistory.com/entry/Vuejs-%EC%99%B8%EB%B6%80-javascript-%EA%B5%AC%EB%AC%B8-%EC%B6%94%EA%B0%80-%EB%B0%A9%EB%B2%95#entry100comment</comments>
      <pubDate>Wed, 5 Oct 2022 13:48:53 +0900</pubDate>
    </item>
    <item>
      <title>[Java] RequestRejectedException 처리</title>
      <link>https://sunow.tistory.com/entry/Java-RequestRejectedException-%EC%B2%98%EB%A6%AC</link>
      <description>&lt;pre id=&quot;code_1661243989475&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String &quot;//&quot;
	at org.springframework.security.web.firewall.StrictHttpFirewall.rejectedBlocklistedUrls(StrictHttpFirewall.java:456)
	at org.springframework.security.web.firewall.StrictHttpFirewall.getFirewalledRequest(StrictHttpFirewall.java:429)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:196)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 시스템 로그 확인하던 중에 만난 에러 로그&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 보는 에러 로그이기도 하고 검색해보니 Spring security와 관련된 예외라고 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인해보니 이미 예전부터 발생한 에러인데 로그를 잘 확인 안 하다보니 처음 발견..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해석해보면 &quot;//&quot; 의 요청이 접근 제한되었다는 내용이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3d4144;&quot;&gt;&amp;rdquo;//&amp;rdquo; 이외에도 org.springframework.security.web.firewall.StrictHttpFirewall 클래스를 확인해보면 아래처럼 여러&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;[블랙리스트 문자열]&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #3d4144;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 있는 것을 확인 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661244093600&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private static final List&amp;lt;String&amp;gt; FORBIDDEN_ENCODED_PERIOD = Collections.unmodifiableList(Arrays.asList(&quot;%2e&quot;, &quot;%2E&quot;));
private static final List&amp;lt;String&amp;gt; FORBIDDEN_SEMICOLON = Collections.unmodifiableList(Arrays.asList(&quot;;&quot;, &quot;%3b&quot;, &quot;%3B&quot;));
private static final List&amp;lt;String&amp;gt; FORBIDDEN_FORWARDSLASH = Collections.unmodifiableList(Arrays.asList(&quot;%2f&quot;, &quot;%2F&quot;));
private static final List&amp;lt;String&amp;gt; FORBIDDEN_DOUBLE_FORWARDSLASH = Collections.unmodifiableList(Arrays.asList(&quot;//&quot;, &quot;%2f%2f&quot;, &quot;%2f%2F&quot;, &quot;%2F%2f&quot;, &quot;%2F%2F&quot;));
private static final List&amp;lt;String&amp;gt; FORBIDDEN_BACKSLASH = Collections.unmodifiableList(Arrays.asList(&quot;\\&quot;, &quot;%5c&quot;, &quot;%5C&quot;));
private Set&amp;lt;String&amp;gt; encodedUrlBlacklist = new HashSet&amp;lt;&amp;gt;();
private Set&amp;lt;String&amp;gt; decodedUrlBlacklist = new HashSet&amp;lt;&amp;gt;();
private Set&amp;lt;String&amp;gt; allowedHttpMethods = createDefaultAllowedHttpMethods();
private Predicate&amp;lt;String&amp;gt; allowedHostnames = hostname -&amp;gt; true;

public StrictHttpFirewall() {
	urlBlacklistsAddAll(FORBIDDEN_SEMICOLON);
	urlBlacklistsAddAll(FORBIDDEN_FORWARDSLASH);
	urlBlacklistsAddAll(FORBIDDEN_DOUBLE_FORWARDSLASH);
	urlBlacklistsAddAll(FORBIDDEN_BACKSLASH);

	this.encodedUrlBlacklist.add(ENCODED_PERCENT);
	this.encodedUrlBlacklist.addAll(FORBIDDEN_ENCODED_PERIOD);
	this.decodedUrlBlacklist.add(PERCENT);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3d4144;&quot;&gt;구글링에 &quot;//&quot;을 허용하는 해결책이 있긴 한데 굳이 막아놓은 걸 허용할 필요가 있나 싶어서 필터링에 걸리면 로그에 찍히지 않게만 처리하고자 한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661244146680&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Aspect
@Component
public class FilterChainProxyAdvice {

    @Around(&quot;execution(public void org.springframework.security.web.FilterChainProxy.doFilter(..))&quot;)
    public void handleRequestRejectedException (ProceedingJoinPoint pjp) throws Throwable {
        try {
            pjp.proceed();
        } catch (RequestRejectedException exception) {
            HttpServletResponse response = (HttpServletResponse) pjp.getArgs()[1];
            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AOP 를 이용한 방법인데 대충 설명하자면 Around의 타겟 메소드로 doFIlter를 잡아서 익셉션 처리를 하는것이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pjp.proceed();&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에서 doFilter가 실행되면서 &amp;ldquo;//&amp;rdquo; 문자열이 URL에 포함되어 들어오면 RequestRejectedException 을 발생시키는데, 해당 Exception을 잡아서 로그가 안찍히게 해주면된다.&lt;/p&gt;</description>
      <category>study/Project  </category>
      <category>exception</category>
      <category>Java</category>
      <category>Spring</category>
      <author>서나쓰</author>
      <guid isPermaLink="true">https://sunow.tistory.com/98</guid>
      <comments>https://sunow.tistory.com/entry/Java-RequestRejectedException-%EC%B2%98%EB%A6%AC#entry98comment</comments>
      <pubDate>Tue, 23 Aug 2022 17:42:54 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 스프링 AOP (Spring AOP) 총정리 : 개념, 프록시 기반 AOP, @AOP</title>
      <link>https://sunow.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-AOP-Spring-AOP-%EC%B4%9D%EC%A0%95%EB%A6%AC-%EA%B0%9C%EB%85%90-%ED%94%84%EB%A1%9D%EC%8B%9C-%EA%B8%B0%EB%B0%98-AOP-AOP</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스프링 AOP (Aspect Oriented Programing)&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AOP&lt;/b&gt;는 &lt;b&gt;Aspect Oriented Programming&lt;/b&gt;의 약자로 &lt;b&gt;관점 지향 프로그래밍&lt;/b&gt;이라고 불린다. 관점 지향은 쉽게 말해 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각&amp;nbsp;모듈화하겠다는 것이다&lt;/b&gt;.&lt;/span&gt; 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예로들어 핵심적인 관점은 결국&amp;nbsp;우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AOP&lt;/b&gt;에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서&amp;nbsp;다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 &lt;b&gt;흩어진 관심사 (Crosscutting Concerns)&lt;/b&gt;라 부른다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNuyVd/btrKmFEPzt4/I5dSCaRAP2Z9h2eKa6p0o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNuyVd/btrKmFEPzt4/I5dSCaRAP2Z9h2eKa6p0o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNuyVd/btrKmFEPzt4/I5dSCaRAP2Z9h2eKa6p0o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNuyVd%2FbtrKmFEPzt4%2FI5dSCaRAP2Z9h2eKa6p0o0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;443&quot; height=&quot;500&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 흩어진 관심사를 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지&lt;/span&gt;다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;AOP 주요 개념&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Target : Aspect를 적용하는 곳 (클래스, 메서드 .. )&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;PointCut : JointPoint의 상세한 스펙을 정의한 것. 'A란 메서드의 진입 시점에 호출할 것'과 같이 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;스프링 AOP 특징&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;프록시 패턴 기반의 AOP 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위해서임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;스프링 빈에만 AOP를 적용 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가 ...)에 대한 해결책을 지원하는 것이 목적&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;스프링 AOP : @AOP&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 아래와 같이 &lt;b&gt;@Aspect &lt;/b&gt;어노테이션을 붙여 이 클래스가 &lt;b&gt;Aspect&lt;/b&gt;를 나타내는 클래스라는 것을 명시하고 &lt;b&gt;@Component&lt;/b&gt;를 붙여 스프링 빈으로 등록한다.&lt;/p&gt;
&lt;pre id=&quot;code_1661242402265&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Component
@Aspect
public class PerfAspect {
	@Around(&quot;execution(* com.saelobi..*.EventService.*(..))&quot;)
    public Object logPerf(ProceedingJoinPoint pjp) throws Throwable{
    	long begin = System.currentTimeMillis(); 
        Object retVal = pjp.proceed(); // 메서드 호출 자체를 감쌈 
        System.out.println(System.currentTimeMillis() - begin); 
        return retVal; 
    }
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;@Around &lt;/b&gt;어노테이션은 타겟 메서드를 감싸서 특정 &lt;b&gt;Advice&lt;/b&gt;를 실행한다는 의미이다. 위 코드의 &lt;b&gt;Advice&lt;/b&gt;는 타겟 메서드가 실행된 시간을 측정하기 위한 로직을 구현하였다. 추가적으로 &lt;b&gt;execution(* com.saelobi..*.EventService.*(..))&lt;/b&gt;가 의미하는 바는 &lt;b&gt;com.saelobi &lt;/b&gt;아래의 패키지 경로의 &lt;b&gt;EventService &lt;/b&gt;객체의 모든 메서드에 이 &lt;b&gt;Aspect&lt;/b&gt;를 적용하겠다는 의미다.&lt;/p&gt;
&lt;pre id=&quot;code_1661242476838&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Component
public class SimpleEventService implements EventService {

    @Override
    public void createEvent() {
        try {
            Thread.sleep(1000);
        } catch(InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(&quot;Created an event&quot;);
    }

    @Override
    public void publishEvent() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e){
            e.printStackTrace();;
        }
        System.out.println(&quot;Published an event&quot;);
    }

    public void deleteEvent() {
        System.out.println(&quot;Delete an event&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1661242489570&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
public class AppRunner implements ApplicationRunner {

    @Autowired
    EventService eventService;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        eventService.createEvent();
        eventService.publishEvent();
        eventService.deleteEvent();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1661242506352&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Created an event
1003
Published an event
1000
Delete an event
0&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;이 밖에도 &lt;b&gt;@Around&lt;/b&gt; 외에 타겟 메서드의 &lt;b&gt;Aspect &lt;/b&gt;실행 시점을 지정할 수 있는 어노테이션이 있다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;@Before (이전) : 어드바이스 타겟 메소드가 호출되기 전에 어드바이스 기능을 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;@After (이후) : 타겟 메소드의 결과에 관계없이(즉 성공, 예외 관계없이) 타겟 메소드가 완료 되면 어드바이스 기능을 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;@AfterReturning (정상적 반환 이후)타겟 메소드가 성공적으로 결과값을 반환 후에 어드바이스 기능을 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;@AfterThrowing (예외 발생 이후) : 타겟 메소드가 수행 중 예외를 던지게 되면 어드바이스 기능을 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;@Around (메소드 실행 전후) : 어드바이스가 타겟 메소드를 감싸서 타겟 메소드 호출전과 후에 어드바이스 기능을 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://engkimbs.tistory.com/746&quot;&gt;https://engkimbs.tistory.com/746&lt;/a&gt; [새로비:티스토리]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>study/TIL </category>
      <category>aop</category>
      <category>스프링</category>
      <author>서나쓰</author>
      <guid isPermaLink="true">https://sunow.tistory.com/97</guid>
      <comments>https://sunow.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-AOP-Spring-AOP-%EC%B4%9D%EC%A0%95%EB%A6%AC-%EA%B0%9C%EB%85%90-%ED%94%84%EB%A1%9D%EC%8B%9C-%EA%B8%B0%EB%B0%98-AOP-AOP#entry97comment</comments>
      <pubDate>Tue, 23 Aug 2022 17:16:36 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA/Spring] [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('}' (code 125))</title>
      <link>https://sunow.tistory.com/entry/orgspringframeworkhttpconverterHttpMessageNotReadableException-JSON-parse-error-Unexpected-character-code-125</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('}' (code 125)): was expecting double-quote to start field name; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('}' (code 125)): was expecting double-quote to start field name&amp;lt;EOL&amp;gt; at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 4, column: 2]]&lt;/span&gt;&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;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Sample json&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;{ &quot;subject&quot;: &quot;재목&quot;, &quot;contents&quot;: &quot;내용&quot;, }&lt;/span&gt;&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;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해결책&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;json 규칙에 맨 마지막 항목에는 '&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; ,&lt;/span&gt; &lt;/b&gt;' 이 붙으면 안 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쉼표 삭제하니 정상 작동&lt;/span&gt;&lt;/p&gt;</description>
      <category>study/TIL </category>
      <category>Java</category>
      <category>JSON</category>
      <category>Spring</category>
      <author>서나쓰</author>
      <guid isPermaLink="true">https://sunow.tistory.com/96</guid>
      <comments>https://sunow.tistory.com/entry/orgspringframeworkhttpconverterHttpMessageNotReadableException-JSON-parse-error-Unexpected-character-code-125#entry96comment</comments>
      <pubDate>Fri, 5 Aug 2022 15:06:11 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] SSH 접속시 UNPROTECTED PRIVATE KEY FILE! 에러 해결</title>
      <link>https://sunow.tistory.com/entry/Linux-SSH-%EC%A0%91%EC%86%8D%EC%8B%9C-UNPROTECTED-PRIVATE-KEY-FILE-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ssh 인증 방법을 public key 로 하면 ssh client 는 개인키(private key) 가 있는 폴더의 권한과 개인 키 파일(보통&amp;nbsp;id_rsa)의 권한 설정 여부를 확인하고 잘못 설정되었을 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음과 같은 에러 창을 띄우고 동작을 하지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659505214187&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/user/ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key &quot;/user/ssh/id_rsa&quot;: bad permissions&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;background-color: #fefefe; color: #000000;&quot;&gt;SSH 개인키는 중요한 정보이기 때문에 소유자외 다른 이가 읽을수 있으면 위와 같은 에러를 만나게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;SSH접속시UNPROTECTEDPRIVATEKEYFILE!에러해결-해결책&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해결책&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음과 같이 group 과 other 의 모든 권한을 막아주면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659505274346&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 0400 ~/.ssh/ubuntu@example.com/id_rsa&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  0600 으로 설정해도 되지만 실수로 개인키를 삭제하는 것을 방지하기 위해 읽기만 가능한 0400 을 권장합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-03 오후 2.42.02.png&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkKpOz/btrIPX0qiTR/kxdbYSESi1eCJBZMr9fmb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkKpOz/btrIPX0qiTR/kxdbYSESi1eCJBZMr9fmb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkKpOz/btrIPX0qiTR/kxdbYSESi1eCJBZMr9fmb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkKpOz%2FbtrIPX0qiTR%2FkxdbYSESi1eCJBZMr9fmb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;814&quot; height=&quot;262&quot; data-filename=&quot;스크린샷 2022-08-03 오후 2.42.02.png&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;262&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: #000000;&quot;&gt;SSH 로그인 해결!&lt;/span&gt;&lt;/p&gt;</description>
      <category>study/TIL </category>
      <author>서나쓰</author>
      <guid isPermaLink="true">https://sunow.tistory.com/93</guid>
      <comments>https://sunow.tistory.com/entry/Linux-SSH-%EC%A0%91%EC%86%8D%EC%8B%9C-UNPROTECTED-PRIVATE-KEY-FILE-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0#entry93comment</comments>
      <pubDate>Wed, 3 Aug 2022 14:42:23 +0900</pubDate>
    </item>
  </channel>
</rss>