<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>쵸비의 끄적끄적</title>
    <link>https://youngcher1.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 4 Jul 2026 19:29:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>쵸비</managingEditor>
    <image>
      <title>쵸비의 끄적끄적</title>
      <url>https://tistory1.daumcdn.net/tistory/5734109/attach/b7bfad682d154d89b6ac45102953c7eb</url>
      <link>https://youngcher1.tistory.com</link>
    </image>
    <item>
      <title>아주 쉬운 Docker 이미지 hub에 올리기</title>
      <link>https://youngcher1.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 Local pc에 있는 Docker 컨테이너를 이미지로 만들어보고 hub에 올려보는 작업을 해보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터넷만 된다면 휴대용 이미지를 갖는 것이니 얼마나 좋은가&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;006&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/006.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/006.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제일 먼저 도커에 로그인이 되어있는지 확인.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4f050/btsmSuyQNJD/tAH5T8xaRFSP1EMk30c7gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4f050/btsmSuyQNJD/tAH5T8xaRFSP1EMk30c7gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4f050/btsmSuyQNJD/tAH5T8xaRFSP1EMk30c7gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4f050%2FbtsmSuyQNJD%2FtAH5T8xaRFSP1EMk30c7gK%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;1158&quot; height=&quot;135&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커 홈에서 로그인을 하니 자동으로 연동이 되었다. 개꿀&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 도커 컨테이너를 확인해보자&lt;/p&gt;
