<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발 스케치</title>
    <link>https://joonak.tistory.com/</link>
    <description>java,nodejs,database,infra 등등 여러 분야의 개발 관련 블로그</description>
    <language>ko</language>
    <pubDate>Sat, 4 Apr 2026 03:30:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>주낙쓰</managingEditor>
    <image>
      <title>개발 스케치</title>
      <url>https://tistory1.daumcdn.net/tistory/4225497/attach/6727dc4c67d94801b7d835aacd78222a</url>
      <link>https://joonak.tistory.com</link>
    </image>
    <item>
      <title>[infra] 도커(Docker) 사용법 (매운맛-포트포워딩) #1</title>
      <link>https://joonak.tistory.com/5</link>
      <description>&lt;p&gt;이번&amp;nbsp;포스팅에서는&amp;nbsp;도커의&amp;nbsp;기능을&amp;nbsp;조금&amp;nbsp;더&amp;nbsp;알아보도록&amp;nbsp;하겠습니다 &lt;br /&gt;&lt;br /&gt;앞의&amp;nbsp;포스팅에서는&amp;nbsp;centos&amp;nbsp;도커&amp;nbsp;이미지를&amp;nbsp;받아&amp;nbsp;올리는&amp;nbsp;작업을&amp;nbsp;해보았는데요 &lt;br /&gt;이번에는&amp;nbsp;웹서버인&amp;nbsp;nginx&amp;nbsp;도커&amp;nbsp;이미지를&amp;nbsp;받아&amp;nbsp;도커로&amp;nbsp;띄워보도록하겠습니다 &lt;br /&gt;&lt;br /&gt;먼저 nginx를 띄우기 위해 nginx 이미지를 받아줍니다&lt;/p&gt;