&lt;pre id=&quot;code_1688950424388&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps -a&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3glcl/btsmQfbfqod/eLmxBv9HIk62eAt6WmExj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3glcl/btsmQfbfqod/eLmxBv9HIk62eAt6WmExj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3glcl/btsmQfbfqod/eLmxBv9HIk62eAt6WmExj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3glcl%2FbtsmQfbfqod%2FeLmxBv9HIk62eAt6WmExj1%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;976&quot; height=&quot;195&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;195&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 이름이 nn1을 대상으로 이미지를 말아보자&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;docker commit [컨테이너 이름] [저장할 이미지 이름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1688950531469&quot; class=&quot;gcode&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker commit nn1 nn1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 확인&lt;/p&gt;
&lt;pre id=&quot;code_1688950556400&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&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-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNE7Ul/btsm7whtTxQ/GX7n5uiR95TKyRIkdULuWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNE7Ul/btsm7whtTxQ/GX7n5uiR95TKyRIkdULuWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNE7Ul/btsm7whtTxQ/GX7n5uiR95TKyRIkdULuWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNE7Ul%2Fbtsm7whtTxQ%2FGX7n5uiR95TKyRIkdULuWk%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;598&quot; height=&quot;175&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성이 잘 됨을 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;이제 도커 메인 홈에 가서 repository를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hub.docker.com/repository/docker/gpdla233/zeeplin/general&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hub.docker.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688950647298&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&quot; data-og-description=&quot;&quot; data-og-host=&quot;hub.docker.com&quot; data-og-source-url=&quot;https://hub.docker.com/repository/docker/gpdla233/zeeplin/general&quot; data-og-url=&quot;https://hub.docker.com/repository/docker/gpdla233/zeeplin/general&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://hub.docker.com/repository/docker/gpdla233/zeeplin/general&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hub.docker.com/repository/docker/gpdla233/zeeplin/general&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Docker&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;hub.docker.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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m3KtJ/btsm4CI2s3V/WDdF913hlL99SD37OG2AgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m3KtJ/btsm4CI2s3V/WDdF913hlL99SD37OG2AgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m3KtJ/btsm4CI2s3V/WDdF913hlL99SD37OG2AgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm3KtJ%2Fbtsm4CI2s3V%2FWDdF913hlL99SD37OG2AgK%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;898&quot; height=&quot;253&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;253&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;이런 식으로 [Username]/[repository 이름] 생성 완료!&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;/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;docker image tag [기존 이미지명]:[Tag] [Username]/[repository 이름]:[리포지토리에 저장할 태그명]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 작성해 주면 된다. (Tag는 이미지 리스트를 검색할 때 나오는 TAG를 뜻함. 위 첨부 사진을 참고)&lt;/p&gt;
&lt;pre id=&quot;code_1688950887189&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image tag nn1:latest gpdla233/zeeplin:namenode1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;26&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWFh0z/btsmSwck3oT/3h3wUGDcFIVAh1MTy3Qt4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWFh0z/btsmSwck3oT/3h3wUGDcFIVAh1MTy3Qt4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWFh0z/btsmSwck3oT/3h3wUGDcFIVAh1MTy3Qt4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWFh0z%2FbtsmSwck3oT%2F3h3wUGDcFIVAh1MTy3Qt4k%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;704&quot; height=&quot;26&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;26&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;다음 hub에 push를 해준다&lt;/p&gt;
&lt;pre id=&quot;code_1688951070739&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker push gpdla233/zeeplin:namenode1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVCdmu/btsmUuL0uCk/5GR3pPafYIsElm1KkTOREk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVCdmu/btsmUuL0uCk/5GR3pPafYIsElm1KkTOREk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVCdmu/btsmUuL0uCk/5GR3pPafYIsElm1KkTOREk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVCdmu%2FbtsmUuL0uCk%2F5GR3pPafYIsElm1KkTOREk%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;917&quot; height=&quot;117&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;117&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;이제 도커 홈에 접속하면 이미지가 hub에 올라간것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSmKRY/btsmRnmE9XC/BM1GfhTKdReadXBdUQKKA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSmKRY/btsmRnmE9XC/BM1GfhTKdReadXBdUQKKA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSmKRY/btsmRnmE9XC/BM1GfhTKdReadXBdUQKKA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSmKRY%2FbtsmRnmE9XC%2FBM1GfhTKdReadXBdUQKKA0%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;903&quot; height=&quot;329&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아주간단!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 hub에 올릴 수 있는 용량은 아래와 같으니 같이 알고있으면 좋을 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;969&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciuUkg/btsmUJoYfHK/hMfQqEKh8v9bQgPta6K1OK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciuUkg/btsmUJoYfHK/hMfQqEKh8v9bQgPta6K1OK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciuUkg/btsmUJoYfHK/hMfQqEKh8v9bQgPta6K1OK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciuUkg%2FbtsmUJoYfHK%2FhMfQqEKh8v9bQgPta6K1OK%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;969&quot; height=&quot;362&quot; data-origin-width=&quot;969&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;002&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1572&quot; data-origin-height=&quot;769&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baAzQX/btsmRor5bbi/OS6gFMkzMwK9oUPRrWe1Wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baAzQX/btsmRor5bbi/OS6gFMkzMwK9oUPRrWe1Wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baAzQX/btsmRor5bbi/OS6gFMkzMwK9oUPRrWe1Wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaAzQX%2FbtsmRor5bbi%2FOS6gFMkzMwK9oUPRrWe1Wk%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;1572&quot; height=&quot;769&quot; data-origin-width=&quot;1572&quot; data-origin-height=&quot;769&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;Pull을 할 경우는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1688952990657&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull [username]/zeeplin:datanode3&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vdZmp/btsmRmuzpub/hd61NEHWU6kBdsNK7czY00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vdZmp/btsmRmuzpub/hd61NEHWU6kBdsNK7czY00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vdZmp/btsmRmuzpub/hd61NEHWU6kBdsNK7czY00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvdZmp%2FbtsmRmuzpub%2Fhd61NEHWU6kBdsNK7czY00%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;725&quot; height=&quot;94&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝.&lt;/p&gt;</description>
      <category>docker</category>
      <category>docker</category>
      <category>Docker hub</category>
      <category>Hub</category>
      <category>Pull</category>
      <category>push</category>
      <category>도커</category>
      <category>이미지</category>
      <author>쵸비</author>
      <guid isPermaLink="true">https://youngcher1.tistory.com/53</guid>
      <comments>https://youngcher1.tistory.com/53#entry53comment</comments>
      <pubDate>Mon, 10 Jul 2023 10:15:16 +0900</pubDate>
    </item>
    <item>
      <title>[Django] 3. html 파일용 templates 설정</title>
      <link>https://youngcher1.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 장고에서 views에 return해주는 값을 html 경로를 넣어줘 페이지를 보여주게 해보자&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;우선 Bootstrap에서 샘플용 html을 받아옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://getbootstrap.kr/docs/5.2/getting-started/introduction/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://getbootstrap.kr/docs/5.2/getting-started/introduction/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688703132988&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;Bootstrap 시작하기&quot; data-og-description=&quot;Bootstrap은 강력하고 기능이 풍부한 프론트엔드 툴킷입니다. 프로토타입부터 프로덕션까지 뭐든지 빠르게 빌드해보세요.&quot; data-og-host=&quot;getbootstrap.kr&quot; data-og-source-url=&quot;https://getbootstrap.kr/docs/5.2/getting-started/introduction/&quot; data-og-url=&quot;https://getbootstrap.kr/docs/5.2/getting-started/introduction/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cjuGZ4/hyTfE2Bp9G/VhhVHyySSkajcPr0S73s71/img.png?width=2000&amp;amp;height=1000&amp;amp;face=0_0_2000_1000&quot;&gt;&lt;a href=&quot;https://getbootstrap.kr/docs/5.2/getting-started/introduction/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://getbootstrap.kr/docs/5.2/getting-started/introduction/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cjuGZ4/hyTfE2Bp9G/VhhVHyySSkajcPr0S73s71/img.png?width=2000&amp;amp;height=1000&amp;amp;face=0_0_2000_1000');&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;Bootstrap 시작하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Bootstrap은 강력하고 기능이 풍부한 프론트엔드 툴킷입니다. 프로토타입부터 프로덕션까지 뭐든지 빠르게 빌드해보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;getbootstrap.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;625&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FuvUy/btsmJD3jFQm/XdS1jDcqk6iE4tk9KzQksK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FuvUy/btsmJD3jFQm/XdS1jDcqk6iE4tk9KzQksK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FuvUy/btsmJD3jFQm/XdS1jDcqk6iE4tk9KzQksK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFuvUy%2FbtsmJD3jFQm%2FXdS1jDcqk6iE4tk9KzQksK%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;683&quot; height=&quot;417&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;625&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠른 시작에 html 태그 가져와서 띄워보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pubg 이름으로 되어있는 app 하위에 templates라는 폴더를 만들고 test.html 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/edweTa/btsmHdkf3Zh/I70qyXlakDmiKFsNTkFwZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/edweTa/btsmHdkf3Zh/I70qyXlakDmiKFsNTkFwZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/edweTa/btsmHdkf3Zh/I70qyXlakDmiKFsNTkFwZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FedweTa%2FbtsmHdkf3Zh%2FI70qyXlakDmiKFsNTkFwZk%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;255&quot; height=&quot;154&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠른 시작의 html 샘플 태그를 복사하여 붙여넣기, 저장&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bblnaU/btsmHmVA9e3/muLLJeA2XGrgTb4IIVPElK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bblnaU/btsmHmVA9e3/muLLJeA2XGrgTb4IIVPElK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bblnaU/btsmHmVA9e3/muLLJeA2XGrgTb4IIVPElK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbblnaU%2FbtsmHmVA9e3%2FmuLLJeA2XGrgTb4IIVPElK%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;672&quot; height=&quot;307&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;307&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;다음으로 내 프로젝트가 templates경로에서 test.html을 찾을 수 있게 settings.py 파일을 편집&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 항목을 찾아 설정을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;app 이름이 pubg이므로 하단에 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;289&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZCV4A/btsmIt1e7HM/CpW79xwnB83SGX1oVB1Y20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZCV4A/btsmIt1e7HM/CpW79xwnB83SGX1oVB1Y20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZCV4A/btsmIt1e7HM/CpW79xwnB83SGX1oVB1Y20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZCV4A%2FbtsmIt1e7HM%2FCpW79xwnB83SGX1oVB1Y20%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;289&quot; height=&quot;196&quot; data-origin-width=&quot;289&quot; data-origin-height=&quot;196&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;이제 설정이 완료 되었으니 pubg/views.py 파일에서 경로를 넣어줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rbbxe/btsmOcjmelG/vTVrdeePEy3Ufi6kgnyDzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rbbxe/btsmOcjmelG/vTVrdeePEy3Ufi6kgnyDzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rbbxe/btsmOcjmelG/vTVrdeePEy3Ufi6kgnyDzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frbbxe%2FbtsmOcjmelG%2FvTVrdeePEy3Ufi6kgnyDzK%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;328&quot; height=&quot;69&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;69&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;다음은 pubg/urls.py에 show_test 추가해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nU729/btsmIt1g5iI/mBWOLTrcI8yQbhKZyH6Djk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nU729/btsmIt1g5iI/mBWOLTrcI8yQbhKZyH6Djk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nU729/btsmIt1g5iI/mBWOLTrcI8yQbhKZyH6Djk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnU729%2FbtsmIt1g5iI%2FmBWOLTrcI8yQbhKZyH6Djk%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;494&quot; height=&quot;174&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;174&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;서버를 실행시키고 url창에 http://127.0.0.1:8000/show_test/ 를입력해주면 성공!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgkiys/btsmIgAOAwM/VzANpiKkIep4Q4heKKjgC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgkiys/btsmIgAOAwM/VzANpiKkIep4Q4heKKjgC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgkiys/btsmIgAOAwM/VzANpiKkIep4Q4heKKjgC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgkiys%2FbtsmIgAOAwM%2FVzANpiKkIep4Q4heKKjgC1%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;425&quot; height=&quot;182&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;182&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>Bootstrap</category>
      <category>django</category>
      <category>html파일</category>
      <category>Templates</category>
      <author>쵸비</author>
      <guid isPermaLink="true">https://youngcher1.tistory.com/52</guid>
      <comments>https://youngcher1.tistory.com/52#entry52comment</comments>
      <pubDate>Fri, 7 Jul 2023 13:22:16 +0900</pubDate>
    </item>
    <item>
      <title>#6 Zookeeper 클러스터 설정 및 Hadoop &amp;amp; Yarn 클러스터 실행</title>
      <link>https://youngcher1.tistory.com/51</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스(컨테이너) 복제가 완료되었으니 Zookeeper 클러스터를 설정해주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;myid 파일 편집&lt;br /&gt;: nn1,nn2,dn1 서버에 myid를 각각 1,2,3으로 편집&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# nn2 서버에서
vim /usr/local/zookeeper/data/myid
# 아래 내용으로 수정 후 저장
2
# nn1으로 이동
exit

# dn1 서버에서
vim /usr/local/zookeeper/data/myid

# 아래 내용으로 수정 후 저장
3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zookeeper 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1, nn2, dn1 서버에서 각각 실행한다.&lt;/p&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# nn1 서버 zookeeper 시작
/usr/local/zookeeper/bin/zkServer.sh start

# nn2 서버 zookeeper 시작
/usr/local/zookeeper/bin/zkServer.sh start

# dn1 서버 zookeeper 시작
/usr/local/zookeeper/bin/zkServer.sh start&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zookeeper 상태 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1, nn2, dn1 서버에서 각각 실행한다. namenode 하나가 Leader가 나오고 나머지는 Follower가 나오게 된다.&lt;/p&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# nn1 서버 zookeeper 확인
/usr/local/zookeeper/bin/zkServer.sh status
#follower

# nn2 서버 zookeeper 확인
/usr/local/zookeeper/bin/zkServer.sh status
#leader

# dn1버 zookeeper 확인
/usr/local/zookeeper/bin/zkServer.sh status
#follower&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HDFS ZKFC 초기화&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HDFS에서 ZKFC를 초기화 하는 이유는 HDFS의 고가용성을 유지하기 위해서 주키퍼가 네임노드의 상태를 모니터링하기에 앞서 하는 작업입니다.&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;nn1 서버에서 진행.&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;source /etc/environment
# zkfc 초기화
hdfs zkfc -formatZK
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HDFS ZKFC 초기화 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nn1 서버에 진행.&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;# zookeeper 폴더로 이동
cd /usr/local/zookeeper

# zkCli 실행
./bin/zkCli.sh

# Hadoop 클러스터 확인 [zk: localhost:2181(CONNECTED) 1] 하나확인
ls /hadoop-ha

# [my-hadoop-cluster] 확인 후 quit 명령으로 종료
quit
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Journalnode 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1, nn2, dn1 에서 실행한다.&lt;/p&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# nn1서버에서 실행
hdfs --daemon start journalnode

# nn2서버에서 실행
hdfs --daemon start journalnode

# dn1에서 실행
hdfs --daemon start journalnode&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약에 에러가 발생하면 시스템 변수가 활성이 안되어서 그럴 수 있으니 아래 코드를 실행해주자.&lt;/p&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;#필요에 따라 (bash: hdfs: command not found)
source /etc/environment&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Hadoop &amp;amp; Yarn 클러스터 실행&lt;/h3&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Namenode ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NameNode 초기화&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1 에서 실행.&lt;/p&gt;
&lt;pre class=&quot;gauss&quot;&gt;&lt;code&gt;# hdfs namenode 포맷
hdfs namenode -format
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NameNode 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1 에서만 실행.&lt;/p&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# hdfs namenode 실행
hdfs --daemon start namenode&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jps를 커멘드에 입력했을 때 namenode가 보이는지 체크&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Standby NameNode ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Standby NameNode 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn2 에서만 실행.&lt;/p&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# hdfs standby namenode 실행
hdfs namenode -bootstrapStandby&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;h2 data-ke-size=&quot;size26&quot;&gt;[ Hadoop 실행 ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;start-dfs.sh실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1 에서만 실행. 해당 단계에서 &amp;ldquo;DFSZKFailoverController&amp;rdquo; 프로세스가 실행 된다.&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;start-dfs.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Yarn 실행 ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;start-yarn.sh실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1 에서만 실행. 해당 단계에서 &amp;ldquo;ResourceManager&amp;rdquo; 프로세스가 실행된다. 나머지 DataNode 서버에서는 &amp;ldquo;NodeManager&amp;rdquo; 프로세스가 실행된다.&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;start-yarn.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jps를 커멘드에 입력하여 각각의 서버에 실행한 Manager, Node가 생성이 되었는지 체크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ JobHistory 실행 ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;historyserver 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1 에서만 실행. 해당 단계에서 &amp;ldquo;JobHistoryServer&amp;rdquo; 프로세스가 실행된다.&lt;/p&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;mapred --daemon start historyserver
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Active, Standby NameNode 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;#nn1 서버에서 실행
hdfs haadmin -getServiceState namenode1
#active

#nn2 서버에서 실행
hdfs haadmin -getServiceState namenode2
#standby&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;active와 standby가 보이는데 active는 말그대로 실행중인 서버로 인식되는 표시이고 standby는 nn1서버가 모종의 이유로 문제가 생길시 nn2가 이어받을 준비가 되었다는 표시이다.&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;jps를 커멘드에 입력하고 manager와 node들이 실행이 되었다면 클러스터를 정상적으로 실행한 것이다.&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;019&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/019.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/019.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;</description>
      <category>빅데이터 분석 환경 구축(Docker 활용)</category>
      <author>쵸비</author>
      <guid isPermaLink="true">https://youngcher1.tistory.com/51</guid>
      <comments>https://youngcher1.tistory.com/51#entry51comment</comments>
      <pubDate>Fri, 7 Jul 2023 12:49:43 +0900</pubDate>
    </item>
    <item>
      <title>[기초]네트워크란? 네트워크의 기능</title>
      <link>https://youngcher1.tistory.com/50</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xaejW/btsmKVoGUoa/lfq0Y3KrmGVKvIGwM9E1Hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xaejW/btsmKVoGUoa/lfq0Y3KrmGVKvIGwM9E1Hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xaejW/btsmKVoGUoa/lfq0Y3KrmGVKvIGwM9E1Hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxaejW%2FbtsmKVoGUoa%2Flfq0Y3KrmGVKvIGwM9E1Hk%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;621&quot; height=&quot;411&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Network 란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터나 기타 기기들이 리소스를 공유하거나 데이터를 주고 받기 위해 유선 혹은 무선으로 연결된 통신 체계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Network의 기능&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 애플리케이션 목적에 맞는 통신 방법 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 신뢰할 수 있는 데이터 전송 방법 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 네트워크 간의 최적의 통신 경로 결정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 목적지로 데이터 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 노드 사이의 데이터 전송&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;약속된 통신 형식, 절차, 규약이 있는데 이것을 네트워크 &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;프로토콜(network protocol)&lt;/span&gt;&lt;/b&gt;이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Network의 기능을 구현하기 위해서는 프로토콜 하나로 구현할 수 없고 여러 프로토콜이 필요하며 이것을 수행하기 위해서 &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;모듈화&lt;/span&gt;&lt;/b&gt;를 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 모듈화를 간단하게 말하자면 위에 5가지 Network기능별로 나눴다 라고 생각하면 된다.&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;background-color: #f6e199;&quot;&gt;&lt;b&gt;Layerd architecture(계층 구조)&lt;/b&gt;&lt;/span&gt;라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계층 구조로 모델링한 두가지 모델링이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;OSI model (7 layer) : 범용적인 네트워크 구조&lt;/li&gt;
&lt;li&gt;&amp;nbsp;TCP/IP stack (4 layer) : 인터넷에 특화된 네트워크 구조&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;그러면 이제 OSI model 7계층에 대해서 자세하게 알아보자!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;OSI 7 layer&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&amp;nbsp;L1 ~ L7로 구성됨&lt;/li&gt;
&lt;li&gt;&amp;nbsp;각 레이어에 맞게 프로토콜이 세분화돼서 구현&lt;/li&gt;
&lt;li&gt;&amp;nbsp;각 레이어의 프로토콜은 하위 레이어의 프로토콜이 제공하는 기능을 사용하여 동작.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;574&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pJ3sK/btsmG9uZBea/eJRKBZ91bMXJHg4NiLhAkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pJ3sK/btsmG9uZBea/eJRKBZ91bMXJHg4NiLhAkK/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://www.networkworld.com/article/3239677/the-osi-model-explained-and-how-to-easily-remember-its-7-layers.html&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pJ3sK/btsmG9uZBea/eJRKBZ91bMXJHg4NiLhAkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpJ3sK%2FbtsmG9uZBea%2FeJRKBZ91bMXJHg4NiLhAkK%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;461&quot; height=&quot;351&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;574&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://www.networkworld.com/article/3239677/the-osi-model-explained-and-how-to-easily-remember-its-7-layers.html&lt;/figcaption&gt;
&lt;/figure&gt;
&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;application layer&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;application&amp;nbsp; : 애플리케이션 목적에 맞는 통신 방법 제공 (HTTP, DNS, SMTP, FTP)&lt;/li&gt;
&lt;li&gt;presentation : 애플리케이션 간의 통신에서 메시지 포맷 관리 (인코딩, 디코딩, 암호화, 복호화)&lt;/li&gt;
&lt;li&gt;session : 애플리케이션 간의 통신에서 세션을 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;transport : 애플리케이션 간의 통신 담당( 안정적이며 신뢰 : TCP, 필수 기능만 제공 : UDP)&lt;/li&gt;
&lt;li&gt;network : 호스트 간의 통신 담당(IP),&amp;nbsp; 네트워크 간의 최적의 경로 결정&lt;/li&gt;
&lt;li&gt;data link : 직접 연결된 노드 간의 통신 담당, IP 주소를 MAC 주소로 변환하며 기반인 통신(ARP)&lt;/li&gt;
&lt;li&gt;physical : bits 단위로 데이터 전송&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;처리과정&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1329&quot; data-origin-height=&quot;751&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GyA5I/btsmJDaMyk0/4kK6DpZ3bbMf9mKyEEcj70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GyA5I/btsmJDaMyk0/4kK6DpZ3bbMf9mKyEEcj70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GyA5I/btsmJDaMyk0/4kK6DpZ3bbMf9mKyEEcj70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGyA5I%2FbtsmJDaMyk0%2F4kK6DpZ3bbMf9mKyEEcj70%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;1329&quot; height=&quot;751&quot; data-origin-width=&quot;1329&quot; data-origin-height=&quot;751&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 7개층을 통해 데이터를 포장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 라우터로 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 라우터는 목적지를(IP) 찾기 위해 Network 레이어까지 포장을 해체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 다시 포장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 목적지까지 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 포장을 풀면서 데이터를 확인&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;background-color: #f6e199;&quot;&gt;&lt;b&gt;encapsulation&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;decapsulation&lt;/b&gt;&lt;/span&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;TCP/IP stack&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TCP/IP는 7개층에서 Application과 Link,Physical을 묶으면서 구성을 하여 4계층으로 보는 것 이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpNOtc/btsmMsfwWFk/yiKrSpVaHyrhmOar0joSe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpNOtc/btsmMsfwWFk/yiKrSpVaHyrhmOar0joSe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpNOtc/btsmMsfwWFk/yiKrSpVaHyrhmOar0joSe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpNOtc%2FbtsmMsfwWFk%2FyiKrSpVaHyrhmOar0joSe1%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;705&quot; height=&quot;560&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Application은 합쳐서 보면 좋긴하나 Data link와 Physical의 경우에는 따로 구분하여 보는게 더 좋을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐하면 세분화된 기능과 중요 역할이 있는 부분은 따로 익히면 좋지만 Application 부분에 대한 프로토콜의 기능의 목적은 서비스 목적의 더 강하다고 느껴지기 때문이다.&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;008&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/008.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/008.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>네트워크</category>
      <category>7개층</category>
      <category>기초</category>
      <category>네트워크</category>
      <category>프로토콜</category>
      <author>쵸비</author>
      <guid isPermaLink="true">https://youngcher1.tistory.com/50</guid>
      <comments>https://youngcher1.tistory.com/50#entry50comment</comments>
      <pubDate>Fri, 7 Jul 2023 11:20:11 +0900</pubDate>
    </item>
    <item>
      <title>[Git] 왕초보 Git 사용하기</title>
      <link>https://youngcher1.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 git 관리를 하기 위해서 git Bash를 활용해 보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 새 프로젝트를 만들어 주자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1899&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SFXum/btsmGALJxOu/41KOCRUqEKVgmHc6tfxwkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SFXum/btsmGALJxOu/41KOCRUqEKVgmHc6tfxwkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SFXum/btsmGALJxOu/41KOCRUqEKVgmHc6tfxwkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSFXum%2FbtsmGALJxOu%2F41KOCRUqEKVgmHc6tfxwkk%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;1899&quot; height=&quot;366&quot; data-origin-width=&quot;1899&quot; data-origin-height=&quot;366&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;Repository를 만들고 나면 git bash를 설치해주자 (&lt;a href=&quot;https://code-lab1.tistory.com/249&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://code-lab1.tistory.com/249&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우 검색 창에 Git Bash를 검색하고 실행을 시켜주면..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;143&quot; data-origin-height=&quot;55&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/97h6L/btsmBir5iK5/zkzE8UWOz6I4epq7zXN1K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/97h6L/btsmBir5iK5/zkzE8UWOz6I4epq7zXN1K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/97h6L/btsmBir5iK5/zkzE8UWOz6I4epq7zXN1K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F97h6L%2FbtsmBir5iK5%2FzkzE8UWOz6I4epq7zXN1K0%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;143&quot; height=&quot;55&quot; data-origin-width=&quot;143&quot; data-origin-height=&quot;55&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAKj8J/btsmB9O2WA5/xN9idNvBZLobN00u4qdRv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAKj8J/btsmB9O2WA5/xN9idNvBZLobN00u4qdRv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAKj8J/btsmB9O2WA5/xN9idNvBZLobN00u4qdRv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAKj8J%2FbtsmB9O2WA5%2FxN9idNvBZLobN00u4qdRv1%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;583&quot; height=&quot;372&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;귀여운 터미널이 나오게된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 사용자 이름과 이메일을 config해주자&lt;/p&gt;
&lt;pre class=&quot;shell&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;#사용자이름
git config --global user.name &quot;youngcher&quot;

#사용자 이메일
git config --global user.email &quot;youngcher1@naver.com&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 내가 git에 올리고 싶은 폴더로 이동해주자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tmx6y/btsmGBcQw6Q/35RVZXGXbrVPf68ZsPm4yK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tmx6y/btsmGBcQw6Q/35RVZXGXbrVPf68ZsPm4yK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tmx6y/btsmGBcQw6Q/35RVZXGXbrVPf68ZsPm4yK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftmx6y%2FbtsmGBcQw6Q%2F35RVZXGXbrVPf68ZsPm4yK%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;478&quot; height=&quot;114&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;114&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 파일들이 있는지 확인해보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGwy0W/btsmGkWAI2e/nPms0KgWGWAwQFpuZN1nJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGwy0W/btsmGkWAI2e/nPms0KgWGWAwQFpuZN1nJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGwy0W/btsmGkWAI2e/nPms0KgWGWAwQFpuZN1nJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGwy0W%2FbtsmGkWAI2e%2FnPms0KgWGWAwQFpuZN1nJK%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;520&quot; height=&quot;95&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 깃을 초기화 해주자&lt;/p&gt;
&lt;pre id=&quot;code_1689078169143&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git init&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;모든 파일을 git에 올릴 것이기에 git add .을 입력해준다. 만일 하나의 파일을 올리고 싶다면 git add manage.py를 입려해주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1688705608619&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#해당 경로 모든 파일 add
git add .&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/db2zzK/btsmz2pKgoU/f4bH9JyCt4hYfGmNA0dsCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/db2zzK/btsmz2pKgoU/f4bH9JyCt4hYfGmNA0dsCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/db2zzK/btsmz2pKgoU/f4bH9JyCt4hYfGmNA0dsCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdb2zzK%2Fbtsmz2pKgoU%2Ff4bH9JyCt4hYfGmNA0dsCk%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;511&quot; height=&quot;57&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올릴 파일들이 잘 add가 되어있는지 확인을 위해서 git status를 입력해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1688620054091&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#add가 되어있는 상태확인
git status&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;그리고 수정사항을 commit 해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1688705648233&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#commit 하기
git commit -m 'test'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmDlMw/btsmA15aSyA/M32fky3jNEEaTMvENnlJxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmDlMw/btsmA15aSyA/M32fky3jNEEaTMvENnlJxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmDlMw/btsmA15aSyA/M32fky3jNEEaTMvENnlJxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmDlMw%2FbtsmA15aSyA%2FM32fky3jNEEaTMvENnlJxk%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;569&quot; height=&quot;108&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1개의 파일이 수정상태이고 'test'라는 이름으로 커밋이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 push를 해주기에 앞서서 내가 만든 git에 repository와 local과의 연결다리를 만들어 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1688620327835&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#git remote를 제거
git remote remove origin

#remote 확인
git remote -v

#git remote 생성
git remote add origin https://github.com/youngcher/Pubg.git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ews51/btsmNPoL5ER/JDJDvuOeBYwB91XorSXBp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ews51/btsmNPoL5ER/JDJDvuOeBYwB91XorSXBp1/img.png&quot; data-alt=&quot;git remote 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ews51/btsmNPoL5ER/JDJDvuOeBYwB91XorSXBp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEws51%2FbtsmNPoL5ER%2FJDJDvuOeBYwB91XorSXBp1%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;390&quot; height=&quot;76&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;git remote 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제 연결이 끝났으니 Push를 해주자.&lt;/p&gt;
&lt;pre id=&quot;code_1688705707212&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git push origin main&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 없이 잘 돌아가면 성공!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MKpnW/btsmFhe4ayA/q8ihtA1YFdkNS4nA76t6U1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MKpnW/btsmFhe4ayA/q8ihtA1YFdkNS4nA76t6U1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MKpnW/btsmFhe4ayA/q8ihtA1YFdkNS4nA76t6U1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMKpnW%2FbtsmFhe4ayA%2Fq8ihtA1YFdkNS4nA76t6U1%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;919&quot; height=&quot;241&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이것 저것 만지다 보니 에러가 발생했다..&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 에러는 Git에서 로컬 브랜치와 리모트 브랜치가 서로 다른 경우 발생하는 충돌로 인한 문제라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 명령어를 차례로 실행.&lt;/p&gt;
&lt;pre id=&quot;code_1688620463678&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#리모트 브랜치의 변경 사항을 로컬 브랜치에 병합하게 됩니다.
git pull origin main  

#다시 push
git push origin main&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sxNxl/btsmBZ0hLwj/T5FDK3PbhIO3kfC6Xi11K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sxNxl/btsmBZ0hLwj/T5FDK3PbhIO3kfC6Xi11K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sxNxl/btsmBZ0hLwj/T5FDK3PbhIO3kfC6Xi11K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsxNxl%2FbtsmBZ0hLwj%2FT5FDK3PbhIO3kfC6Xi11K1%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;934&quot; height=&quot;213&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 에러 발생..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 에러는 Git에서 로컬 브랜치의 커밋과 리모트 브랜치의 커밋이 서로 다르기 때문에 발생하는 충돌로 인한 문제라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 명령어를 실행.&lt;/p&gt;
&lt;pre id=&quot;code_1688620633838&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#리모트 브랜치와 로컬 브랜치를 합칠 때, 로컬 브랜치의 HEAD를 리모트 브랜치로 
#옮기는 것이 아니라 리모트 브랜치의 HEAD를 로컬 브랜치의 HEAD위에 올리는 것.
git pull --rebase origin main

#다시 push
git push origin main&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baCClw/btsmAMgcLLY/fRNX5AKwlK0t9H7pqrrHF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baCClw/btsmAMgcLLY/fRNX5AKwlK0t9H7pqrrHF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baCClw/btsmAMgcLLY/fRNX5AKwlK0t9H7pqrrHF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaCClw%2FbtsmAMgcLLY%2FfRNX5AKwlK0t9H7pqrrHF1%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;736&quot; height=&quot;270&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성공!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git hub에서 확인을 해보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JZU9u/btsmB9hpGSI/qhgO1N7uwEwmBvcAlagTaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JZU9u/btsmB9hpGSI/qhgO1N7uwEwmBvcAlagTaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JZU9u/btsmB9hpGSI/qhgO1N7uwEwmBvcAlagTaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJZU9u%2FbtsmB9hpGSI%2FqhgO1N7uwEwmBvcAlagTaK%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;1284&quot; height=&quot;276&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;manage.py, myproject 폴더가 잘 들어온 것을 확인 할 수 있다.&lt;/p&gt;</description>
      <category>git</category>
      <category>git</category>
      <category>왕초보</category>
      <author>쵸비</author>
      <guid isPermaLink="true">https://youngcher1.tistory.com/49</guid>
      <comments>https://youngcher1.tistory.com/49#entry49comment</comments>
      <pubDate>Thu, 6 Jul 2023 14:19:25 +0900</pubDate>
    </item>
    <item>
      <title>[Django] 2. 라우팅</title>
      <link>https://youngcher1.tistory.com/48</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FGScX/btsml5zytnx/yX42YSCHbrkImUoGrnzMvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FGScX/btsml5zytnx/yX42YSCHbrkImUoGrnzMvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FGScX/btsml5zytnx/yX42YSCHbrkImUoGrnzMvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFGScX%2Fbtsml5zytnx%2FyX42YSCHbrkImUoGrnzMvk%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;581&quot; height=&quot;286&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 project는 생성을 했으나 app은 보이지 않을 것이기에 먼저 app을 생성해주자&lt;/p&gt;
&lt;pre id=&quot;code_1688626291785&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;django-admin startapp &amp;lt;app이름&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Project urls.py에서 Request를 받게 되면 아래 코드를 통해서 들어온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경로: myproject/urls.py&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kwWJB/btsmnBLw7Ib/goILECPIkylc5QFrpLlirK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kwWJB/btsmnBLw7Ib/goILECPIkylc5QFrpLlirK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kwWJB/btsmnBLw7Ib/goILECPIkylc5QFrpLlirK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkwWJB%2FbtsmnBLw7Ib%2FgoILECPIkylc5QFrpLlirK%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;645&quot; height=&quot;395&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음으로 app에 있는 urls.py로 이동하게 되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경로: myapp/urls.py&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buOAwz/btsmlSG4WRN/3JYHoOLIdZkNjNWC61sIB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buOAwz/btsmlSG4WRN/3JYHoOLIdZkNjNWC61sIB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buOAwz/btsmlSG4WRN/3JYHoOLIdZkNjNWC61sIB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuOAwz%2FbtsmlSG4WRN%2F3JYHoOLIdZkNjNWC61sIB0%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;620&quot; height=&quot;322&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;app의 views.py로 들어가게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;views에 있는 메소드를 통해 로직 또는 DB를 통해 응답하게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mk8KN/btsmrW87pP1/Z01kKRLHc1sssc1oadEBQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mk8KN/btsmrW87pP1/Z01kKRLHc1sssc1oadEBQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mk8KN/btsmrW87pP1/Z01kKRLHc1sssc1oadEBQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMk8KN%2FbtsmrW87pP1%2FZ01kKRLHc1sssc1oadEBQK%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;781&quot; height=&quot;455&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;455&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>python</category>
      <category>django</category>
      <category>라우팅</category>
      <author>쵸비</author>
      <guid isPermaLink="true">https://youngcher1.tistory.com/48</guid>
      <comments>https://youngcher1.tistory.com/48#entry48comment</comments>
      <pubDate>Tue, 4 Jul 2023 13:58:35 +0900</pubDate>
    </item>
    <item>
      <title>[Django] 1. 설치</title>
      <link>https://youngcher1.tistory.com/47</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 웹 프레임워크인 Django를 한번 해보자 Spring boot를 먼저 해봤지만 python으로도 해보고 싶어 시작했다.&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;lt;장고 아키텍쳐&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RCtNT/btsmrAL3jfe/mlMtVA9RItwMOASex9Nyp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RCtNT/btsmrAL3jfe/mlMtVA9RItwMOASex9Nyp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RCtNT/btsmrAL3jfe/mlMtVA9RItwMOASex9Nyp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRCtNT%2FbtsmrAL3jfe%2FmlMtVA9RItwMOASex9Nyp1%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;633&quot; height=&quot;297&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VS&amp;nbsp; 터미널에서 아래 코드를 실행&lt;/p&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;pip install django
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;nsis&quot;&gt;&lt;code&gt;#명령어 확인
django-admin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;605&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kWznw/btsmmzHbF1U/PqXnAYED30apMEkYoXgvtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kWznw/btsmmzHbF1U/PqXnAYED30apMEkYoXgvtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kWznw/btsmmzHbF1U/PqXnAYED30apMEkYoXgvtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkWznw%2FbtsmmzHbF1U%2FPqXnAYED30apMEkYoXgvtK%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;294&quot; height=&quot;605&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;605&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 생성&lt;/p&gt;
&lt;pre class=&quot;erlang&quot;&gt;&lt;code&gt;django-admin startproject myproject .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k7qZ9/btsmlSG3evq/2QLHLs8kYk0KTO24QPszhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k7qZ9/btsmlSG3evq/2QLHLs8kYk0KTO24QPszhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k7qZ9/btsmlSG3evq/2QLHLs8kYk0KTO24QPszhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk7qZ9%2FbtsmlSG3evq%2F2QLHLs8kYk0KTO24QPszhk%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;388&quot; height=&quot;291&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;vala&quot;&gt;&lt;code&gt;#메니저 코드 명령어 출력
manage.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;213&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m1OSs/btsmqUjFQPZ/rWmKGDn6TDPu0RIUBW7qsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m1OSs/btsmqUjFQPZ/rWmKGDn6TDPu0RIUBW7qsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m1OSs/btsmqUjFQPZ/rWmKGDn6TDPu0RIUBW7qsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm1OSs%2FbtsmqUjFQPZ%2FrWmKGDn6TDPu0RIUBW7qsK%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;213&quot; height=&quot;337&quot; data-origin-width=&quot;213&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;vala&quot;&gt;&lt;code&gt;#서버 실행하는 코드
manage.py runserver
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버를 키고 주소애 들어가서 로켓이 보이면 서버가 정상 작동 됨을 확인 할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;#포트 8888로 서버 실행하는 코드
manage.py runserver 8888
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;nsis&quot;&gt;&lt;code&gt;# myapp 이름으로 앱 생성
django-admin startapp myapp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYNf9L/btsmqKOYCvn/h0gyWZfdkE9QWtN1dmWjpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYNf9L/btsmqKOYCvn/h0gyWZfdkE9QWtN1dmWjpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYNf9L/btsmqKOYCvn/h0gyWZfdkE9QWtN1dmWjpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYNf9L%2FbtsmqKOYCvn%2Fh0gyWZfdkE9QWtN1dmWjpk%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;424&quot; height=&quot;334&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>django</category>
      <category>Python</category>
      <author>쵸비</author>
      <guid isPermaLink="true">https://youngcher1.tistory.com/47</guid>
      <comments>https://youngcher1.tistory.com/47#entry47comment</comments>
      <pubDate>Tue, 4 Jul 2023 13:56:09 +0900</pubDate>
    </item>
    <item>
      <title>#5 컨테이너 복제 및 네트워크 구축</title>
      <link>https://youngcher1.tistory.com/46</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 이미지를 생성하여 복제를 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5개의 컨테이너를 생성하여 두개는 Namenode,&amp;nbsp; 세게는 Datanode로 사용할 예정이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Docker 컨테이너 나가기 &amp;amp; 이미지 만들기 ]&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker 컨테이너에서 나가기 위해 &lt;b&gt;Ctrl + P&lt;/b&gt; 키를 누르고 바로 &lt;b&gt;Ctrl + Q&lt;/b&gt; 키를 누르면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;#이미지 만들기 [이름이 test라는 컨테이너로 test 이미지 만들기]
docker commit test test

#이미지 확인
docker images
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Docker network 설정 ]&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 특정 네트워크 대역을 지정하여 도커 네트워크를 생성한다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;docker network create --gateway 172.19.0.1 --subnet 172.19.0.0/16 testnet
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker network 리스트 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;docker network ls
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker network 정보 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker inspect testnet
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker 컨테이너 1번 생성[test 이미지 사용]&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;docker run -it -d -p 18888:18888 --network testnet --ip 172.19.0.11 --hostname nn1 --name nn1 test /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker 컨테이너 2~5번 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;# 같은 방법으로 ip 172.19.0.13~ip 172.19.0.15(dn1, dn2, dn3)까지 만들어준다
#2번
docker run -it -d --network testnet --ip 172.19.0.12 --hostname nn2 --name nn2 test /bin/bash
#3번
docker run -it -d --network testnet --ip 172.19.0.13 --hostname dn1 --name dn1 test /bin/bash
#4번
docker run -it -d --network testnet --ip 172.19.0.14 --hostname dn2 --name dn2 test /bin/bash
#5번
docker run -it -d --network testnet --ip 172.19.0.15 --hostname dn3 --name dn3 test /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker 컨테이너 호스트 이름 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1, nn2 컨테이너에 접속하여 각각 호스트 이름이 정상적으로 지정 되었는지 확인한다.&lt;/p&gt;
&lt;pre class=&quot;armasm&quot;&gt;&lt;code&gt;docker exec -it nn1 /bin/bash

cat /etc/hostname
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nn1 ~dn3 컨테이너 모두 하위 작업 반복&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH KEY 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;vala&quot;&gt;&lt;code&gt;#5개의 서버 모두 실행
ssh-keygen -t rsa
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH KEY를 인증 KEY로 복사&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;#5개의 서버 모두 실행
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH 디렉토리 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;#5개의 서버 모두 실행
cd ~/.ssh &amp;amp;&amp;amp; ls
&amp;gt;&amp;gt;&amp;gt; authorized_keys  id_rsa  id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH 인증키 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;llvm&quot;&gt;&lt;code&gt;#5개의 서버 모두 실행
cat authorized_keys
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGFz2na47vkmzxeqISPycd0HzySVCFengqBUji9VlzYOb6gf155GrPU/iX8FPzikD0ziVG9RYagmvtEyiegzCtMQRoomnm1QYz9JLjYjf6hxQZLnKEIpK+fC7n+Jxn7iEs7jyC/zf0uqQyirPfyTlNvcoY1z7pb0rfxVNT7oCL8FhVCFFCBtFpphnK5dCv0J15cqr+NN7eo7OfHvDqVBKD4LEhS3hpQLP3meB/YCdqw6WEi6lrb6uUvyIftKe65Jmm/B5WqTI4dJUhFCtyIXqpyYRWdXRubb0QEXIPvQk2sxHBlaYTyacdJD5B5+uaAt083eqwNBuJhtkpLTAHPgwz2ThwixGSl1i+pJuLEhSK3vcZXJvC8TgU6UfEI3wDejkTtCDtRMj9HIjulLjBBJ+/+O0ms8+TpkGX0lUvIoE31jdBN/Otg3GAn+WGtsAY61Fcz1cwGx6o/MAL99FBXXljYkXyKYZ82IHBJn3mbf4NRYM90R0MoTFLUnB0EN0a+m8= root@server01
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통신할 Docker 컨테이너끼리 SSH 인증키 등록 : nn1~dn3까지 ssh키를 입력.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예 : nn1 과 nn2 컨테이너가 양방향 SSH 인증 통신을 하기 위해서 nn1의 인증키를 nn2에 등록하고, nn2의 인증키를nn1에 등록한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;nn1 컨테이너&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;#5개의 서버 모두 실행
#해당 파일에 5개 서버의 ssh키를 넣어준다

vi ~/.ssh/authorized_keys
&quot;&quot;&quot;
# nn1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGFz2na47vkmzxeqISPycd0HzySVCFengqBUji9VlzYOb6gf155GrPU/iX8FPzikD0ziVG9RYagmvtEyiegzCtMQRoomnm1QYz9JLjYjf6hxQZLnKEIpK+fC7n+Jxn7iEs7jyC/zf0uqQyirPfyTlNvcoY1z7pb0rfxVNT7oCL8FhVCFFCBtFpphnK5dCv0J15cqr+NN7eo7OfHvDqVBKD4LEhS3hpQLP3meB/YCdqw6WEi6lrb6uUvyIftKe65Jmm/B5WqTI4dJUhFCtyIXqpyYRWdXRubb0QEXIPvQk2sxHBlaYTyacdJD5B5+uaAt083eqwNBuJhtkpLTAHPgwz2ThwixGSl1i+pJuLEhSK3vcZXJvC8TgU6UfEI3wDejkTtCDtRMj9HIjulLjBBJ+/+O0ms8+TpkGX0lUvIoE31jdBN/Otg3GAn+WGtsAY61Fcz1cwGx6o/MAL99FBXXljYkXyKYZ82IHBJn3mbf4NRYM90R0MoTFLUnB0EN0a+m8= root@server01

# nn2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCYNzyBRDNXlthOa+GX37jUk/OCAKex520ckfxohYKNqGo0tP0vb2eTXKNXpECdp7wxI89/YUuPdcnyUF4Lu7kjuQ5MvSwg2hLaLe8gNiaU50YpnePHL4zkHAJ7DdWmKNqYmWpXJ8cRSpKp4vYhi9L9MZ7FPYYtvAYm8Lr56+dT2ea73Z/mJ5LnZRYdZRTtR9DN6/OQEQU0WQQvV1C3Nrs8O2MwSIbfrVyrYQ6gDt0DTzusp8d92vFiHsbhstsFnv4yWQbS4oL+KXUUKkGsZnFrS7ChuF0fSsSuxQc3ycg2Q5h/xzmyp22EVSeJRNGrQvmGNIjP278SuDfPhTm7t0VXT0bhNlo9K8ih27Kj66SseHp4ept0QrnxDSZyec1pE5kkHnOVm9kCCZrNklUUQ5JOmXDGb2bxBgoZurefYikztUzyVCv6rYG5K6D5DxC0ukAg9cOAPBl5MBqKkW5mxeEaNKAXbLFO34FDGwPqNs4eW5IhxCGND2AJo/teBO7gnG0= root@server02

# dn1
ssh-rsa~~
# dn2
ssh-rsa~~~
# dn3
ssh-rsa~~~
&quot;&quot;&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;nn2 컨테이너도 같은 상황으로 만들어준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;vi ~/.ssh/authorized_keys
&quot;&quot;&quot;
# nn1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGFz2na47vkmzxeqISPycd0HzySVCFengqBUji9VlzYOb6gf155GrPU/iX8FPzikD0ziVG9RYagmvtEyiegzCtMQRoomnm1QYz9JLjYjf6hxQZLnKEIpK+fC7n+Jxn7iEs7jyC/zf0uqQyirPfyTlNvcoY1z7pb0rfxVNT7oCL8FhVCFFCBtFpphnK5dCv0J15cqr+NN7eo7OfHvDqVBKD4LEhS3hpQLP3meB/YCdqw6WEi6lrb6uUvyIftKe65Jmm/B5WqTI4dJUhFCtyIXqpyYRWdXRubb0QEXIPvQk2sxHBlaYTyacdJD5B5+uaAt083eqwNBuJhtkpLTAHPgwz2ThwixGSl1i+pJuLEhSK3vcZXJvC8TgU6UfEI3wDejkTtCDtRMj9HIjulLjBBJ+/+O0ms8+TpkGX0lUvIoE31jdBN/Otg3GAn+WGtsAY61Fcz1cwGx6o/MAL99FBXXljYkXyKYZ82IHBJn3mbf4NRYM90R0MoTFLUnB0EN0a+m8= root@server01

# nn2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCYNzyBRDNXlthOa+GX37jUk/OCAKex520ckfxohYKNqGo0tP0vb2eTXKNXpECdp7wxI89/YUuPdcnyUF4Lu7kjuQ5MvSwg2hLaLe8gNiaU50YpnePHL4zkHAJ7DdWmKNqYmWpXJ8cRSpKp4vYhi9L9MZ7FPYYtvAYm8Lr56+dT2ea73Z/mJ5LnZRYdZRTtR9DN6/OQEQU0WQQvV1C3Nrs8O2MwSIbfrVyrYQ6gDt0DTzusp8d92vFiHsbhstsFnv4yWQbS4oL+KXUUKkGsZnFrS7ChuF0fSsSuxQc3ycg2Q5h/xzmyp22EVSeJRNGrQvmGNIjP278SuDfPhTm7t0VXT0bhNlo9K8ih27Kj66SseHp4ept0QrnxDSZyec1pE5kkHnOVm9kCCZrNklUUQ5JOmXDGb2bxBgoZurefYikztUzyVCv6rYG5K6D5DxC0ukAg9cOAPBl5MBqKkW5mxeEaNKAXbLFO34FDGwPqNs4eW5IhxCGND2AJo/teBO7gnG0= root@server02

# dn1
ssh-rsa~~
# dn2
ssh-rsa~~~
# dn3
ssh-rsa~~~
&quot;&quot;&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH 서비스 활성화(모든 컨테이너에서 실행)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;service ssh start # 이미 실행 되어 있다면 restart
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통신 테스트&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;# server01 에서
$ ssh nn2

# server02 에서
$ ssh nn1
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH 디렉토리 권한 설정(모든 컨테이너에서 실행)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub  
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH 서비스 자동 실행 등록(모든 컨테이너에서 실행)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;vim ~/.bashrc

# 아래 내용을 파일 맨 하단에 기입하고 저장
service ssh start&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;#환경변수 활성화
source ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Hosts 및 Hostname 설정 ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;nn1 서버 hosts 파일 편집&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1 서버로 접속해서 hosts 파일에 각 서버의 Private IP와 hostname을 등록한다.&lt;/p&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;# 로컬에서 nn1 서버 접속
ssh nn1
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;accesslog&quot;&gt;&lt;code&gt;# hosts 파일 편집
vim /etc/hosts

# 아래 내용으로 추가 후 저장
172.19.0.11 nn1
172.19.0.12 nn2
172.19.0.13 dn1
172.19.0.14 dn2
172.19.0.15 dn3
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 인스턴스에 Hosts 파일 복제&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1 에서만 진행한다. (수동으로 내용 복붙가능)&lt;/p&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;# 복제
cat /etc/hosts | ssh nn2 &quot;sh -c 'cat &amp;gt;/etc/hosts'&quot;
cat /etc/hosts | ssh dn1 &quot;sh -c 'cat &amp;gt;/etc/hosts'&quot;
cat /etc/hosts | ssh dn2 &quot;sh -c 'cat &amp;gt;/etc/hosts'&quot;
cat /etc/hosts | ssh dn3 &quot;sh -c 'cat &amp;gt;/etc/hosts'&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;hdfs-site.xml 파일 복제&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: nn1 에서만 진행한다. (수동으로 내용 복붙가능)&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;# 복제
cat $HADOOP_HOME/etc/hadoop/hdfs-site.xml | ssh nn2 &quot;sh -c 'cat &amp;gt;$HADOOP_HOME/etc/hadoop/hdfs-site.xml'&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상 5개의 컨테이너를 복제하 SSH 통신, Hosts 설정 까지 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>빅데이터 분석 환경 구축(Docker 활용)</category>
      <category>hosts</category>
      <category>ssh</category>
      <category>컨테이너</category>
      <author>쵸비</author>
      <guid isPermaLink="true">https://youngcher1.tistory.com/46</guid>
      <comments>https://youngcher1.tistory.com/46#entry46comment</comments>
      <pubDate>Mon, 3 Jul 2023 17:41:14 +0900</pubDate>
    </item>
    <item>
      <title>#4 SSH Key 생성</title>
      <link>https://youngcher1.tistory.com/45</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 컨테이너들과의 통신을 해줄 SSH Key를 생성해보자&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;020&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/020.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/020.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;[SSH Key 설정을 위한 설치]&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ubuntu apt-get 업데이트 및 라이브러리 설치 (#1에서 이미 했다면 Pass)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;apt-get update
apt-get upgrade -y
apt-get install -y curl
apt-get install -y openssh-server openssh-client
apt-get install -y rsync wget vim iputils-ping htop

# 6. Asia
# 69. Seoul&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ SSH 설정 ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ssh key 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# ssh key 생성
ssh-keygen -t rsa&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh키가 정상적으로 동작되면 아래와 같이 이상하게 생긴 key가 보인다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;191&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTT0O0/btsmIgm7bpu/weq5qBGyADlOPdLOZy5dr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTT0O0/btsmIgm7bpu/weq5qBGyADlOPdLOZy5dr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTT0O0/btsmIgm7bpu/weq5qBGyADlOPdLOZy5dr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTT0O0%2FbtsmIgm7bpu%2Fweq5qBGyADlOPdLOZy5dr1%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;191&quot; height=&quot;214&quot; data-origin-width=&quot;191&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1688702158622&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# authorized_keys 생성
cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;lt; ~/.ssh/id_rsa.pub

# localhost 접속 테스트
ssh localhost
#yes를 입력해도 아직 컨테이너 이름과 localhost가 다름으로 Erorr 발생&lt;/code&gt;&lt;/pre&gt;</description>
      <category>빅데이터 분석 환경 구축(Docker 활용)</category>
      <category>ssh</category>
      <author>쵸비</author>
      <guid isPermaLink="true">https://youngcher1.tistory.com/45</guid>
      <comments>https://youngcher1.tistory.com/45#entry45comment</comments>
      <pubDate>Mon, 3 Jul 2023 16:30:12 +0900</pubDate>
    </item>
    <item>
      <title>#3 Spark &amp;amp; Python &amp;amp; Zookeeper 설치</title>
      <link>https://youngcher1.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스파크 클러스터를 사용하기 위해서는 spark-env.sh, spark-defaults.conf, workers 를 편집하면 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Spark 설치 ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Apache Spark 3.2.1 설치 및 압축 해제&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;# 설치 관리용 디렉토리 이동
cd /download

# Spark 3.2.1 설치 [Not Found 뜰 경우 &amp;lt;https://dlcdn.apache.org/spark/&amp;gt; 접속하여 맞는 버전 탐색]
wget &amp;lt;https://dlcdn.apache.org/spark/spark-3.2.4/spark-3.2.4-bin-hadoop3.2.tgz&amp;gt;

# Spark 3.2.1 압축 해제
tar -xzvf spark-3.2.4-bin-hadoop3.2.tgz -C /usr/local

# Spark 디렉토리 이름 변경
mv /usr/local/spark-3.2.4-bin-hadoop3.2 /usr/local/spark
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Python &amp;amp; PySpark 설치 ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python3 설치 및 파이썬 라이브러리 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;vala&quot;&gt;&lt;code&gt;# Python 설치
apt-get install -y python3-pip

# Python 버전 확인
python3 -V

# PySpark 설치
pip3 install pyspark findspark
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Spark 환경설정 ]&lt;/h2&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;# Hadoop 시스템 환경변수 설정
vim /etc/environment

# 아래 내용 추가 후 저장
PATH 뒤에 &quot;:/usr/local/spark/bin&quot; 추가
PATH 뒤에 &quot;:/usr/local/spark/sbin&quot; 추가
PATH 밑에 SPARK_HOME=&quot;/usr/local/spark&quot;

# 시스템 환경변수 활성화
source /etc/environment

#  Spark 사용자 환경변수 설정
echo 'export SPARK_HOME=/usr/local/spark' &amp;gt;&amp;gt; ~/.bashrc

# 사용자 환경변수 활성화
source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spark-env.sh파일 편집&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# spark-env.sh 파일 카피
cd $SPARK_HOME/conf
cp spark-env.sh.template spark-env.sh

# spark-env.sh 파일 편집
vim spark-env.sh

# 아래 내용 수정 후 저장
export SPARK_HOME=/usr/local/spark
export SPARK_CONF_DIR=/usr/local/spark/conf
export JAVA_HOME=/usr/lib/jvm/java
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_MASTER_WEBUI_PORT=18080
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spark-defaults.conf 파일 편집&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;# Spark spark-defaults.conf.template 파일 복사
cp /usr/local/spark/conf/spark-defaults.conf.template /usr/local/spark/conf/spark-defaults.conf

# Spark spark-defaults.conf 파일 설정
vim /usr/local/spark/conf/spark-defaults.conf