&lt;pre id=&quot;code_1601379382196&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker&amp;nbsp;pull&amp;nbsp;nginx &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;이미지가&amp;nbsp;받아졌으면&amp;nbsp;nginx를&amp;nbsp;도커로&amp;nbsp;띄울&amp;nbsp;차례인데요 &lt;br /&gt;nginx는&amp;nbsp;설정을&amp;nbsp;변경하지&amp;nbsp;않으면&amp;nbsp;기본으로&amp;nbsp;80포트를&amp;nbsp;LISTEN&amp;nbsp;하도록&amp;nbsp;되어있습니다 &lt;br /&gt;그렇기 때문에 저희는 80포트로 요청이 왔을때 nginx 도커로 보내주는 80 to 80 포트 포워딩이 필요합니다&lt;/p&gt;
&lt;pre id=&quot;code_1601379390984&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker&amp;nbsp;run&amp;nbsp;-id&amp;nbsp;--name&amp;nbsp;testnginx&amp;nbsp;-p&amp;nbsp;80:80&amp;nbsp;nginx &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;위의&amp;nbsp;명령어로&amp;nbsp;nginx&amp;nbsp;도커를&amp;nbsp;실행하면&amp;nbsp;실행과&amp;nbsp;동시에&amp;nbsp;nginx&amp;nbsp;어플리케이션이&amp;nbsp;도커&amp;nbsp;내에서&amp;nbsp;실행됩니다 &lt;br /&gt;그럼&amp;nbsp;127.0.0.1로&amp;nbsp;접속을&amp;nbsp;해보면&amp;nbsp;아래&amp;nbsp;이미지와&amp;nbsp;같이&amp;nbsp;nginx에서&amp;nbsp;제공하는&amp;nbsp;기본&amp;nbsp;웹페이지를&amp;nbsp;확인하실&amp;nbsp;수&amp;nbsp;있습니다&lt;/p&gt;
&lt;p&gt;(현재&amp;nbsp;저는&amp;nbsp;VitualBox&amp;nbsp;가상&amp;nbsp;머신에&amp;nbsp;도커를&amp;nbsp;띄웠기&amp;nbsp;때문에&amp;nbsp;가상&amp;nbsp;머신에도&amp;nbsp;포트&amp;nbsp;포워딩&amp;nbsp;설정을&amp;nbsp;한&amp;nbsp;상태입니다.&amp;nbsp;80&amp;nbsp;to&amp;nbsp;80) &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;nginx_기본화면.PNG&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;218&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4A0Co/btqJScqfzZX/miMxlv3N67WWEs6MccEhr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4A0Co/btqJScqfzZX/miMxlv3N67WWEs6MccEhr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4A0Co/btqJScqfzZX/miMxlv3N67WWEs6MccEhr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4A0Co%2FbtqJScqfzZX%2FmiMxlv3N67WWEs6MccEhr0%2Fimg.png&quot; data-filename=&quot;nginx_기본화면.PNG&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;218&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;도커를&amp;nbsp;실행&amp;nbsp;시킬때&amp;nbsp;명령어를&amp;nbsp;보시면&amp;nbsp;-p&amp;nbsp;80:80&amp;nbsp;이라는&amp;nbsp;옵션을&amp;nbsp;주었습니다 &lt;br /&gt;이&amp;nbsp;부분이&amp;nbsp;포트&amp;nbsp;포워딩을&amp;nbsp;해주는&amp;nbsp;옵션입니다 &lt;br /&gt;현재&amp;nbsp;서버에&amp;nbsp;80포트로&amp;nbsp;요청이&amp;nbsp;왔을때&amp;nbsp;해당&amp;nbsp;도커의&amp;nbsp;80포트로&amp;nbsp;포워딩을&amp;nbsp;해주는&amp;nbsp;것이죠 &lt;br /&gt;&lt;br /&gt;이처럼&amp;nbsp;포트&amp;nbsp;포워딩을&amp;nbsp;이용해서&amp;nbsp;웹서버의&amp;nbsp;80포트만이&amp;nbsp;아닌&amp;nbsp;여러&amp;nbsp;포트들을&amp;nbsp;포트&amp;nbsp;포워딩하여&amp;nbsp;도커를&amp;nbsp;좀&amp;nbsp;더&amp;nbsp;유연하게&amp;nbsp;사용하실&amp;nbsp;수&amp;nbsp;있습니다&lt;/p&gt;</description>
      <category>infra</category>
      <category>docker</category>
      <category>도커</category>
      <category>매운맛</category>
      <category>포트포워딩</category>
      <author>주낙쓰</author>
      <guid isPermaLink="true">https://joonak.tistory.com/5</guid>
      <comments>https://joonak.tistory.com/5#entry5comment</comments>
      <pubDate>Tue, 29 Sep 2020 20:45:12 +0900</pubDate>
    </item>
    <item>
      <title>[infra] 도커(Docker) 사용법 (순한맛) #1</title>
      <link>https://joonak.tistory.com/4</link>
      <description>&lt;p&gt;이번 포스팅에서는 도커를 사용하는 방법에 대해 알아보겠습니다 &lt;br /&gt;&lt;br /&gt;먼저 도커를 설치할 수 있는 테스트용 Linux 서버를 하나 준비해주세요&lt;/p&gt;