# 아래 설정 후 저장 
# 클러스터 매니저 정보
spark.master              yarn

# 스파크 이벤트 로그 수행 유무
# true시 spark.eventLog.dir에 로깅 경로 지정해야합니다 - 스파크 UI에서 확인 가능합니다.
spark.eventLog.enabled    true

# 스파크 이벤트 로그 저장 경로
spark.eventLog.dir        /usr/local/spark/logs
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Spark logs 디렉토리 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;mkdir -p /usr/local/spark/logs &amp;amp;&amp;amp; chown -R $USER:$USER /usr/local/spark/
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;workers 파일 편집&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: HDFS의 workers 를 설정 하였던 것과 같이, Spark 의 workers도 설정한다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;# Spark workers 파일 생성
cp /usr/local/spark/conf/workers.template /usr/local/spark/conf/workers

# Spark workers 파일 설정
vim /usr/local/spark/conf/workers

# 아래 설정 후 저장(localhost는 주석처리)
dn1
dn2
dn3
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Python 환경설정 ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python 환경 변수 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;# 시스템 환경변수 편집
vim /etc/environment

# 아래 내용 추가 후 저장
PATH 뒤에 &quot;:/usr/bin/python3&quot; 추가

# 시스템 환경변수 활성화
source /etc/environment

#  Python &amp;amp; PySpark 사용자 환경변수 설정
echo 'export PYTHONPATH=/usr/bin/python3' &amp;gt;&amp;gt; ~/.bashrc
echo 'export PYSPARK_PYTHON=/usr/bin/python3' &amp;gt;&amp;gt; ~/.bashrc

# 사용자 환경변수 활성화
source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Apache Zookeeper 3.8.0를 설치하고 환경설정을 진행&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주키퍼 클러스터를 사용하기 위해서는 zoo.cfg, myid를 편집&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Zookeeper 설치 ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Apache Zookeeper 3.8.0 설치 및 압축 해제&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# 설치 관리용 디렉토리 이동
cd /download
# Zookeeper 3.8.0 설치
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
# Zookeeper 3.8.0 압축 해제
tar -xzvf apache-zookeeper-3.8.0-bin.tar.gz -C /usr/local
# Zookeeper 디렉토리 이름 변경
mv /usr/local/apache-zookeeper-3.8.0-bin /usr/local/zookeeper&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ Zookeeper 환경설정 ]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zookeeper 환경 변수 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;# Hadoop 시스템 환경변수 설정
vim /etc/environment

# 아래 내용 추가 후 저장
ZOOKEEPER_HOME=&quot;/usr/local/zookeeper&quot;

# 시스템 환경변수 활성화
source /etc/environment

#  Spark 사용자 환경변수 설정
echo 'export ZOOKEEPER_HOME=/usr/local/zookeeper' &amp;gt;&amp;gt; ~/.bashrc

# 사용자 환경변수 활성화
source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;zoo.cfg 파일 편집&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# Zookeeper 설정 경로 이동
cd /usr/local/zookeeper