&lt;p&gt;저는&amp;nbsp;Virtual&amp;nbsp;Box라는&amp;nbsp;oracle에서&amp;nbsp;무료로&amp;nbsp;제공하는&amp;nbsp;VM도구를&amp;nbsp;사용하여&amp;nbsp;CentOS7을&amp;nbsp;준비했습니다&lt;/p&gt;
&lt;p&gt;(꼭 CentOS가 아니더라도 상관은 없지만 OS마다 명령어가 다른 점은 유의해주시기 바랍니다. Virtual Box 사용법은 나중에 기회가 되면 포스팅하겠습니다)&lt;br /&gt;&lt;br /&gt;도커를 설치하고 사용해보는 과정은 정말 쉽고 간단합니다&lt;/p&gt;
&lt;p&gt;(단,&amp;nbsp;모든 것이&amp;nbsp;그런 것처럼&amp;nbsp;도커에&amp;nbsp;대해서&amp;nbsp;깊고&amp;nbsp;상세하게&amp;nbsp;사용해보려면&amp;nbsp;쉽지&amp;nbsp;않을&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;여기서는 간단하게 사용해 볼 예정입니다.)&lt;/p&gt;
&lt;p&gt;먼저 도커를 사용하기 위해서 도커가 설치되어있어야겠죠&lt;/p&gt;
&lt;p&gt;아래의 명령어를 통해 도커를 설치해줍니다&lt;/p&gt;
&lt;pre id=&quot;code_1601034853133&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yum install -y wget
wget -qO- https://get.docker.com/ | sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;도커 설치가 완료되었으면 도커 서비스를 실행시켜야 됩니다&lt;/p&gt;
&lt;pre id=&quot;code_1601034482342&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl start docker&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 현재 설치된 도커의 버전을 확인해 봅시다&lt;/p&gt;
&lt;p&gt;저는 19.03.13 버전이 설치되었네요&lt;/p&gt;
&lt;pre id=&quot;code_1601034003318&quot; class=&quot;html xml&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker version&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sTFok/btqJDYxdUmp/BGkQTMq7xNTQzjFt2016bK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sTFok/btqJDYxdUmp/BGkQTMq7xNTQzjFt2016bK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sTFok/btqJDYxdUmp/BGkQTMq7xNTQzjFt2016bK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsTFok%2FbtqJDYxdUmp%2FBGkQTMq7xNTQzjFt2016bK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;이제&amp;nbsp;도커의&amp;nbsp;이미지를&amp;nbsp;받아서&amp;nbsp;컨테이너로&amp;nbsp;띄우는&amp;nbsp;작업을&amp;nbsp;해보겠습니다 &lt;br /&gt;&lt;br /&gt;도커의&amp;nbsp;이미지는&amp;nbsp;docker&amp;nbsp;pull로&amp;nbsp;도커의&amp;nbsp;이미지를&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있습니다&lt;/p&gt;
&lt;pre id=&quot;code_1601034026781&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull centos&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;그리고 docker images로 현재 도커 이미지 목록을 확인할 수 있습니다&lt;/p&gt;
&lt;pre id=&quot;code_1601034045925&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2pj27/btqJyyUUFOF/YZKE3WBSoHBN1GsQ8fvX5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2pj27/btqJyyUUFOF/YZKE3WBSoHBN1GsQ8fvX5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2pj27/btqJyyUUFOF/YZKE3WBSoHBN1GsQ8fvX5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2pj27%2FbtqJyyUUFOF%2FYZKE3WBSoHBN1GsQ8fvX5K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자 이제 도커 컨테이너를 띄워봅시다&lt;/p&gt;
&lt;p&gt;도커 실행 명령어&lt;/p&gt;
&lt;p&gt;docker run [옵션] 이미지[:태그] [명령어] [인자]&lt;/p&gt;
&lt;pre id=&quot;code_1601034232942&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -id --name testcontainer centos&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;도커&amp;nbsp;컨테이너가&amp;nbsp;띄워졌는지&amp;nbsp;아닌지를&amp;nbsp;확인해&amp;nbsp;보고 싶다면&amp;nbsp;docker&amp;nbsp;ps&amp;nbsp;명령어로&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현재&amp;nbsp;실행되고 있는&amp;nbsp;도커&amp;nbsp;컨테이너&amp;nbsp;리스트를&amp;nbsp;확인하실&amp;nbsp;수&amp;nbsp;있고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;docker ps -a로 현재 실행되지 않은 컨테이너 리스트까지 포함하여 확인하실 수도 있습니다&lt;/p&gt;
&lt;pre id=&quot;code_1601034279597&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps
docker ps -a &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tBSHD/btqJywQf0mp/qZXWVD1BWyDAM9gvlMSTw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tBSHD/btqJywQf0mp/qZXWVD1BWyDAM9gvlMSTw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tBSHD/btqJywQf0mp/qZXWVD1BWyDAM9gvlMSTw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtBSHD%2FbtqJywQf0mp%2FqZXWVD1BWyDAM9gvlMSTw1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;이렇게 도커 컨테이너를 띄우는 데에 성공을 했습니다&lt;/p&gt;
&lt;p&gt;그런데 컨테이너를 띄우기는 했는데 그래서 저게 뭐..라고 생각하실 수 있습니다&lt;/p&gt;
&lt;p&gt;앞의 포스팅에서도 설명드렸듯이 도커는 vm처럼 가상화 기술이기 때문에 실행된 도커 컨테이너에 직접 접근하여 독립된 os처럼 사용이 가능합니다&lt;/p&gt;
&lt;p&gt;그럼 도커 컨테이너에 접속해 봅시다&lt;/p&gt;
&lt;pre id=&quot;code_1601034300940&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it testcontainer /bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N33oD/btqJCSEzSyT/4Fp5rZ6FTSOXccQRcTo73k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N33oD/btqJCSEzSyT/4Fp5rZ6FTSOXccQRcTo73k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N33oD/btqJCSEzSyT/4Fp5rZ6FTSOXccQRcTo73k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN33oD%2FbtqJCSEzSyT%2F4Fp5rZ6FTSOXccQRcTo73k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;위의 명령어로 실행되고 있는 컨테이너에 접근이 가능하며 컨테이너 안으로 접속한 후&lt;/p&gt;
&lt;p&gt;ls -al 명령어를 입력해보면 평소 리눅스에서 확인할 수 있는 디렉토리 구조가 확인됩니다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;도커 이미지를 받아서 컨테이너를 띄우기까지 아주 쉽죠?&lt;/p&gt;
&lt;p&gt;아직까지도 도커의 개념이 조금 헷갈리는 분들이 계실 수는 있지만&lt;/p&gt;
&lt;p&gt;사용법이 그렇게 어렵지 않기 때문에 개념이 어려우시면&lt;/p&gt;
&lt;p&gt;먼저 설치해서 사용을 해보는 것도 공부하기 좋은 방법이라고 생각합니다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;도커 컨테이너를 띄울 때 포트 포워딩, 여러 개의 컨테이너를 하나의 가상 네트워크로 설정, 호스트 볼륨 설정, cpu/memory 설정 등을 이용하여 여러 가지 기능과 여러 가지 용도로 사용이 가능합니다&lt;/p&gt;
&lt;p&gt;다음 포스팅에서는 이 도커 컨테이너를 조금 더 깊이 있게 사용하는 방법에 대해서 알아보도록 합시다&lt;/p&gt;</description>
      <category>infra</category>
      <category>docker</category>
      <category>VM</category>
      <category>가상화</category>
      <category>도커</category>
      <category>도커사용법</category>
      <category>순한맛</category>
      <author>주낙쓰</author>
      <guid isPermaLink="true">https://joonak.tistory.com/4</guid>
      <comments>https://joonak.tistory.com/4#entry4comment</comments>
      <pubDate>Fri, 25 Sep 2020 21:17:54 +0900</pubDate>
    </item>
    <item>
      <title>[infra] 도커(Docker)란 무엇인가?</title>
      <link>https://joonak.tistory.com/3</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;docker-logo.png&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;1208&quot; width=&quot;352&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFkIdC/btqJyyrWeIk/HnhIe2I6Ktw5MzYvzCb4C0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFkIdC/btqJyyrWeIk/HnhIe2I6Ktw5MzYvzCb4C0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFkIdC/btqJyyrWeIk/HnhIe2I6Ktw5MzYvzCb4C0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFkIdC%2FbtqJyyrWeIk%2FHnhIe2I6Ktw5MzYvzCb4C0%2Fimg.png&quot; data-filename=&quot;docker-logo.png&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;1208&quot; width=&quot;352&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;최근&amp;nbsp;몇 년&amp;nbsp;전부터&amp;nbsp;개발자들&amp;nbsp;사이에서&amp;nbsp;도커라는 것이&amp;nbsp;아주&amp;nbsp;많이&amp;nbsp;얘기되고 있고&amp;nbsp;아주&amp;nbsp;핫하게&amp;nbsp;사용되고 있습니다 &lt;br /&gt;특히나&amp;nbsp;MSA&amp;nbsp;(Micro&amp;nbsp;Service&amp;nbsp;Architecture)&amp;nbsp;개념과&amp;nbsp;관련해서&amp;nbsp;언급이&amp;nbsp;되지&amp;nbsp;않을&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;기술입니다 &lt;br /&gt;&lt;br /&gt;저도 도커라는 용어는 몇 년 전부터 계속해서 들어왔지만 정확한 개념과 함께 접하게 된 것은 2018년 프로젝트를 하면서부터입니다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #666666;&quot;&gt;그럼&amp;nbsp;도커라는 것이&amp;nbsp;도대체&amp;nbsp;무엇이길래&amp;nbsp;최근&amp;nbsp;핫하게&amp;nbsp;사용되고&amp;nbsp;얘기되고&amp;nbsp;있는지&amp;nbsp;알아봅시다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;먼저&amp;nbsp;위키백과에&amp;nbsp;도커를&amp;nbsp;검색해보면&amp;nbsp;아래와&amp;nbsp;같이&amp;nbsp;표현되어있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;도커(Docker)는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다. &lt;br /&gt;도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행 중인 환경에 관계없이 언제나 동일하게 실행될 것을 보증한다.&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #666666;&quot;&gt;쉽게&amp;nbsp;말해서&amp;nbsp;도커는&amp;nbsp;가상화&amp;nbsp;기술&amp;nbsp;중&amp;nbsp;하나로&amp;nbsp;애플리케이션을&amp;nbsp;보다&amp;nbsp;쉽게&amp;nbsp;생성,&amp;nbsp;배포&amp;nbsp;및&amp;nbsp;실행할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;설계된&amp;nbsp;도구입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;보통&amp;nbsp;VM(Virtual&amp;nbsp;Machine)이라고 하면&amp;nbsp;가상화&amp;nbsp;OS를&amp;nbsp;설치하여&amp;nbsp;OS를&amp;nbsp;띄우게&amp;nbsp;됩니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;하지만&amp;nbsp;도커는&amp;nbsp;호스트&amp;nbsp;OS의&amp;nbsp;커널을&amp;nbsp;공유하여&amp;nbsp;독립된&amp;nbsp;컨테이너를&amp;nbsp;띄우고&amp;nbsp;그렇기&amp;nbsp;때문에&amp;nbsp;기존&amp;nbsp;VM&amp;nbsp;보다&amp;nbsp;빠른&amp;nbsp;속도를&amp;nbsp;보장합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #666666;&quot;&gt;특히나&amp;nbsp;개인적으로&amp;nbsp;도커가&amp;nbsp;강력하다고&amp;nbsp;생각하는&amp;nbsp;점은&amp;nbsp;docker&amp;nbsp;hub에&amp;nbsp;있다고&amp;nbsp;생각합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #666666;&quot;&gt;docker hub에서는 도커 컨테이너를 다양한 OS별로 손쉽게 띄울 수 있도록 미리 준비된 도커 이미지를 제공합니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #666666;&quot;&gt;그리고 개발자들은 자유롭게 각자의 도커 이미지를 생성하여 docker hub에 올리고 받아서 사용할 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;그렇기&amp;nbsp;때문에&amp;nbsp;기존에는&amp;nbsp;VM을&amp;nbsp;설치하고&amp;nbsp;nginx,&amp;nbsp;mysql,&amp;nbsp;mariadb,&amp;nbsp;java,&amp;nbsp;tomcat&amp;nbsp;등등&amp;nbsp;따로&amp;nbsp;설치&amp;nbsp;및&amp;nbsp;세팅해야 했던&amp;nbsp;것들을&amp;nbsp;아주&amp;nbsp;간단하게&amp;nbsp;도커&amp;nbsp;컨테이너로&amp;nbsp;띄워서&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;도커를&amp;nbsp;사용하면서&amp;nbsp;저는&amp;nbsp;테스트&amp;nbsp;환경을&amp;nbsp;구성할&amp;nbsp;땐&amp;nbsp;무조건&amp;nbsp;도커를&amp;nbsp;이용하여&amp;nbsp;손쉽게&amp;nbsp;테스트&amp;nbsp;환경을&amp;nbsp;세팅하게&amp;nbsp;되었습니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #666666;&quot;&gt;그럼 다음에는 이 도커를 사용하는 방법에 대해 알아봅시다&lt;/span&gt;&lt;/p&gt;</description>
      <category>infra</category>
      <category>docker</category>
      <category>MSA</category>
      <category>가상화</category>
      <category>도커</category>
      <category>도커이미지</category>
      <category>도커컨테이너</category>
      <author>주낙쓰</author>
      <guid isPermaLink="true">https://joonak.tistory.com/3</guid>
      <comments>https://joonak.tistory.com/3#entry3comment</comments>
      <pubDate>Thu, 24 Sep 2020 20:54:43 +0900</pubDate>
    </item>
    <item>
      <title>[nodejs] mysql2 에러 - Callback function is not available with promise clients.</title>
      <link>https://joonak.tistory.com/2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최근에&amp;nbsp;프로젝트를&amp;nbsp;하면서&amp;nbsp;nodejs와&amp;nbsp;mysql&amp;nbsp;db를&amp;nbsp;사용하면서&amp;nbsp;mysql2&amp;nbsp;모듈을&amp;nbsp;사용해&amp;nbsp;왔습니다 &lt;br&gt;&lt;br&gt;그동안 사용했던 mysql2 버전은 2.1.0 버전으로 잘 사용해왔고 &lt;br&gt;npm2&amp;nbsp;mysql2에서&amp;nbsp;안내해&amp;nbsp;주는&amp;nbsp;쿼리&amp;nbsp;실행&amp;nbsp;방법으로&amp;nbsp;사용을&amp;nbsp;해왔습니다 &lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.npmjs.com/package/mysql2&quot; target=&quot;_blank&quot;&gt;www.npmjs.com/package/mysql2&lt;/a&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bz31yD/btqJpsFpaev/EpIjZjUo8iof7WU2s3oJCK/img.png&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;780&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz31yD/btqJpsFpaev/EpIjZjUo8iof7WU2s3oJCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz31yD/btqJpsFpaev/EpIjZjUo8iof7WU2s3oJCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz31yD/btqJpsFpaev/EpIjZjUo8iof7WU2s3oJCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz31yD%2FbtqJpsFpaev%2FEpIjZjUo8iof7WU2s3oJCK%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bz31yD/btqJpsFpaev/EpIjZjUo8iof7WU2s3oJCK/img.png&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;780&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p 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;br&gt;그런데&amp;nbsp;잘&amp;nbsp;동작하던&amp;nbsp;프로젝트가&amp;nbsp;'Callback&amp;nbsp;function&amp;nbsp;is&amp;nbsp;not&amp;nbsp;available&amp;nbsp;with&amp;nbsp;promise&amp;nbsp;clients.'&amp;nbsp;에러를&amp;nbsp;내면서 &lt;br&gt;동작하지&amp;nbsp;않아&amp;nbsp;당황했고&amp;nbsp;프로세스&amp;nbsp;흐름을&amp;nbsp;따라&amp;nbsp;디버깅을&amp;nbsp;해보았습니다&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/srSp3/btqJgNkoTmy/224u6iKoCqwWIl37e6hdmk/img.png&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;23&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/srSp3/btqJgNkoTmy/224u6iKoCqwWIl37e6hdmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/srSp3/btqJgNkoTmy/224u6iKoCqwWIl37e6hdmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/srSp3/btqJgNkoTmy/224u6iKoCqwWIl37e6hdmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsrSp3%2FbtqJgNkoTmy%2F224u6iKoCqwWIl37e6hdmk%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/srSp3/btqJgNkoTmy/224u6iKoCqwWIl37e6hdmk/img.png&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;23&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p 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;br&gt;디버깅을&amp;nbsp;하면서&amp;nbsp;확인을&amp;nbsp;해보니&amp;nbsp;mysql2&amp;nbsp;모듈에서의&amp;nbsp;에러였고&amp;nbsp; &lt;br&gt;mysql2가&amp;nbsp;최근&amp;nbsp;버전업이&amp;nbsp;되면서&amp;nbsp;2.2.0&amp;nbsp;버전부터는&amp;nbsp; &lt;br&gt;아래&amp;nbsp;이미지와&amp;nbsp;같이&amp;nbsp;query(query,&amp;nbsp;params)의&amp;nbsp;params에는&amp;nbsp;function을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;없도록&amp;nbsp;수정이&amp;nbsp;되었습니다 &lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/yWZpa/btqJnEM3zxi/USJ9QzlqHbNK65j1PvkJ91/img.png&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;330&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yWZpa/btqJnEM3zxi/USJ9QzlqHbNK65j1PvkJ91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yWZpa/btqJnEM3zxi/USJ9QzlqHbNK65j1PvkJ91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yWZpa/btqJnEM3zxi/USJ9QzlqHbNK65j1PvkJ91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyWZpa%2FbtqJnEM3zxi%2FUSJ9QzlqHbNK65j1PvkJ91%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/yWZpa/btqJnEM3zxi/USJ9QzlqHbNK65j1PvkJ91/img.png&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;330&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p 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;br&gt;그래서&amp;nbsp;앞으로는&amp;nbsp;mysql2/promise를&amp;nbsp;사용할&amp;nbsp;때&amp;nbsp;async/await&amp;nbsp;방식으로&amp;nbsp;쿼리를&amp;nbsp;호출해야&amp;nbsp;됩니다&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/nRQxT/btqJohqxKCD/bknkIakvNKJBXlQkznto11/img.png&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;23&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nRQxT/btqJohqxKCD/bknkIakvNKJBXlQkznto11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nRQxT/btqJohqxKCD/bknkIakvNKJBXlQkznto11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nRQxT/btqJohqxKCD/bknkIakvNKJBXlQkznto11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnRQxT%2FbtqJohqxKCD%2FbknkIakvNKJBXlQkznto11%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/nRQxT/btqJohqxKCD/bknkIakvNKJBXlQkznto11/img.png&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;23&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p 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;br&gt;mysql2/promise 가 async/await을 사용하기 위해서 사용하는 모듈이기 때문에 async/await을 권고하는 것이 좋다고 생각은 하지만 잘&amp;nbsp;돌아가던&amp;nbsp;callback&amp;nbsp;방식을&amp;nbsp;갑자기&amp;nbsp;되지&amp;nbsp;않도록&amp;nbsp;버전업&amp;nbsp;한 것은&amp;nbsp;조금&amp;nbsp;당황스러울&amp;nbsp;따름입니다&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 저는 일단 프로젝트가 많이 진행된 상태이기 때문에 package.json에 원래&amp;nbsp;사용하던&amp;nbsp;mysql2&amp;nbsp;2.1.0&amp;nbsp;버전을&amp;nbsp;픽스하여&amp;nbsp;사용하고&amp;nbsp;있습니다&lt;/p&gt;</description>
      <category>application/nodejs</category>
      <category>Callback function is not available with promise clients.</category>
      <category>mysql2</category>
      <category>nodeJS</category>
      <author>주낙쓰</author>
      <guid isPermaLink="true">https://joonak.tistory.com/2</guid>
      <comments>https://joonak.tistory.com/2#entry2comment</comments>
      <pubDate>Wed, 23 Sep 2020 09:33:34 +0900</pubDate>
    </item>
  </channel>
</rss>