# Zookeeper 설정 파일 복사
cp ./conf/zoo_sample.cfg ./conf/zoo.cfg 

# zoo.cfg 편집
vim ./conf/zoo.cfg

# 아래 내용 수정 후 저장
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
clientPort=2181
maxClientCnxns=0
maxSessionTimeout=180000
server.1=nn1:2888:3888
server.2=nn2:2888:3888
server.3=dn1:2888:3888
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;myid 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;perl&quot;&gt;&lt;code&gt;# Zookeeper 데이터 디렉토리 생성
mkdir -p /usr/local/zookeeper/data
mkdir -p /usr/local/zookeeper/logs

# Zookeeper 디렉토리 사용자 그룹 변경
chown -R $USER:$USER /usr/local/zookeeper

# myid 파일 편집
vim /usr/local/zookeeper/data/myid

# 아래 내용 수정 후 저장
1
&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;</description>
      <category>빅데이터 분석 환경 구축(Docker 활용)</category>
      <category>Python</category>
      <category>spark</category>
      <category>zookeeper</category>
      <author>쵸비</author>
      <guid isPermaLink="true">https://youngcher1.tistory.com/44</guid>
      <comments>https://youngcher1.tistory.com/44#entry44comment</comments>
      <pubDate>Mon, 3 Jul 2023 10:43:01 +0900</pubDate>
    </item>
  </channel>
</rss>