<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>심루트의 연구노트</title>
    <link>https://simroot.tistory.com/</link>
    <description>Happy</description>
    <language>ko</language>
    <pubDate>Thu, 6 Aug 2026 00:18:12 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>심루트</managingEditor>
    <image>
      <title>심루트의 연구노트</title>
      <url>https://tistory1.daumcdn.net/tistory/4641783/attach/702e66112cf74bf6b89887df7f526b2a</url>
      <link>https://simroot.tistory.com</link>
    </image>
    <item>
      <title>[PKOS] 쿠버네티스 스터디 1주차 - AWS kOps 설치 및 기본사용, Helm</title>
      <link>https://simroot.tistory.com/30</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;안녕하세요. Solutions Architect(AWS) 제니입니다 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오랜만에 글을 적어봅니다. 글 제목 분류인 [PKOS]는 Production Kubernetes Online Study의 약어입니다. 우연한 기회로 외부 스터디를 알게 되어서 앞으로 약 7주간 매주 일요일 저녁 8~10시에 쿠버네티스 스터디를 하고 학습 과제까지 완료한 뒤 내용 정리를 포스팅해볼 예정입니다. 매주 실습 결과를 제출해야 하고 과제도 있는데, 1주 차라도 과제를 완료하지 못하면 자동 탈락처리 된다고 하여.. 정말 빡세게 해 볼 계획입니다. 취업 후 바빠서 업로드하지 못했던 블로그도 다시 살릴 겸, 새해 버프를 받아서 달려봐요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;004&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/004.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/004.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1주차 : AWS kOps 설치 및 기본 사용&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;기초 지식 : AWS 기초(VPC, ELB, EBS/EFS/S3, IAM)&lt;/li&gt;
&lt;li&gt;옵션/심화 : 컨테이너 격리 &amp;amp; 도커 네트워크, 쿠버네티스 특징 &amp;amp; 기초&lt;/li&gt;
&lt;li&gt;스터디 교재 : 24단계 실습으로 정복하는 쿠버네티스&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;1주 차부터 많은 내용을 진행했는데, 스터디 모임장인 가시다님이 준비해주신 핸즈온을 통해 놓친 부분들을 쉽게 따라갈 수 있었습니다.&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;size18&quot;&gt;&lt;b&gt;[쿠버네티스 기초]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 제일 중요하게 느껴졌던 포인트는 &lt;b&gt;'멱등성(Reconciler)'&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 번 실행하더라도 같은 결과가 나오는 것을 멱등성이라고 합니다. 많은 내용이 담겨있는 스크립트 파일이 중간에 멈췄다가 다시 재실행된다면? 이미 실행된 부분에 대해서 또다시 시작하게 되고 소스가 꼬일 수 있습니다. 이런 부분을 방지해줄 수 있는 특징을 멱등성이라고 할 수 있습니다. 오늘 실습할 내용인 AWS kOps 배포를 하며 확인해보도록 하겠습니다.&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;size18&quot;&gt;&lt;b&gt;[kOps 소개]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kOps 공식 홈페이지에 가서 보면 kOps를 다음과 같이 소개하고 있습니다.&lt;/p&gt;
&lt;blockquote id=&quot;kops-kubernetes-operations&quot; data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;kOps - Kubernetes Operations&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;The easiest way to get a production grade Kubernetes cluster up and running.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Kubernetes 클러스터를 시작하고 실행하는 가장 쉬운 방법.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;한마디로 쿠버네티스 생성 및 관리를 쉽게 하도록 도와주는 오픈소스 툴이라고 합니다. 저도 이번에 공부하면서 처음 알게 되었는데요. 처음에 [케이 옵스]로 읽었다가 [콥스] 라고 하셔서 발음하는 방법도 새롭게 알아갔습니다. 낯설지만 실습을 통해 어떤 개념인지 대략적으로 잡아갈 수 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;[아키텍처 및 kOps 배포]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;AWS, Azure, GCP 등을 지원하는데 실습에서 AWS 서비스를 다룹니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1031&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbHjQ0/btrVO1Q1O3y/cMmJVAS7kTNIAjeMq4HKsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbHjQ0/btrVO1Q1O3y/cMmJVAS7kTNIAjeMq4HKsk/img.png&quot; data-alt=&quot;AWS kOps Architecture&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbHjQ0/btrVO1Q1O3y/cMmJVAS7kTNIAjeMq4HKsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbHjQ0%2FbtrVO1Q1O3y%2FcMmJVAS7kTNIAjeMq4HKsk%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;1031&quot; height=&quot;618&quot; data-origin-width=&quot;1031&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AWS kOps Architecture&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;위 아키텍처를 배포하기 위해서 제 도메인인 jennysim.shop을 사용하고, AWS CloudFormation에 이미 작성되어 있는 yaml파일을 이용해서 기본 인프라 환경을 배포하였습니다. 이후 자동으로 kOps 클러스터 인프라를 배포하여 쉽게 설치환경을 구성하였습니다. 실습 중 중간에 배포내용을 삭제하지 않고 CloudFormation delete를 했다가 인스턴스가 종료되지 않는 상황이 있었는데요. EC2 Auto Scaling 그룹을 삭제함으로써 해결하였습니다. 처음에는 인스턴스 내부에 replica구성을 제거해야 하는 건가 싶어서 새로 생성된 인스턴스로 접근은 안되고 혼자서 삽질을 조금 했는데, EC2에 Auto Scaling구성으로 구현이 된다는 것을 알게 되었습니다.&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;&lt;b&gt;설치 중간에 실패 시 삭제 방법&lt;/b&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 Auto Scaling 그룹 : 3개 삭제&lt;/li&gt;
&lt;li&gt;EC2 시작 템플릿 : 3개 삭제&lt;/li&gt;
&lt;li&gt;S3 버킷 비우기&lt;/li&gt;
&lt;li&gt;Route53에 추가된 A 레코드 3개 삭제&lt;/li&gt;
&lt;li&gt;CloudFormation 삭제&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 kops-ec2 인스턴스 서버에 ssh 접속해서 테스트를 진행하였습니다. 사용 중인 노트북이 Windows라서 MobaXterm을 사용했는데, 까만 배경에 하얀 글자가 눈에 띄지 않아서 나중에 하이라이트 기능을 추가해야겠네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kOps 구성이 완료되어 현재 접속한 서버에서 클러스터와 인스턴스의 현재 정보를 다음과 같이 확인할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 스터디의 과제 1번!&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;486&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BFBDm/btrVQPCtrSh/M9sGGtddd8d7ahpqX9Kzw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BFBDm/btrVQPCtrSh/M9sGGtddd8d7ahpqX9Kzw1/img.png&quot; data-alt=&quot;# kops get cluster&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BFBDm/btrVQPCtrSh/M9sGGtddd8d7ahpqX9Kzw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBFBDm%2FbtrVQPCtrSh%2FM9sGGtddd8d7ahpqX9Kzw1%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;486&quot; height=&quot;53&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;53&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;# kops get cluster&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;99&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ztkqr/btrVTVvprkN/6cfyXAvnYrrGSTjS3Lk5W0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ztkqr/btrVTVvprkN/6cfyXAvnYrrGSTjS3Lk5W0/img.png&quot; data-alt=&quot;# kops get instances&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ztkqr/btrVTVvprkN/6cfyXAvnYrrGSTjS3Lk5W0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZtkqr%2FbtrVTVvprkN%2F6cfyXAvnYrrGSTjS3Lk5W0%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;1269&quot; height=&quot;99&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;99&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;# kops get instances&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;Control plane과 node에도 각각 SSH로 접속해서 메타데이터들을 확인할 수 있습니다. 그리고 AWS Route53 도메인 정보도 간단하게 확인해 봤는데요. 저는 제 도메인인 jennysim.shop 도메인으로 테스트를 마쳤습니다.&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;size18&quot;&gt;&lt;b&gt;[기타 : 관리 편의성]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Alias&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업 중에 kubectl 명령어를 k 입력만으로 완성할 수 있도록 alias를 사용할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1673329018684&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 자동 완성 및 alias 축약 설정
source &amp;lt;(kubectl completion bash)
echo 'source &amp;lt;(kubectl completion bash)' &amp;gt;&amp;gt; ~/.bashrc
echo 'alias k=kubectl' &amp;gt;&amp;gt; ~/.bashrc
echo 'complete -F __start_kubectl k' &amp;gt;&amp;gt; ~/.bashrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;kubectl-플러그인-배포&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;kubectl 플러그인 : krew&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kubectl의 cli 플러그인 매니저인 쿠버네티스 크루(krew)를 통해 부가적인 기능들을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;kubectl 플러그인 배포&lt;/b&gt;&lt;br /&gt;다른 사람이 사용할 수 있는 플러그인을 개발한 경우, 이를 패키징하고, 배포하고 사용자에게 업데이트를 제공하는 방법을 고려해야 한다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Krew&lt;/b&gt;&lt;br /&gt;Krew는 플러그인을 패키징하고 배포하는 크로스-플랫폼 방식을 제공한다. 이렇게 하면, 모든 대상 플랫폼(리눅스, 윈도우, macOS 등)에 단일 패키징 형식을 사용하고 사용자에게 업데이트를 제공한다. Krew는 또한 다른 사람들이 여러분의 플러그인을 검색하고 설치할 수 있도록&amp;nbsp;플러그인 인덱스를 유지 관리한다.&lt;/blockquote&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;출처 :&amp;nbsp;&lt;a href=&quot;https://kubernetes.io/ko/docs/tasks/extend-kubectl/kubectl-plugins/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kubernetes.io/ko/docs/tasks/extend-kubectl/kubectl-plugins/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1673329434058&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;플러그인으로 kubectl 확장&quot; data-og-description=&quot;kubectl 플러그인을 작성하고 설치해서 kubectl을 확장한다.&quot; data-og-host=&quot;kubernetes.io&quot; data-og-source-url=&quot;https://kubernetes.io/ko/docs/tasks/extend-kubectl/kubectl-plugins/&quot; data-og-url=&quot;https://kubernetes.io/ko/docs/tasks/extend-kubectl/kubectl-plugins/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LZt9e/hyRdOH5tTC/E3Y47g1tTsAJ1pIzkmpMok/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/Bf4xn/hyRdG4l2TN/YjMk7alMK3jx8Akz62Nqp0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/tasks/extend-kubectl/kubectl-plugins/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kubernetes.io/ko/docs/tasks/extend-kubectl/kubectl-plugins/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LZt9e/hyRdOH5tTC/E3Y47g1tTsAJ1pIzkmpMok/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/Bf4xn/hyRdG4l2TN/YjMk7alMK3jx8Akz62Nqp0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&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;플러그인으로 kubectl 확장&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;kubectl 플러그인을 작성하고 설치해서 kubectl을 확장한다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kubernetes.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;What does Krew do?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Krew is a tool that makes it easy to use&amp;nbsp;kubectl plugins. Krew helps you discover plugins, install and manage them on your machine. It is similar to tools like apt, dnf or&amp;nbsp;brew. Today, over&amp;nbsp;200 kubectl plugins&amp;nbsp;are available on Krew.&lt;br /&gt;&lt;br /&gt;- For kubectl users: Krew helps you find, install and manage kubectl plugins in a consistent way.&lt;br /&gt;- For plugin developers: Krew helps you package and distribute your plugins on multiple platforms and makes them discoverable.&lt;/blockquote&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://github.com/kubernetes-sigs/krew/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/kubernetes-sigs/krew/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1673329779396&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - kubernetes-sigs/krew:   Find and install kubectl plugins&quot; data-og-description=&quot;  Find and install kubectl plugins. Contribute to kubernetes-sigs/krew development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/kubernetes-sigs/krew/&quot; data-og-url=&quot;https://github.com/kubernetes-sigs/krew&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://github.com/kubernetes-sigs/krew/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/kubernetes-sigs/krew/&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;GitHub - kubernetes-sigs/krew:   Find and install kubectl plugins&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  Find and install kubectl plugins. Contribute to kubernetes-sigs/krew development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면 &lt;b&gt;Krew는 kubectl 플러그인을 쉽게 사용할 수 있는 도구입니다.&lt;/b&gt; 설치해서 쓸 수 있으며 apt, dnf, brew와 같은 도구와 유사합니다.&amp;nbsp; 현재까지 Krew에서 200개 이상의 kubectl 플러그인을 사용할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1673329877394&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 설치
curl -fsSLO https://github.com/kubernetes-sigs/krew/releases/download/v0.4.3/krew-linux_amd64.tar.gz
tar zxvf krew-linux_amd64.tar.gz
./krew-linux_amd64 install krew
tree -L 3 /root/.krew/bin

# PATH 추가
export PATH=&quot;${PATH}:/root/.krew/bin&quot;
echo 'export PATH=&quot;${PATH}:/root/.krew/bin&quot;' &amp;gt;&amp;gt;~/.bashrc

# krew 확인
kubectl krew
kubectl krew update
kubectl krew search
kubectl krew list
kubectl krew&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;실습에서는 krew로 &lt;span data-token-index=&quot;0&quot; data-reactroot=&quot;&quot;&gt;df-pv, get-all, ktop, neat, oomd, view-secret을 사용해 봤습니다. krew 하나에도 정말 많은 플러그인이 있어서 나중에 잘 활용하면 편리할 것 같네요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[svc,pod 배포 테스트 - Mario 게임 with CLB]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가시다님의 슈퍼마리오 디플로이먼트 배포 yaml파일을 받아서 정말 쉽고 간단하게 svc, pod를 배포해볼 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1673330247248&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 수퍼마리오 디플로이먼트 배포
curl -O https://raw.githubusercontent.com/gasida/PKOS/main/1/mario.yaml
kubectl apply -f mario.yaml
cat mario.yaml | yh

# 배포 확인 : CLB 배포 확인 &amp;gt;&amp;gt; 5분 이상 소요
kubectl get deploy,svc,ep mario
watch kubectl get svc mario

# 마리오 게임 접속 : CLB 주소로 웹 접속
kubectl get svc mario -o jsonpath={.status.loadBalancer.ingress[0].hostname} | awk '{ print &quot;Maria URL = http://&quot;$1 }'

# 삭제
kubectl delete deploy,svc mario&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;다음 마리오 게임을 배포한 뒤 웹 주소로 접근하니 추억의 마리오 게임이 실행됩니다. 여기서는 AWS CLB를 사용합니다. 2022년 12월을 끝으로 AWS에서 CLB 서비스를 종료하려고 하기 때문에(아직 실행은 됩니다.) 실제 활용하는 곳에서는 NLB나 ALB를 사용하고 있다고 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z3j6A/btrVUrHrils/LyKshc40gH6x03sKsRKXrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z3j6A/btrVUrHrils/LyKshc40gH6x03sKsRKXrk/img.png&quot; data-alt=&quot;추억의 슈퍼마리오 게임 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z3j6A/btrVUrHrils/LyKshc40gH6x03sKsRKXrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz3j6A%2FbtrVUrHrils%2FLyKshc40gH6x03sKsRKXrk%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;657&quot; height=&quot;496&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;추억의 슈퍼마리오 게임 &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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[트러블 슈팅]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언제나 발생하는 에러 상황에 대처하는 기본 조치 프로세스입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;get 확인 &amp;rarr; describe 확인 &amp;rarr; 애플리케이션 로그(log) 확인 &amp;rarr; 클러스터 에러 이벤트(event) 확인&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 k8s 공부할 때 Vagrant를 활용해서 배포 테스트를 해봤는데요. 그때도 마찬가지로 이슈가 발생했고, describe로 히스토리를 확인해서 해결했던 경험이 있습니다. 이번 스터디를 통해 애플리케이션 로그 확인이나 클러스터 에러 이벤트 확인하는 것까지 더 자세하게 들여다볼 수 있었습니다.&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;여기서 잘못된 이미지 정보의 pod를 배포해서 디버깅해보는 테스트를 진행했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1673330815682&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 잘못된 이미지 정보의 파드 배포
kubectl apply -f https://raw.githubusercontent.com/junghoon2/kube-books/main/ch05/nginx-error-pod.yml&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;디버깅 프로세스 : Apply &amp;rarr; Get &amp;rarr; Describe &amp;rarr; Log &amp;rarr; Event&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;프로세스에 따라 확인해서 문제의 원인은 nginx-19 이미지가 업데이트되지 않았기 때문이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q. 여기서 patch와 update의 차이는 무엇? &lt;span style=&quot;background-color: #ffffff; color: #1d1c1d;&quot;&gt;patch: 일부, &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d;&quot;&gt;update: 전부&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1673330956740&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl patch pod nginx-19 --type='json' -p='[{&quot;op&quot;: &quot;replace&quot;, &quot;path&quot;: &quot;/spec/containers/0/image&quot;, &quot;value&quot;:&quot;nginx:1.19&quot;}]'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 해결할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[헬름(Helm)]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스를 하면서 정말 많이 들어본 헬름! 헬름이다 헬름차트다 많이 들어봤었는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헬름이 무엇인지, 왜 써야 하는지 등을 아래 유튜브 강의를 통해서 개념을 잡아갈 수 있었습니다.&lt;/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;532&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vE02N/btrVTl16K2w/IOkatAk6S6bevOvNuSkTK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vE02N/btrVTl16K2w/IOkatAk6S6bevOvNuSkTK0/img.png&quot; data-alt=&quot;출처 : https://helm.sh/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vE02N/btrVTl16K2w/IOkatAk6S6bevOvNuSkTK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvE02N%2FbtrVTl16K2w%2FIOkatAk6S6bevOvNuSkTK0%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;532&quot; height=&quot;168&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://helm.sh/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;What is Helm?&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Helm helps you manage Kubernetes applications &amp;mdash; Helm Charts help you define, install, and upgrade even the most complex Kubernetes application.&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;* 요약 : Helm은 k8s 애플리케이션을 관리하는데 도움이 됩니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;한 마디로 헬름은 쿠버네티스의 패키지 관리자입니다.&lt;/b&gt; 패키지를 차트(Chart)라고도 표현합니다. 그래서 헬름 차트라는 말을 많이 들어본 것 같네요. 오픈소스로 공개되어 있어서 public hub의 경우&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://artifacthub.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;ArtifactHUB 같은&lt;/span&gt;&lt;/a&gt; 곳에서 여러 헬름 저장소를 통합해서 검색해볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자세한 내용은 유튜브에!&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=m7iZtjeIHJw&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Cs2qH/hyRdDTWQrU/7v7FFGKiKWtMtccSeKh1U1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/m7iZtjeIHJw&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;YouTube : [인프런] 대세는 쿠버네티스 Helm편&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[Helm으로 워드프레스 배포]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 과제는 'Helm으로 워드프레스를 배포해서 글 남기기'입니다.&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;먼저 helm은 ArtifactHUB에서 GUI, CLI 모두 검색이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* CLI&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1673332206443&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 아티팩트 허브에서 검색
helm search hub wordpress&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* GUI&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1890&quot; data-origin-height=&quot;649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GoJg0/btrVUl1y35Q/WavFC40TyHXYT0TTmwUwSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GoJg0/btrVUl1y35Q/WavFC40TyHXYT0TTmwUwSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GoJg0/btrVUl1y35Q/WavFC40TyHXYT0TTmwUwSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGoJg0%2FbtrVUl1y35Q%2FWavFC40TyHXYT0TTmwUwSK%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;1890&quot; height=&quot;649&quot; data-origin-width=&quot;1890&quot; data-origin-height=&quot;649&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;오픈소스 소프트웨어들을 쉽게 설치할 수 있도록 도와주는 설치 패키지 &lt;/span&gt;인 bitnami를 추가해 주고, wordpress 네임스페이스를 따로 생성해준 뒤에 준비된 wordpress를 배포합니다. 미리 준비된 명령들을 활용해서 손쉽게 워드프레스를 배포했고, 접속 URL을 따라 다음과 같이 두 번째 과제를 완료했습니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eE9IqJ/btrVUxAITug/uaLPZAFfL87g3YMkSTshKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eE9IqJ/btrVUxAITug/uaLPZAFfL87g3YMkSTshKK/img.png&quot; data-alt=&quot;관리자 페이지 &amp;amp;gt; 새 글 작성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eE9IqJ/btrVUxAITug/uaLPZAFfL87g3YMkSTshKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeE9IqJ%2FbtrVUxAITug%2FuaLPZAFfL87g3YMkSTshKK%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;1280&quot; height=&quot;299&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;관리자 페이지 &amp;gt; 새 글 작성 완료&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nsh2c/btrVQPvUqrT/rkyWqRrfopP7Ai8z8I6xK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nsh2c/btrVQPvUqrT/rkyWqRrfopP7Ai8z8I6xK0/img.png&quot; data-alt=&quot;wordpress 메인 페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nsh2c/btrVQPvUqrT/rkyWqRrfopP7Ai8z8I6xK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnsh2c%2FbtrVQPvUqrT%2FrkyWqRrfopP7Ai8z8I6xK0%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;1280&quot; height=&quot;426&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;wordpress 메인 페이지&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnHhK1/btrVUy7tgJP/kgORGzMxNtErHI1kceBcC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnHhK1/btrVUy7tgJP/kgORGzMxNtErHI1kceBcC1/img.png&quot; data-alt=&quot;게시글 1개 포스팅 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnHhK1/btrVUy7tgJP/kgORGzMxNtErHI1kceBcC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnHhK1%2FbtrVUy7tgJP%2FkgORGzMxNtErHI1kceBcC1%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;1280&quot; height=&quot;618&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;게시글 1개 포스팅 완료&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[AWS kOps를 활용하여 워커 노드 증가(ASG = Auto Scaling Group 활용)]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째 과제로 기본 node 수를 증가시키는 작업을 진행했습니다. 인스턴스 그룹 정보에 보면 각각 MIN, MAX값이 1로 설정되어 있는데요. 이 부분을 편집해서 maxSize는 3으로, minSize는 2로 수정하였습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1673332722749&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 편집
kops edit ig nodes-ap-northeast-2a&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;이후 kops update를 완료해준 뒤 kubectl get node를 입력해주면 수분 이후에 node수가 증가한 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Updating kOps&lt;/b&gt;&lt;br /&gt;You may want to run below commands to include fixes/features after updating kOps&lt;/blockquote&gt;
&lt;pre id=&quot;code_1673333172053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kops update cluster $NAME --yes
kops rolling-update cluster $NAME --yes&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://kops.sigs.k8s.io/operations/updates_and_upgrades/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kops.sigs.k8s.io/operations/updates_and_upgrades/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1673333271480&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;Updates &amp;amp; Upgrades - kOps - Kubernetes Operations&quot; data-og-description=&quot;Updates and Upgrades Updating kOps MacOS From Homebrew: brew update &amp;amp;&amp;amp; brew upgrade kops From Github: sudo rm -rf /usr/local/bin/kops wget -O kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/r&quot; data-og-host=&quot;kops.sigs.k8s.io&quot; data-og-source-url=&quot;https://kops.sigs.k8s.io/operations/updates_and_upgrades/&quot; data-og-url=&quot;https://kops.sigs.k8s.io/operations/updates_and_upgrades/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://kops.sigs.k8s.io/operations/updates_and_upgrades/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kops.sigs.k8s.io/operations/updates_and_upgrades/&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;Updates &amp;amp; Upgrades - kOps - Kubernetes Operations&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Updates and Upgrades Updating kOps MacOS From Homebrew: brew update &amp;amp;&amp;amp; brew upgrade kops From Github: sudo rm -rf /usr/local/bin/kops wget -O kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/r&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kops.sigs.k8s.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 결과 화면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hmq9U/btrVT6jkpbk/9VNoI7yPkdXAYDgvj68whK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hmq9U/btrVT6jkpbk/9VNoI7yPkdXAYDgvj68whK/img.png&quot; data-alt=&quot;클러스터 업데이트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hmq9U/btrVT6jkpbk/9VNoI7yPkdXAYDgvj68whK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHmq9U%2FbtrVT6jkpbk%2F9VNoI7yPkdXAYDgvj68whK%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;1280&quot; height=&quot;266&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;클러스터 업데이트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxfxl9/btrVOTeHYdt/WeFk9zhlHC9fzn3lO6wvm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxfxl9/btrVOTeHYdt/WeFk9zhlHC9fzn3lO6wvm1/img.png&quot; data-alt=&quot;rolling-update&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxfxl9/btrVOTeHYdt/WeFk9zhlHC9fzn3lO6wvm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbxfxl9%2FbtrVOTeHYdt%2FWeFk9zhlHC9fzn3lO6wvm1%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;708&quot; height=&quot;117&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;rolling-update&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1673333296028&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 워커노드 증가 확인
kubectl get node&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;515&quot; data-origin-height=&quot;97&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4TSsb/btrVT82w5gj/fK0Pc8IoYjsb58yCRzH6mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4TSsb/btrVT82w5gj/fK0Pc8IoYjsb58yCRzH6mk/img.png&quot; data-alt=&quot;node 수 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4TSsb/btrVT82w5gj/fK0Pc8IoYjsb58yCRzH6mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4TSsb%2FbtrVT82w5gj%2FfK0Pc8IoYjsb58yCRzH6mk%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;515&quot; height=&quot;97&quot; data-origin-width=&quot;515&quot; data-origin-height=&quot;97&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;node 수 확인&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[실습 환경 삭제]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가 리소스 발생을 막기 위해서 실습 환경을 삭제합니다. 먼저 kOps 클러스터 삭제를 해야 오토스케일링 그룹이 제거가 되기 때문에 먼저 삭제 후, AWS CloudFormation 스택을 제거해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1673333496981&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# kOps 클러스터 삭제
kops delete cluster --yes

# 클러스터 삭제 완료 확인 후 AWS CloudFormation 스택 삭제
aws cloudformation delete-stack --stack-name mykops&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;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;글을 마치며&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 스터디를 입사한 지 얼마 안 되었을 때 했다면 AWS 기초 지식부터 이해해야 해서 많은 어려움이 있었을 것 같다는 생각을 해봤습니다.&amp;nbsp; 물론 이 스터디의 요건이 실무자를 위한 스터디지만, 현재 1년 차 SA로서 기초적인 AWS 서비스는 사용해봤기 때문에 따라갈 만했습니다. 물론 쿠버네티스는 별개라서 학습할 내용이 참 많지만요. 핸즈온이 잘 되어있어서 너무 좋았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 같은 경우 전부터 계속 관심이 있었지만 다른 프로젝트에 계속 조인되다 보니 프로젝트를 접할 기회가 없어서 우선순위에 많이 밀려 있었던 것 같아요. 만 1년을 다 채우고 난 뒤부터 Devops라는 직무가 매력적으로 다가왔습니다. 이번 기회에 스터디를 통해 쿠버네티스를 많이 접해놓으면 추후 관련된 일이 있을 때 큰 도움이 될 거라고 생각합니다.&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;1시간 동안 알차게 1주 차 내용을 차근차근 설명해주신 가시다님 강의와, 중간에는 스터디 교재 '24단계 실습으로 정복하는 쿠버네티스'의 저자 이정훈(Jerry)님의 책 후기, 경험담을 듣는 재미도 쏠쏠했습니다. 저도 언젠가는 이런 역할을 하는 시니어가 되고 싶습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;</description>
      <category>Kubernetes</category>
      <category>Helm</category>
      <category>kOps</category>
      <category>PKOS</category>
      <category>쿠버네티스 스터디</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/30</guid>
      <comments>https://simroot.tistory.com/30#entry30comment</comments>
      <pubDate>Tue, 10 Jan 2023 16:07:27 +0900</pubDate>
    </item>
    <item>
      <title>[CCCR 아카데미 회고] 7개월간의 클라우드 교육을 마치며 | 혁신성장 후기</title>
      <link>https://simroot.tistory.com/29</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드에 관심은 많은데 기초부터 끝까지 어떻게 방향을 잡아가야 할 지 정말 정보가 많이 부족했다. 특히 AWS같은 경우에는 혼자서 해보고싶어도 과금의 두려움이 막연히 있었는데, 과연 어디서부터 시작해야할지 1~2년 고민을 했었던 것 같다. 그렇게 고민하던 중 CCCR 아카데미를 만나게 되었다.&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;컴퓨터공학을 전공하고 IT업계에 계속 있었지만 20대 후반이고 그러다보니 직무를 바꾸는 데 신중했다. 회사를 한참 다니다가 반년이라는 시간을 학업에만 투자하기에는 큰 결정이 필요했다. 마침 교육 공지가 떴고 다니던 회사에서도 연말이 지나 프로젝트를 마무리짓고 다음년도 계획을 하는 단계였기에 본격적으로 다음년도 프로젝트가 시작되기 전에 과감하게 회사를 그만두고 클라우드 교육을 선택했다. 역시 모든건 타이밍이 중요하다는 것을 올 해 참 많이 느꼈던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;결론은 선택하기를 아주 잘했다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;약 7개월간의 교육을 진행하며 정말 많은 것들을 배웠다. 현재 원하던 곳에 취업해서 다니게 된 지도 1달이 조금 넘었다. 최종발표에서도 우리 팀이 1등을 해서 유종의 미를 거두었다. 인생에서 열심을 다했던 순간들 중 하나에 들었던 이 기간들을 돌아보며 기록으로 남겨본다 &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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp;2021년 혁신성장 청년인재 집중양성&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과학기술정통부에서 주관하는 혁신성장교육의 4기로 들어가게 되었는데 정식 과정명은 &quot;차세대 클라우드컴퓨팅 구축 및 오케스트레이션 개발 실무과정&quot;이다. 9시 반 ~ 18시 반까지 전일 과정으로 듣게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;2021.04.15~16 Orientation&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 이틀간의 OT가 기억에 남는다. 처음 코엑스에 들어갔을 때부터 설레는 그 느낌! 2일간의 OT를 통해서 교육 소개와 클라우드에 관련된 특강을 들었다.&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;1887&quot; data-origin-height=&quot;1275&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dabKSC/btrpjvoj7hC/FQVsREPbY0e4gqk5SdElLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dabKSC/btrpjvoj7hC/FQVsREPbY0e4gqk5SdElLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dabKSC/btrpjvoj7hC/FQVsREPbY0e4gqk5SdElLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdabKSC%2Fbtrpjvoj7hC%2FFQVsREPbY0e4gqk5SdElLk%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;1887&quot; height=&quot;1275&quot; data-origin-width=&quot;1887&quot; data-origin-height=&quot;1275&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;1887&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfQL1u/btrpaIpbfFY/qKsVrRo4AlijSP4FhHprUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfQL1u/btrpaIpbfFY/qKsVrRo4AlijSP4FhHprUk/img.png&quot; data-alt=&quot;클라우드 아카데미 4기 오리엔테이션&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfQL1u/btrpaIpbfFY/qKsVrRo4AlijSP4FhHprUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfQL1u%2FbtrpaIpbfFY%2FqKsVrRo4AlijSP4FhHprUk%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;1887&quot; height=&quot;1280&quot; data-origin-width=&quot;1887&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;클라우드 아카데미 4기 오리엔테이션&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;2021.04.19~07.16 정규 수업&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 정규 수업을 구로 교육장에서 시작했다. 네트워크 수업부터 시작해서 리눅스, 도커, 쿠버네티스, IaC, 개발까지 클라우드 엔지니어가 되기 위한 기본적인 이론 과정들을 거쳤다.&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;1887&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bunio2/btrpoxFD91y/agCc0NkOWquaxB08CKOOdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bunio2/btrpoxFD91y/agCc0NkOWquaxB08CKOOdk/img.png&quot; data-alt=&quot;첫 수업 &amp;amp;amp;amp; 내가 만든 랜선&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bunio2/btrpoxFD91y/agCc0NkOWquaxB08CKOOdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbunio2%2FbtrpoxFD91y%2FagCc0NkOWquaxB08CKOOdk%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;1887&quot; height=&quot;1280&quot; data-origin-width=&quot;1887&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;첫 수업 &amp;amp;amp; 내가 만든 랜선&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;USB로 베어메탈 환경에서 OS 설치하는 것 부터 기본적인 네트워크 개념과 패킷 트레이서 프로그램을 통해 어떻게 패킷이 흘러가는지, 그리고 랜선만들기도 해보며 알차게 시간을 보냈다. 하루에 풀데이로 전념하다보니 정말 많은 지식들이 쌓였다.&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;코로나 때문에 대면수업을 하다가 온라인으로 전환된 부분이 있었지만 그래도 초반에는 나와서 들을 수 있어서 대면/비대면 수업의 장단점이 있어 좋았다. 아무래도 면접기간에는 비대면 수업이 시간적인 활용이 더 좋았던 것 같다. 이론수업 때 비대면이면 질문하기가 많이 불편했을 텐데 그런 기간이 적어서 괜찮았다. 그리고 구로 교육장은 생긴지 얼마 안 돼서 쾌적했는데, 2인 좌석에 한명씩 앉아서 수업을 들었기 때문에 넓게 쓸 수 있었던 점도 좋았다. 나는 거의 맨 앞자리에서 엄청 집중하며 들었다.&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;1887&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRjEiV/btrpgyZ7Dwl/oAITdIbBWKHiaOIX9js3B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRjEiV/btrpgyZ7Dwl/oAITdIbBWKHiaOIX9js3B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRjEiV/btrpgyZ7Dwl/oAITdIbBWKHiaOIX9js3B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRjEiV%2FbtrpgyZ7Dwl%2FoAITdIbBWKHiaOIX9js3B0%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;1887&quot; height=&quot;1280&quot; data-origin-width=&quot;1887&quot; data-origin-height=&quot;1280&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;돌아보면서 정리 해보니 그동안 받은 책만 해도 약 15권 이상은 되는 것 같다. 이전에 전공수업때 보던 컴퓨터 네트워킹도 이번에 다시 꺼내보게 되었고, 지원해준 책과 강의가 참 알차고 의미있는 시간들이었다. 사실 이론수업 들으면서 복습하고 실습해보고 자기가 얼마나 남아서 하냐가 정말 중요했는데, 그 날 배운부분들은 꼭 그날 이해하고 정리하고 들어가려고 했었기 때문에 끝까지 이 열정을 유지하는 것이 아무래도 많이 힘들었다. 이 교육을 시작하기 전부터 절대 지각, 결석하지 말아야지 하고 다짐했어서 나와의 약속도 지키고, 또 수업때도 흐름을 놓치지 않으려고 꾸준히 노력하는 그 포인트가 당시에는 빠듯했더라도 지금 돌아보니 정말 뿌듯한 경험으로 남아있다.&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;1280&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sSPSq/btrpcQAwit2/MnXciKWfvKKfXi3K7dBkWk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sSPSq/btrpcQAwit2/MnXciKWfvKKfXi3K7dBkWk/img.jpg&quot; data-alt=&quot;힐링&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sSPSq/btrpcQAwit2/MnXciKWfvKKfXi3K7dBkWk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsSPSq%2FbtrpcQAwit2%2FMnXciKWfvKKfXi3K7dBkWk%2Fimg.jpg&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;400&quot; height=&quot;400&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;힐링&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;공부만 하다보니 열도 식힐 겸 수업 때 알게 된 친구와 노들섬에서 야경도 보고 힐링타임도 가졌다.&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;그리고 수업을 들으면서 CCCR측에서 여러모로 학습할 수 있을 환경을 만들어주려고 노력해주신 점이 정말 이 교육을 잘 선택했다는 마음이 들게했다. 중간중간 음료수도 챙겨주시고 굿즈나 책들도 잘 챙겨주시고, 나는 크게 상담을 받진 않았지만 진로문제로 고민하고 있는 분들도 따로 챙겨주시는 것 같았다. 수강생도 물론 열정이 있어야겠지만 서포트 해주는 운영진들도 끝까지 관심을 가지고 참여할 수 있다는게 참 쉽지 않았을텐데 정말 감사했다. 취업 시즌에는 면접준비에도 많은 도움을 받았다.&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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;2021.07.29~ 멘토링 프로젝트 시작&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 교육을 선택하게 된 큰 이유중 하나도 현업에 계신 실무진들과 함께 그룹으로 프로젝트를 진행할 수 있다는 점에 끌렸다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1280&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xxpzG/btrpcOhRsMM/NTZkWH66aMDKhG2loY7qp0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xxpzG/btrpcOhRsMM/NTZkWH66aMDKhG2loY7qp0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xxpzG/btrpcOhRsMM/NTZkWH66aMDKhG2loY7qp0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxxpzG%2FbtrpcOhRsMM%2FNTZkWH66aMDKhG2loY7qp0%2Fimg.jpg&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;400&quot; height=&quot;300&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&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;이론수업이 끝나갈 때쯤 멘토링 첫 kick off 이후 프로젝트 준비도 함께 병행했고, 이론수업이 끝난 뒤에는 멘토링 프로젝트에 전일적으로 집중해서 진행했다. 이번 교육에서 참 운이 좋다고 느꼈던 점은, 원래 프로젝트 집중 기간에는 오후부터 저녁 일정이었지만 비대면으로 전환된 후로 기존대로 9~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;팀을 구성하는것도 블라인드로 진행이 되었는데, 팀을 정말 잘 만난 것도 좋았다. 현업에 계신 실무자 멘토님이 정말 많은 것들을 챙겨주셨고, 퍼블릭 클라우드 수업같은 경우 1주일정도만 진행해서 많이 아쉬웠는데 프로젝트를 하면서 AWS를 다루고 깊이있게 학습할 수 있어서 좋았고 진행했던 주제가 정말 좋았다.&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;2021.11.05 프로젝트 발표회, 수료식&lt;br /&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대망의 프로젝트 발표회 &amp;amp; 수료식도 처음과 같이 코엑스에서 진행했다. 코로나 바이러스가 한참일 때라 반별로 진행해서 다른 반 분들의 내용을 듣지 못했던 것은 아쉬웠지만, 괜찮았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;1887&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clbwjZ/btrpkv9sgcT/R7JlSfHyQKKwoOtUkD9KMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clbwjZ/btrpkv9sgcT/R7JlSfHyQKKwoOtUkD9KMk/img.png&quot; data-alt=&quot;별마당 도서관 그리고 프로젝트 발표회!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clbwjZ/btrpkv9sgcT/R7JlSfHyQKKwoOtUkD9KMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclbwjZ%2Fbtrpkv9sgcT%2FR7JlSfHyQKKwoOtUkD9KMk%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;1887&quot; height=&quot;1280&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;1887&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;별마당 도서관 그리고 프로젝트 발표회!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(계속 생각이 든건데 CCCR은 굿즈 맛집이다)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;955&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctuPGP/btro6JBFuE2/9KRk1Hi9VIjkKK5FfBHtm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctuPGP/btro6JBFuE2/9KRk1Hi9VIjkKK5FfBHtm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctuPGP/btro6JBFuE2/9KRk1Hi9VIjkKK5FfBHtm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctuPGP%2Fbtro6JBFuE2%2F9KRk1Hi9VIjkKK5FfBHtm0%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;1273&quot; height=&quot;955&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;955&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리 팀은 &lt;span style=&quot;color: #1c1c1c;&quot;&gt;'Cloud Native 데이터 분석 및 플랫폼 구축'이라는 주제로 발표를 했었는데 최우수상을 받게 되었다. 기사에서도 우리 프로젝트 주제가 뜨니까 너무 신기하기도 하고.. 그동안 정말 열심히 했구나 하면서 뿌듯했던 하루였다. 유종의 미를 거두어서 너무 기쁘고 프로젝트 발표회 전에 취업 결과가 있어서 목표했던 바를 이루는 한 해가 되어 정말 뿌듯했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;785&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckot6G/btro7Dacqj0/fa0LbAtqYkyE3XW2smKVW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckot6G/btro7Dacqj0/fa0LbAtqYkyE3XW2smKVW1/img.png&quot; data-alt=&quot;유종의 미(뿌듯)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckot6G/btro7Dacqj0/fa0LbAtqYkyE3XW2smKVW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fckot6G%2Fbtro7Dacqj0%2Ffa0LbAtqYkyE3XW2smKVW1%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;500&quot; height=&quot;410&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;785&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;유종의 미(뿌듯)&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;글을 마치며&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;정말 고민도 걱정도 많았던 한 해였고, 많은 걸 배웠다. 뜻깊은 성과를 이루었다. 클라우드 엔지니어가 되고 싶어 시작했던 이 교육을 통해 AWS Solutions Architect라는 직무로 커리어를 다시 시작하게 되었다. 그동안 Slaes, Marketing 업무와 개발쪽에 일을 하다가 클라우드로 전향을 하게 되었는데 살면서 그동안 동종업계에서 일을 하며 굴렀던 것들이 이번 직무에서 조금이나마 도움이 되기도 하다는 생각이 든다. 무엇이든 경험해놓으면 나중에 쓸데가 있다라는 것을 느끼고 있는 중이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;20대 후반인데 직무를 바꾸는 것이 정말 늦지 않았을까? 하는 생각들로 고민했던 1년이라는 시간이 아까울 정도로 너무 만족하며 이 일을 하고있다. 그래서 아직 20대인데 하고싶은 일을 고민하고 있는 사람들이 있다면 나는 무조건 적극적으로 내가 하고싶은걸 찾으라고 말하고싶다.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;앞으로 주니어로 성장하고 그 안에서도 더 다양한 진로가 있겠지만, 나에게 맞는 것이 무엇인지 경험해보며 찾아나갈 예정이다. 앞으로 많은 역량들을 쌓아나가면서 전문성을 확보하고 싶고, 삽질하고 배운 것들을 꾸준히 글을 통해 업로드 하며 기록해볼 예정이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;960&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1c31j/btrpdp9YXPt/eogSEev0Mbv94v2oOFoyBk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1c31j/btrpdp9YXPt/eogSEev0Mbv94v2oOFoyBk/img.jpg&quot; data-alt=&quot;Good bye~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1c31j/btrpdp9YXPt/eogSEev0Mbv94v2oOFoyBk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1c31j%2Fbtrpdp9YXPt%2FeogSEev0Mbv94v2oOFoyBk%2Fimg.jpg&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;400&quot; height=&quot;533&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Good bye~&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;참고자료&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.cccr-edu.or.kr/board/read.jsp?id=106699&amp;amp;&amp;amp;code=pds1&quot;&gt;https://www.cccr-edu.or.kr/board/read.jsp?id=106699&amp;amp;&amp;amp;code=pds1&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #1c1c1c;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1640839157790&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;CCCR 아카데미&quot; data-og-description=&quot;문의사항이 있으시면 친절히 안내해드리겠습니다. 전문인력(재직자 교육): 02-2052-1162 혁신성장(미취업자 교육): 02-2052-1163 혁신성장 : 02-2052-1267 --&amp;gt; 평일 09:00~18:00 / 점심 12:00~13:00 주말 및 공휴일 &quot; data-og-host=&quot;www.cccr-edu.or.kr&quot; data-og-source-url=&quot;https://www.cccr-edu.or.kr/board/read.jsp?id=106699&amp;amp;&amp;amp;code=pds1&quot; data-og-url=&quot;https://www.cccr-edu.or.kr/board/read.jsp?id=106699&amp;amp;&amp;amp;code=pds1&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.cccr-edu.or.kr/board/read.jsp?id=106699&amp;amp;&amp;amp;code=pds1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.cccr-edu.or.kr/board/read.jsp?id=106699&amp;amp;&amp;amp;code=pds1&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;CCCR 아카데미&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문의사항이 있으시면 친절히 안내해드리겠습니다. 전문인력(재직자 교육): 02-2052-1162 혁신성장(미취업자 교육): 02-2052-1163 혁신성장 : 02-2052-1267 --&amp;gt; 평일 09:00~18:00 / 점심 12:00~13:00 주말 및 공휴일&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.cccr-edu.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #1c1c1c;&quot;&gt;참고기사&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1c1c1c;&quot;&gt;&lt;a href=&quot;https://www.sedaily.com/NewsView/22U0YOB63W&quot;&gt;https://www.sedaily.com/NewsView/22U0YOB63W&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1640839153655&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;CCCR, '클라우드 엔지니어 양성과정' 프로젝트 발표회 및 수료식 개최&quot; data-og-description=&quot;한국클라우드컴퓨팅연구조합(CCCR, 이사장 홍승균)이 지난 9일 과학기술정보통신부와 정보통신기획평가원이 시행하는 혁신성장 청년인재 집중양성사업의 '클라우드 엔지니어 양성과정' 프로젝&quot; data-og-host=&quot;www.sedaily.com&quot; data-og-source-url=&quot;https://www.sedaily.com/NewsView/22U0YOB63W&quot; data-og-url=&quot;https://www.sedaily.com/NewsView/22U0YOB63W/GK0301&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zKSVx/hyMTLnn6PQ/Xoc0OalVtConSB88FT18nk/img.png?width=600&amp;amp;height=400&amp;amp;face=0_0_600_400,https://scrap.kakaocdn.net/dn/4CZoP/hyMTEaJjQd/RlKCdgvt9KtOGyHf2GD6uk/img.png?width=600&amp;amp;height=400&amp;amp;face=0_0_600_400&quot;&gt;&lt;a href=&quot;https://www.sedaily.com/NewsView/22U0YOB63W&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.sedaily.com/NewsView/22U0YOB63W&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zKSVx/hyMTLnn6PQ/Xoc0OalVtConSB88FT18nk/img.png?width=600&amp;amp;height=400&amp;amp;face=0_0_600_400,https://scrap.kakaocdn.net/dn/4CZoP/hyMTEaJjQd/RlKCdgvt9KtOGyHf2GD6uk/img.png?width=600&amp;amp;height=400&amp;amp;face=0_0_600_400');&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;CCCR, '클라우드 엔지니어 양성과정' 프로젝트 발표회 및 수료식 개최&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;한국클라우드컴퓨팅연구조합(CCCR, 이사장 홍승균)이 지난 9일 과학기술정보통신부와 정보통신기획평가원이 시행하는 혁신성장 청년인재 집중양성사업의 '클라우드 엔지니어 양성과정' 프로젝&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.sedaily.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;</description>
      <category>Daily</category>
      <category>CCCR 아카데미 후기</category>
      <category>클라우드 엔지니어 양성과정 수료</category>
      <category>혁신성장 청년인재 교육</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/29</guid>
      <comments>https://simroot.tistory.com/29#entry29comment</comments>
      <pubDate>Thu, 30 Dec 2021 14:04:01 +0900</pubDate>
    </item>
    <item>
      <title>[AWS EMR] Spark로 CSV 파일을 read 후 Parquet로 write하는 방법</title>
      <link>https://simroot.tistory.com/28</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;현재 진행중인 프로젝트에서 웹 상에서 가져온 크롤링 데이터를 CSV로 받아왔다. 해당 파일을 다루기 쉬운 Parquet로 변환하는 방법으로 AWS서비스의 EMR(Elastic Map Reduce)를 이용하여 Spark로 코드화하였다.(Python 사용)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;How to Convert CSV to Parquet Files?&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Create AWS S3 bucket&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS상의 버킷을 하나 만들어주고, 그 안에 폴더를 구분하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1719&quot; data-origin-height=&quot;672&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t1dMj/btrgjFy8dQX/nM1PdKep5x0ckjGNKMYPhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t1dMj/btrgjFy8dQX/nM1PdKep5x0ckjGNKMYPhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t1dMj/btrgjFy8dQX/nM1PdKep5x0ckjGNKMYPhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft1dMj%2FbtrgjFy8dQX%2FnM1PdKep5x0ckjGNKMYPhK%2Fimg.png&quot; data-origin-width=&quot;1719&quot; data-origin-height=&quot;672&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- input : 크롤링 데이터인 CSV 샘플파일을 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- script : spark script 코드를 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- output : EMR 클러스터를 돌렸을 때 결과물이 저장되는 위치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더 이름은 본인이 편한걸로 설정해주면 된다. sample.csv 파일을 input 폴더에 업로드 하였으며, pysaprk 코드는 script 폴더에 업로드하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. EMR 클러스터 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS 서비스 탭을 클릭하여 Amazon EMR을 찾거나 검색창에 EMR을 검색하여 들어와 클러스터를 생성한다. 내가 지정한 Region 안에서 진행한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;667&quot; width=&quot;364&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFLcpC/btrgcAfg9Jq/u5QiB1aIKwsrcbTT7bMK5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFLcpC/btrgcAfg9Jq/u5QiB1aIKwsrcbTT7bMK5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFLcpC/btrgcAfg9Jq/u5QiB1aIKwsrcbTT7bMK5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFLcpC%2FbtrgcAfg9Jq%2Fu5QiB1aIKwsrcbTT7bMK5K%2Fimg.png&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;667&quot; width=&quot;364&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;고급 옵션으로 이동&quot; 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1309&quot; data-origin-height=&quot;257&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/808qA/btrghQ2HhzO/Ea6jMwRcsyj92goyeiyw01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/808qA/btrghQ2HhzO/Ea6jMwRcsyj92goyeiyw01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/808qA/btrghQ2HhzO/Ea6jMwRcsyj92goyeiyw01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F808qA%2FbtrghQ2HhzO%2FEa6jMwRcsyj92goyeiyw01%2Fimg.png&quot; data-origin-width=&quot;1309&quot; data-origin-height=&quot;257&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spark에 체크표시한 뒤 나머지는 기본 설정으로 남겨두고 클러스터를 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;518&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d7UIiQ/btrgh29FD7u/T1l5hr8AKb5ZS3hfbbuJt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d7UIiQ/btrgh29FD7u/T1l5hr8AKb5ZS3hfbbuJt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7UIiQ/btrgh29FD7u/T1l5hr8AKb5ZS3hfbbuJt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd7UIiQ%2Fbtrgh29FD7u%2FT1l5hr8AKb5ZS3hfbbuJt0%2Fimg.png&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;518&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 보안옵션의 키페어 없음으로 설정해두어도 실습은 가능하며, 생성한 뒤 약 15분정도가 경과하면 클러스터가 test 가능 상태가 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;113&quot; width=&quot;483&quot; height=&quot;87&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIiRym/btrghQuSaLH/O0YDt3Z9D4wNwPrI1jPvoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIiRym/btrghQuSaLH/O0YDt3Z9D4wNwPrI1jPvoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIiRym/btrghQuSaLH/O0YDt3Z9D4wNwPrI1jPvoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIiRym%2FbtrghQuSaLH%2FO0YDt3Z9D4wNwPrI1jPvoK%2Fimg.png&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;113&quot; width=&quot;483&quot; height=&quot;87&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;119&quot; width=&quot;500&quot; height=&quot;95&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cziSGR/btrgbmV8Awb/5tLY8zA5MGc3u3l7FPTtq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cziSGR/btrgbmV8Awb/5tLY8zA5MGc3u3l7FPTtq1/img.png&quot; data-alt=&quot;Before&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cziSGR/btrgbmV8Awb/5tLY8zA5MGc3u3l7FPTtq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcziSGR%2FbtrgbmV8Awb%2F5tLY8zA5MGc3u3l7FPTtq1%2Fimg.png&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;119&quot; width=&quot;500&quot; height=&quot;95&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Before&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;초기 화면은 시작으로 표시되고, 영어버전으로 변경하면 Starting이라는 초록색 글씨를 확인할 수 있다. 대시보드상에서 생성 후 경과시간도 확인할 수 있으니 잠시 10분간 다른 일 하면서 기다려본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;280&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p873Z/btrgiamkDkz/MV0mRDixz9KeArpJk29j11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p873Z/btrgiamkDkz/MV0mRDixz9KeArpJk29j11/img.png&quot; data-alt=&quot;EMR 대시보드 우측 하단&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p873Z/btrgiamkDkz/MV0mRDixz9KeArpJk29j11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp873Z%2FbtrgiamkDkz%2FMV0mRDixz9KeArpJk29j11%2Fimg.png&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;280&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;EMR 대시보드 우측 하단&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;대시보드에서 마스터, 코어 부분이 현재 어디까지 구성중인지 중간 현황도 확인할 수 있다. 아직 프로비저닝 중으로 확인된다. 8-9분이 경과하니 아래와 같이 대기상태로 변경된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;114&quot; width=&quot;590&quot; height=&quot;94&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwu3ni/btrgh9gDDAQ/vjv6yGFM1T7zWrVTxmTk91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwu3ni/btrgh9gDDAQ/vjv6yGFM1T7zWrVTxmTk91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwu3ni/btrgh9gDDAQ/vjv6yGFM1T7zWrVTxmTk91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdwu3ni%2Fbtrgh9gDDAQ%2Fvjv6yGFM1T7zWrVTxmTk91%2Fimg.png&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;114&quot; width=&quot;590&quot; height=&quot;94&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;739&quot; data-origin-height=&quot;117&quot; width=&quot;587&quot; height=&quot;93&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vxyAJ/btrgg3VjSeN/DR6Boy44wt67q7KvwoK1W0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vxyAJ/btrgg3VjSeN/DR6Boy44wt67q7KvwoK1W0/img.png&quot; data-alt=&quot;After&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vxyAJ/btrgg3VjSeN/DR6Boy44wt67q7KvwoK1W0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvxyAJ%2Fbtrgg3VjSeN%2FDR6Boy44wt67q7KvwoK1W0%2Fimg.png&quot; data-origin-width=&quot;739&quot; data-origin-height=&quot;117&quot; width=&quot;587&quot; height=&quot;93&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;After&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;마찬가지로 대시보드 우측 하단의 네트워크 및 하드웨어에 보면 Running or 실행 이라는 초록색 글씨가 나오면 작업 환경이 준비가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;271&quot; width=&quot;400&quot; height=&quot;221&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DBNyH/btrgazun3ib/HKFObO5JYW86WgkK51PmOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DBNyH/btrgazun3ib/HKFObO5JYW86WgkK51PmOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DBNyH/btrgazun3ib/HKFObO5JYW86WgkK51PmOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDBNyH%2Fbtrgazun3ib%2FHKFObO5JYW86WgkK51PmOK%2Fimg.png&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;271&quot; width=&quot;400&quot; height=&quot;221&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;267&quot; width=&quot;420&quot; height=&quot;236&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAJMk4/btrgcBytph6/bi8Wkp4MPw5ZMyrisIoqDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAJMk4/btrgcBytph6/bi8Wkp4MPw5ZMyrisIoqDK/img.png&quot; data-alt=&quot;AWS EMR Dashboard&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAJMk4/btrgcBytph6/bi8Wkp4MPw5ZMyrisIoqDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAJMk4%2FbtrgcBytph6%2Fbi8Wkp4MPw5ZMyrisIoqDK%2Fimg.png&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;267&quot; width=&quot;420&quot; height=&quot;236&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AWS EMR Dashboard&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 단계(Step) 탭에서 단계 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단계(Step) 탭을 클릭하면 단계추가 버튼이 보인다. 여기서 사용자 지정 JAR의 위치, 인수를 지정하여 추가해 줄 것이다. 참고로 클러스터를 생성할 때부터 이 단계추가가 가능하지만, 클러스터 생성부터 오류가 날 수 있으니 코드가 확실하다면 생성할 때 옵션들을 이용해 만들고 테스트 단계라면 단계 탭을 이용하는 것이 편하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1613&quot; data-origin-height=&quot;779&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sdcw9/btrgiiqVpGv/Wsj0oKvKVe2BFTIfkeIM51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sdcw9/btrgiiqVpGv/Wsj0oKvKVe2BFTIfkeIM51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sdcw9/btrgiiqVpGv/Wsj0oKvKVe2BFTIfkeIM51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsdcw9%2FbtrgiiqVpGv%2FWsj0oKvKVe2BFTIfkeIM51%2Fimg.png&quot; data-origin-width=&quot;1613&quot; data-origin-height=&quot;779&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- JAR&lt;/span&gt;위치 &lt;span&gt;: command-runner.jar&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인수 &lt;span&gt;: spark-submit s3://&amp;lt;bucket name&amp;gt;/script/&amp;lt;pyspark filename&amp;gt; s3://&amp;lt;bucket name&amp;gt;/input/&amp;lt;csv filename&amp;gt; s3://&amp;lt;bucket name&amp;gt;/output/&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;JAR 위치는 command-runner.jar로 입력해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인수 입력할 때 &lt;b&gt;spark-submit&lt;/b&gt; 이라는 명령어는 &lt;b&gt;spark-submit [script위치] [input위치] [output위치]&lt;/b&gt; 를 의미하며 띄어쓰기로 구분한다. &amp;lt;&amp;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;추가 후 기다리면 실패/성공 여부를 확인할 수 있고, 정상적으로 작동 되었다면 지정해놓은 S3 bucket의 output 폴더에 아래와 같이 SUCCESS를 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1493&quot; data-origin-height=&quot;715&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckEILZ/btrgcAGp14D/IvlBZwNeR7g2B0U7EFDD10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckEILZ/btrgcAGp14D/IvlBZwNeR7g2B0U7EFDD10/img.png&quot; data-alt=&quot;Parquet 형태로 변경 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckEILZ/btrgcAGp14D/IvlBZwNeR7g2B0U7EFDD10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckEILZ%2FbtrgcAGp14D%2FIvlBZwNeR7g2B0U7EFDD10%2Fimg.png&quot; data-origin-width=&quot;1493&quot; data-origin-height=&quot;715&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Parquet 형태로 변경 완료&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* CODE&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 여기서 pyspark 코드를 작성하는 데 아래 코드를 사용하였다.&lt;/p&gt;
&lt;pre id=&quot;code_1632823775372&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
import os
from datetime import datetime
from pyspark.sql import SparkSession
from pyspark.sql.functions import *

input_path = &quot;s3://jhsim-emr-bucket/input/sample.csv&quot;
output_path = &quot;s3://jhsim-emr-bucket/output/&quot;

spark = SparkSession \
    .builder \
    .appName(&quot;How to read CSV file to Parquet&quot;) \
    .getOrCreate()

# read csv
SampleData = spark.read.option(&quot;inferSchema&quot;, &quot;true&quot;).option(&quot;header&quot;, &quot;true&quot;).csv(input_path)
SampleData.show()

# write parquet
SampleData.write.format(&quot;parquet&quot;).mode(&quot;overwrite&quot;).save(output_path)&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;먼저 필요한 모듈들과 SparkSession을 import한 뒤, input, output 경로는 가독성이 좋게 따로 지정해두었다. 이후 SparkSession을 지정하였다. 그리고 CSV파일을 read하는 코드, Parquet 형식으로 write하는 옵션을 지정해주면 성공적으로 작동한다.&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;Spark read CSV를 하는데 있어서 아래 설명을 참고하였다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1407&quot; data-origin-height=&quot;801&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kYO3w/btrgdGzyRtQ/9Pjj7OR4WyakEVUS5cNDf0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kYO3w/btrgdGzyRtQ/9Pjj7OR4WyakEVUS5cNDf0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kYO3w/btrgdGzyRtQ/9Pjj7OR4WyakEVUS5cNDf0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkYO3w%2FbtrgdGzyRtQ%2F9Pjj7OR4WyakEVUS5cNDf0%2Fimg.jpg&quot; data-origin-width=&quot;1407&quot; data-origin-height=&quot;801&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&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;해당 테스트를 해보기 전에 AWS workshops에 올라와있는 EMR workshop을 한 번 돌려봤다. 그 후 진행하니 개념에 대한 이해가 되고 적용점을 찾을 수 있었다. Jupyter notebook으로 기본 테스트를 해봤지만 프로젝트를 위해 Python 언어로 pyspark 스크립트화 해서 EMR에 돌리니 파일 변형하는 부분에 있어서 쉽게 자동화를 시킬 수 있어 편리했다.&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;CSV 파일마다 필드값이 달라질 수도 있고 같은 필드값을 가진 파일도 있을 것이다. 이번 프로젝트에서는 크롤링을 할 것이기 때문에 별도로 추가되는 필드값은 없다. 그래서 스키마를 필드별로 지정해서 사용하는 것이 더 안정적인 코드가 될 것 같다. 지금은 header값을 true로 지정하여 기본적인 코드로 작성했지만, 더 나아가서 각 필드값별로 스키마를 지정해 주는 것이 더 안정적일 것이다. 이번 코드 외에도 StructField 값을 지정하는 코드까지 2가지 방법을 테스트해봐야겠다.&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;&amp;lt;참고자료&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* AWS workshops&lt;/p&gt;
&lt;figure id=&quot;og_1632822613479&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;EMR Workshop&quot; data-og-description=&quot;EMR Steps EMR Steps can be configured while creating the cluster or submitted after the cluster is created. We will be following the latter. You can add steps to a cluster using the AWS Management Console, the AWS CLI, or the Amazon EMR API. The maximum nu&quot; data-og-host=&quot;emr-etl.workshop.aws&quot; data-og-source-url=&quot;https://emr-etl.workshop.aws/spark_etl/steps.html&quot; data-og-url=&quot;https://emr-etl.workshop.aws/spark_etl/steps.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://emr-etl.workshop.aws/spark_etl/steps.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://emr-etl.workshop.aws/spark_etl/steps.html&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;EMR Workshop&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;EMR Steps EMR Steps can be configured while creating the cluster or submitted after the cluster is created. We will be following the latter. You can add steps to a cluster using the AWS Management Console, the AWS CLI, or the Amazon EMR API. The maximum nu&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;emr-etl.workshop.aws&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Apache Spark Tutorial&amp;mdash; How to Read and Write Data With PySpark&lt;/p&gt;
&lt;figure id=&quot;og_1632823922255&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;Spark Essentials &amp;mdash; How to Read and Write Data With PySpark&quot; data-og-description=&quot;More than a cheat sheet&quot; data-og-host=&quot;towardsdatascience.com&quot; data-og-source-url=&quot;https://towardsdatascience.com/spark-essentials-how-to-read-and-write-data-with-pyspark-5c45e29227cd&quot; data-og-url=&quot;https://towardsdatascience.com/spark-essentials-how-to-read-and-write-data-with-pyspark-5c45e29227cd&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bDYDqE/hyLLLhQAoW/O2QIbbqmVlIsjJdFLfMqlK/img.jpg?width=1200&amp;amp;height=683&amp;amp;face=0_0_1200_683,https://scrap.kakaocdn.net/dn/BbhQc/hyLLFWd8TF/spKL1oH4lEWbxPpNjgbH2K/img.jpg?width=2000&amp;amp;height=1512&amp;amp;face=0_0_2000_1512,https://scrap.kakaocdn.net/dn/bypf1w/hyLLBsJWOI/OF3MM1YBcOE5UrIZ2ACyzk/img.jpg?width=1407&amp;amp;height=801&amp;amp;face=0_0_1407_801&quot;&gt;&lt;a href=&quot;https://towardsdatascience.com/spark-essentials-how-to-read-and-write-data-with-pyspark-5c45e29227cd&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://towardsdatascience.com/spark-essentials-how-to-read-and-write-data-with-pyspark-5c45e29227cd&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bDYDqE/hyLLLhQAoW/O2QIbbqmVlIsjJdFLfMqlK/img.jpg?width=1200&amp;amp;height=683&amp;amp;face=0_0_1200_683,https://scrap.kakaocdn.net/dn/BbhQc/hyLLFWd8TF/spKL1oH4lEWbxPpNjgbH2K/img.jpg?width=2000&amp;amp;height=1512&amp;amp;face=0_0_2000_1512,https://scrap.kakaocdn.net/dn/bypf1w/hyLLBsJWOI/OF3MM1YBcOE5UrIZ2ACyzk/img.jpg?width=1407&amp;amp;height=801&amp;amp;face=0_0_1407_801');&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;Spark Essentials &amp;mdash; How to Read and Write Data With PySpark&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;More than a cheat sheet&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;towardsdatascience.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 필드별 StructField 지정 참고&lt;/p&gt;
&lt;figure id=&quot;og_1632824687953&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;[pyspark] CSV파일로 데이터프레임 생성&quot; data-og-description=&quot;pyspark에서 스파크세션을 이용하여 CSV파일을 읽어서 데이터프레임을 생성하는 예제를 알아보겠습니다. ;&quot; data-og-host=&quot;118k.tistory.com&quot; data-og-source-url=&quot;https://118k.tistory.com/947&quot; data-og-url=&quot;https://118k.tistory.com/947&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0umoD/hyLLNGKLyQ/HJQiefwqLsk4IXHAacr4o0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/NUfIF/hyLLJ5pEw6/vsp8KHFml0g6kZIgiCxGD1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://118k.tistory.com/947&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://118k.tistory.com/947&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0umoD/hyLLNGKLyQ/HJQiefwqLsk4IXHAacr4o0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/NUfIF/hyLLJ5pEw6/vsp8KHFml0g6kZIgiCxGD1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[pyspark] CSV파일로 데이터프레임 생성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;pyspark에서 스파크세션을 이용하여 CSV파일을 읽어서 데이터프레임을 생성하는 예제를 알아보겠습니다. ;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;118k.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AWS</category>
      <category>AWS EMR</category>
      <category>Spark로 CSV 파일을 read 후 Parquet로 write하는 방법</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/28</guid>
      <comments>https://simroot.tistory.com/28#entry28comment</comments>
      <pubDate>Tue, 28 Sep 2021 19:57:19 +0900</pubDate>
    </item>
    <item>
      <title>[DATABASE] 운용 데이터 저장소(Operational Data Store, ODS)란?</title>
      <link>https://simroot.tistory.com/27</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;운용 데이터 저장소(Operational Data Store, ODS)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;운용 데이터 저장소는 데이터 웨어하우스(DW)의 데이터를 저장, 유지, 관리하는 잠정 영역에 속하는 데이터베이스 형태를 말한다. 이전 포스팅에 자세하게 적었던 &amp;lsquo;데이터 웨어하우스&amp;rsquo;는 정보(data)와 창고(warehouse)의 합성어로, 데이터를 공통 형식으로 변환하여 관리하며 대량의 데이터를 수반하는 복잡한 질의 형태를 갖는다.&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;이와 달리 운용 데이터 저장소(ODS)는 단기 사용 메모리처럼 소량의 데이터를 수반하는 질의를 수행하고, 비즈니스 운용 과정에서 데이터를 현행화한다. 앞선 데이터 웨어하우스나 데이터마트와는 상호 작용 관계이다. 초기 운용 데이터 저장소는 일일 판매 및 주문 등 보고용 도구로 개발되어 비즈니스 거래 보고에 사용되었으나, 현재는 고객 관계 관리(CRM)로 개발되어 동기화를 통해 고객에게 지속적이고 조직적인 정보를 제공하는 데 사용된다. &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;DW등&amp;nbsp;용어에&amp;nbsp;대해&amp;nbsp;궁금하다면&amp;nbsp;&lt;a href=&quot;https://simroot.tistory.com/25&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;여기&lt;/span&gt;&lt;/a&gt;를&amp;nbsp;클릭하여&amp;nbsp;이전&amp;nbsp;포스팅을&amp;nbsp;참고해주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;참고자료&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1628758491677&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;Operational data store - Wikipedia&quot; data-og-description=&quot;An operational data store (or &amp;quot;ODS&amp;quot;) is used for operational reporting and as a source of data for the enterprise data warehouse. It is a complementary element to an EDW in a decision support landscape, and is used for operational reporting, controls and d&quot; data-og-host=&quot;en.wikipedia.org&quot; data-og-source-url=&quot;https://en.wikipedia.org/wiki/Operational_data_store&quot; data-og-url=&quot;https://en.wikipedia.org/wiki/Operational_data_store&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Operational_data_store&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://en.wikipedia.org/wiki/Operational_data_store&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;Operational data store - Wikipedia&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;An operational data store (or &quot;ODS&quot;) is used for operational reporting and as a source of data for the enterprise data warehouse. It is a complementary element to an EDW in a decision support landscape, and is used for operational reporting, controls and d&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;en.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1628758243150&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;운용 데이터 저장소(Operational Data Store, ODS) | 과학문화포털 사이언스올&quot; data-og-description=&quot;과학의 모든 것, 사이언스올! 과학학습, 과학체험, 과학문화 콘텐츠 제공&quot; data-og-host=&quot;www.scienceall.com&quot; data-og-source-url=&quot;https://www.scienceall.com/%EC%9A%B4%EC%9A%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%80%EC%9E%A5%EC%86%8Coperational-data-store-ods/&quot; data-og-url=&quot;https://www.scienceall.com/%EC%9A%B4%EC%9A%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%80%EC%9E%A5%EC%86%8Coperational-data-store-ods/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b0ZZaa/hyLdsQxZ1g/fiPm8TVc4tQs1marTPeMf1/img.png?width=174&amp;amp;height=89&amp;amp;face=0_0_174_89&quot;&gt;&lt;a href=&quot;https://www.scienceall.com/%EC%9A%B4%EC%9A%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%80%EC%9E%A5%EC%86%8Coperational-data-store-ods/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.scienceall.com/%EC%9A%B4%EC%9A%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%80%EC%9E%A5%EC%86%8Coperational-data-store-ods/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b0ZZaa/hyLdsQxZ1g/fiPm8TVc4tQs1marTPeMf1/img.png?width=174&amp;amp;height=89&amp;amp;face=0_0_174_89');&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;운용 데이터 저장소(Operational Data Store, ODS) | 과학문화포털 사이언스올&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;과학의 모든 것, 사이언스올! 과학학습, 과학체험, 과학문화 콘텐츠 제공&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.scienceall.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;</description>
      <category>Database</category>
      <category>ODS</category>
      <category>Operational Data Store</category>
      <category>운용 데이터 저장소</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/27</guid>
      <comments>https://simroot.tistory.com/27#entry27comment</comments>
      <pubDate>Thu, 12 Aug 2021 17:56:09 +0900</pubDate>
    </item>
    <item>
      <title>[DATABASE] CDC(Change Data Capture)란?</title>
      <link>https://simroot.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스에서 CDC(Change Data Capture)는 변경된 데이터를 확인하고 추적하여, 그 변경된 데이터를 사용하여 작업을 수행할 때 사용되는 소프트웨어 설계 패턴의 집합이다. 데이터&amp;nbsp;소스의&amp;nbsp;변경&amp;nbsp;사항을&amp;nbsp;식별,&amp;nbsp;캡처&amp;nbsp;및&amp;nbsp;전달하는&amp;nbsp;것을&amp;nbsp;기반으로&amp;nbsp;하는&amp;nbsp;데이터&amp;nbsp;통합&amp;nbsp;접근&amp;nbsp;방식이다. CDC는 &lt;a href=&quot;https://simroot.tistory.com/25&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;데이터 웨어하우스(DW)&lt;/span&gt;&lt;/a&gt;의 핵심 기능 중 하나이기 때문에 데이터 웨어하우스 환경에서 자주 발생하지만, CDC는 모든 데이터베이스 또는 데이터 저장소 시스템에서 활용할 수 있다.&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;CDC 매커니즘에는 아래와 같은 다양한 방법론이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Timestamps on rows &lt;br /&gt;- Version numbers on rows &lt;br /&gt;- Status indicators on rows &lt;br /&gt;-&amp;nbsp;Time/Version/Status&amp;nbsp;on&amp;nbsp;rows &lt;br /&gt;-&amp;nbsp;Triggers&amp;nbsp;on&amp;nbsp;tables &lt;br /&gt;-&amp;nbsp;Event&amp;nbsp;programming &lt;br /&gt;-&amp;nbsp;Log&amp;nbsp;scanners&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;참고자료&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1628755985958&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;Change data capture - Wikipedia&quot; data-og-description=&quot;From Wikipedia, the free encyclopedia Jump to navigation Jump to search In databases, change data capture (CDC) is a set of software design patterns used to determine and track the data that has changed so that action can be taken using the changed data. C&quot; data-og-host=&quot;en.wikipedia.org&quot; data-og-source-url=&quot;https://en.wikipedia.org/wiki/Change_data_capture&quot; data-og-url=&quot;https://en.wikipedia.org/wiki/Change_data_capture&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Change_data_capture&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://en.wikipedia.org/wiki/Change_data_capture&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;Change data capture - Wikipedia&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;From Wikipedia, the free encyclopedia Jump to navigation Jump to search In databases, change data capture (CDC) is a set of software design patterns used to determine and track the data that has changed so that action can be taken using the changed data. C&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;en.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Database</category>
      <category>CDC</category>
      <category>Change Data Capture</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/26</guid>
      <comments>https://simroot.tistory.com/26#entry26comment</comments>
      <pubDate>Thu, 12 Aug 2021 17:25:15 +0900</pubDate>
    </item>
    <item>
      <title>[DATABASE] 데이터 웨어하우스란? DW, EDW, RDW, ADW, DM, ETL 용어정리</title>
      <link>https://simroot.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;AWS based EDW 구축&quot;이라는 주제로 프로젝트를 진행하기에 앞서, 기본적으로 등장하는 DW, EDW, RDW, ADW, 그리고 DM, ETL이라는 개념을 용어부터 정리해보려고 한다.&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;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;DW(Data Warehouse) - 데이터 웨어하우스&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;데이터 웨어하우스&lt;/b&gt;&lt;span style=&quot;color: #202122;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #202122;&quot;&gt;data warehouse&lt;/span&gt;&lt;span style=&quot;color: #202122;&quot;&gt;)란 사용자의 의사 결정에 도움을 주기 위하여&lt;span&gt;&amp;nbsp;데이터베이스&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #202122;&quot;&gt;에 축적된 데이터를 공통의 형식으로 변환해서 관리하는 데이터베이스를 말한다.(비즈니스 사용자들의 의사결정 지원에 전적으로 이용된다) 줄여서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;DW&lt;span style=&quot;color: #202122;&quot;&gt;로도 불린다. &lt;span style=&quot;color: #202122;&quot;&gt;DW는 하나 이상의 서로 다른 소스에서 통합된 데이터의 중앙 리포지토리이다. &lt;b&gt;DW, DWH &lt;/b&gt;라고도 표현한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #202122;&quot;&gt;&lt;span style=&quot;color: #202122;&quot;&gt;정보(data)와 창고(warehouse)가 합쳐져서 만들어진 어휘이다. &lt;span style=&quot;color: #202122;&quot;&gt;따라서 데이터 웨어하우스는 방대한 조직 내에서 분산 운영되는 각각의 데이터 베이스 관리 시스템들을 효율적으로 통합하여 조정ㆍ관리한다. 그렇기 때문에 효율적인 의사 결정 시스템을 위한 기초를 제공하는 실무적인 활용 방법론이 제공되고 있다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;254&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vcoLq/btrbJIbo8dm/kcGFjltQCXZK2q3NsVm9sK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vcoLq/btrbJIbo8dm/kcGFjltQCXZK2q3NsVm9sK/img.jpg&quot; data-alt=&quot;data warehouse 기본 아키텍처 / 출처 : 위키피디아&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vcoLq/btrbJIbo8dm/kcGFjltQCXZK2q3NsVm9sK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvcoLq%2FbtrbJIbo8dm%2FkcGFjltQCXZK2q3NsVm9sK%2Fimg.jpg&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;254&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;data warehouse 기본 아키텍처 / 출처 : 위키피디아&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;EDW(Enterprise Data Warehouse) - 엔터프라이즈 데이터 웨어하우스&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;엔터프라이즈 데이터 웨어하우스&lt;/b&gt;&lt;span style=&quot;color: #202122;&quot;&gt;(enterprise d&lt;/span&gt;&lt;span style=&quot;color: #202122;&quot;&gt;ata warehouse&lt;/span&gt;&lt;span style=&quot;color: #202122;&quot;&gt;)&lt;/span&gt;는 여러 애플리케이션의 비즈니스 정보를 중앙 집중화하고 조직 전체에서 분석 및 사용할 수 있도록 하는 데이터베이스 또는 데이터베이스 모음이다. EDW는 사내 서버 또는 클라우드에 보관할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 유형의 디지털 웨어하우스에 저장된 데이터는 비즈니스, 직원, 고객 등에 대해 알려진 정보의 대부분을 나타내므로 비즈니스의 가장 귀중한 자산 중 하나가 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘날 기업이 비즈니스 전략을 계획하기 위해서는 데이터 기반 의사 결정에 의존하기 때문에 EDW가 필요하다. 분석을 성공적으로 수행하려면 모든 데이터 소스의 데이터를 분석에 적합한 형식으로 데이터 웨어하우스에 로드해야 한다. 그런 다음 선택한 비즈니스 인텔리전스 도구를 이 데이터 웨어하우스에 연결하여 필요한 분석을 수행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* EDW(엔터프라이즈 데이터 웨어하우스) 사용의 이점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EDW를 사용하면 다음과 같은 이점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 데이터 표준화 :&lt;/b&gt; 모든 기업의 운영 데이터는 다양한 &lt;a href=&quot;https://simroot.tistory.com/24&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;OLTP(온라인 트랜잭션 처리)&lt;/a&gt; 시스템 및 데이터베이스에 저장된다. 각 시스템 또는 데이터베이스는 데이터를 다른 형식으로 저장한다. 유용한 분석을 수행하려면 먼저 모든 데이터가 동일한 형식이 되도록 데이터를 표준화해야 한다. 이러한 데이터베이스의 데이터는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;ETL(Extract, Transform, Load / 추출, 변환, 로드)&lt;/b&gt;&lt;/span&gt; 파이프라인을 사용하여 데이터 웨어하우스로 로드된다. 이 파이프라인을 사용하여 데이터를 표준 형식으로 변환하고 데이터 웨어하우스에 저장할 수 있다. 이렇게 하면 &lt;b&gt;데이터를 더 쉽게 분석&lt;/b&gt;하고 데이터 웨어하우스의 데이터에 대한 이해를 높일 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 유연성 :&lt;/b&gt; 기업이 성장함에 따라 저장하는 데이터의 양이 급격히 증가하게 된다. 볼륨의 증가와 함께 기록해야 하는 다양한 기타 속성을 수용하기 위해 데이터 모델을 업데이트해야 하는 상황이 있을 수 있다. EDW는 유연성으로 유명하며 시스템을 완전히 정비하지 않고도 저장되는 데이터의 양이나 데이터 모델의 변경과 같은 요구 사항의 변경 사항을 쉽게 수용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 비즈니스 인텔리전스 도구에 대한 연결성 :&lt;/b&gt; 대부분의 최신 엔터프라이즈 데이터 웨어하우스(EDW)를 사용하면 선택한 비즈니스 인텔리전스 도구에 쉽게 연결할 수 있다. 이러한 원활한 연결을 통해 기업은 비즈니스가 주요 목표를 얼마나 잘 달성하고 있는지 측정하는 데 사용할 수 있는 다양한 KPI(핵심 성과 지표)를 쉽게 설정하고 추적할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;RDW(Real-time Data Warehouse) - 실시간 데이터 웨어하우스&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자는 데이터 웨어하우스에 점점 더 많은 것을 요구하고 있다. 이는 기술이 제공하는 것의 발전과 가능한 기술의 변화로 이어진다. 점점 더 많은 고객이 요구하는 기능인 라이브 데이터, 최근 데이터, 과거 데이터에 대한 분석 기능들을 다루는 실시간 데이터 웨어하우스(real-time data warehouse)라는 개념이 등장하게 된 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* RDW의 이점&lt;/b&gt;&lt;br /&gt;-&amp;nbsp;빠른&amp;nbsp;결정 &lt;br /&gt;-&amp;nbsp;이상적인&amp;nbsp;데이터&amp;nbsp;로드 &lt;br /&gt;-&amp;nbsp;빠른&amp;nbsp;복구 &lt;br /&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;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;ADW(analytical data warehouse) - 분석 데이터 웨어하우스&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ADW의 A가 analytical이라 함은 분석이라는 의미이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 뜻으로는 &lt;span style=&quot;color: #222222;&quot;&gt;오라클 데이터웨어하우스 클라우드(ADW: Autonomous Data Warehouse cloud)라는 인공지능 기술 등을 도입해 클라우드 기반 실시간처리를 도와주는 솔루션이 있다. 여기서 말하는 것은 전자에 말한 분석 DW를 말한다. ADW는 과거의 DW개념이라고 생각할 수 있으며 RDW로 점점 발전해가고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;DM(Data Mart)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터&amp;nbsp;마트는&amp;nbsp;금융이나&amp;nbsp;마케팅같은&amp;nbsp;제한된&amp;nbsp;수의&amp;nbsp;데이터를&amp;nbsp;하나의&amp;nbsp;주제에&amp;nbsp;초점을&amp;nbsp;맞춘&amp;nbsp;데이터웨어&amp;nbsp;하우스의&amp;nbsp;간단한&amp;nbsp;형태이다.&amp;nbsp;규모가&amp;nbsp;더&amp;nbsp;작고&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;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;ETL(&lt;b&gt;Extract, Transform, Load)&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ETL 시스템은 소스 데이터 시스템과 데이터 웨어하우스 간의 데이터 이동과 데이터 웨어하우스에서 데이터 마트로의 이동을 관리한다. 먼저 소스에서 데이터를 추출한 다음 다음 스토리지 계층의 표준에 따라 변환해야 하며 마지막으로 형식이 지정된 데이터를 이 다음 계층에 올바르게 로드해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말해서 원본으로부터 데이터를 내려받아 가공해서 로딩하는 것을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;ETL&lt;/span&gt;이라고 한다&lt;span&gt;. 금융권에서 많이 등장하는데 예를들어서&lt;/span&gt; 은행 거래를 할 때 새벽에 잠시 작업이 안 되고 로딩하는 과정이 &lt;span&gt;ETL&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;작업중인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;304&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXa0W9/btrbQbwKK6k/adMnkkqiKkMldaekAawZ20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXa0W9/btrbQbwKK6k/adMnkkqiKkMldaekAawZ20/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;Snowflake&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXa0W9/btrbQbwKK6k/adMnkkqiKkMldaekAawZ20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXa0W9%2FbtrbQbwKK6k%2FadMnkkqiKkMldaekAawZ20%2Fimg.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;304&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;nbsp;Snowflake&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Database 아키텍처의 과거와 현재에 대하여&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정형&lt;span&gt;, &lt;/span&gt;비정형&lt;span&gt;, &lt;/span&gt;반정형을 object storage에 모아서 &lt;span&gt;AI&lt;/span&gt;를 위한 데이터셋을 만들수도 있고 기존의 &lt;span&gt;DW&lt;/span&gt;를 구성할 수도 있다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;예전에는 &lt;span&gt;DB &lt;/span&gt;안에 들어있던 정형 데이터만 썼다면 지금은 정형&lt;span&gt;, &lt;/span&gt;비정형&lt;span&gt;, &lt;/span&gt;반정형을 이용해 구성할 수 있다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;OLTP의 &lt;/span&gt;특징 : 동시접속자가 엄청 많다&lt;span&gt;. &lt;/span&gt;커넥션이 몇백&lt;span&gt;~&lt;/span&gt;몇천개까지 열린다&lt;span&gt;. &lt;/span&gt;동시접속자들을 받아서 최대한 많이 처리하는 것이 관건이며 대표적으로&lt;span&gt;&amp;nbsp;MySQL, Oracle, DB2, MSSQL&lt;/span&gt;같이 우리가 알고있는 대부분의 &lt;span&gt;SQL.을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;OLAP &amp;ndash; &lt;/span&gt;동시 접속자 수는 작음&lt;span&gt;. &lt;/span&gt;심할 경우에는 커넥션이 &lt;span&gt;5&lt;/span&gt;개인 경우도 있음&lt;span&gt;. &lt;/span&gt;동시에 들어오는 쿼리가 적다&lt;span&gt;. &lt;/span&gt;대용량 데이터를 처리를 잘 한다는 컨셉으로 갔었음&lt;span&gt;. 대표적으로 Informix, Sybase / Teradata 같은것들이 있고 &lt;/span&gt;전통적으로 고가의 장비였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 &lt;span&gt;DW&lt;/span&gt;시장이 생기기 전 &lt;span&gt;1999~2000&lt;/span&gt;년 정도에는 어떤식으로 처리를 했을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기업엔 굉장히 많은 &lt;span&gt;DB&lt;/span&gt;가 있다. &lt;/span&gt;하나의 업무단위가 많이 있었는데 이제 이 업무에대한 보고를 해야하는 것&lt;span&gt;. &lt;/span&gt;결국 최고 결정권자들이 결정할 수 있도록 보고하는 자료를 만들어야 한다. 간략하게 하나의 레코드를 만들어서 (축약, 요약, 데이터 단편화)정보 만들기하는 것을 기존에는 &lt;span&gt;reporting system&lt;/span&gt;이라고 불렀다&lt;span&gt;. (e&lt;/span&gt;&lt;span&gt;x. &lt;/span&gt;재무&lt;span&gt;, &lt;/span&gt;환율정보등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 흐름을 살펴볼 수 있도록 아래의 그림으로 정리해두었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;458&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HBj03/btrb1bb99hT/aQXTjkk8ZmKeELG64aBCw0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HBj03/btrb1bb99hT/aQXTjkk8ZmKeELG64aBCw0/img.jpg&quot; data-alt=&quot;과거의 database의 흐름 기본 아키텍처&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HBj03/btrb1bb99hT/aQXTjkk8ZmKeELG64aBCw0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHBj03%2Fbtrb1bb99hT%2FaQXTjkk8ZmKeELG64aBCw0%2Fimg.jpg&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;458&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;과거의 database의 흐름 기본 아키텍처&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;원통형의 그림은 각각의 데이터를 의미한다. 재무, 환율정보 등과 같은 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;443&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sdYsx/btrb5oIkYdf/U6ign6uGYKSFdHz4k7L15k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sdYsx/btrb5oIkYdf/U6ign6uGYKSFdHz4k7L15k/img.jpg&quot; data-alt=&quot;현재의 database의 흐름 기본 아키텍처&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sdYsx/btrb5oIkYdf/U6ign6uGYKSFdHz4k7L15k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsdYsx%2Fbtrb5oIkYdf%2FU6ign6uGYKSFdHz4k7L15k%2Fimg.jpg&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;443&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;현재의 database의 흐름 기본 아키텍처&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;엑사데이터와 같은 대용량의 데이터를 관리해주기도 하며 실시간 동기화를 사용하는 방향으로 나아가고있다. 여기서 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://simroot.tistory.com/26&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CDC&lt;/a&gt;&lt;/span&gt;라는 개념과 위에 설명한 EDW, RDW, ADW가 등장한다. 결국 관리가 되는 데이터로 바꾸려면 정형 데이터로 바꿔야 한다. 그 때 쓰이는 게 &lt;span&gt;EMR, Spark와 같은 솔루션이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직까지는 기본적으로 실시간으로 동기화 시켜주는 기술이 없다&lt;span&gt;. &lt;/span&gt;그래서 자꾸 케네시스라던지 카프카&lt;span&gt;, &lt;/span&gt;등으로 꽂아넣는 M&lt;span&gt;icroservice Architecture&lt;/span&gt;로 가이드가 되고 있다&lt;span&gt;. &lt;/span&gt;전통적인 기업들의 앱을 바꾸기란 쉽지가 않다&lt;span&gt;. 아직까지는 위와 같은 흐름으로 &lt;/span&gt;정형&lt;span&gt;, &lt;/span&gt;비정형&lt;span&gt;, &lt;/span&gt;반정형 같은 것들을 처리하고 계속해서 새로운 것들이 등장하고 있는 상황이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 프로젝트를 진행하고 있는데, 앞으로 두달간 해야 할 과제들이 생겼다. 이런것들에 대해 이벤트와 데이터 파이프라인이 발생하면 어떻게하면 심플하게 가져가고, 유기적으로 만들 것인가 흐름을 고민하는 것이 필요하다. 또한 모니터링을 하고 있다가 임계점이 넘으면 자동으로 &lt;span&gt;scale out&lt;/span&gt;을 하고 테라폼을 돌려서 서버를 증설할 수 있는지&lt;span&gt;. 그리고 이것을&lt;/span&gt; 돌렸을 때 네트워크 구성이 잘 되도록 구조화 하는 작업이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;참고자료&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DW(Data warehouse) - wikipedia&lt;/p&gt;
&lt;figure id=&quot;og_1628664635647&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;데이터 웨어하우스 - 위키백과, 우리 모두의 백과사전&quot; data-og-description=&quot;데이터 웨어하우스(data warehouse)란 사용자의 의사 결정에 도움을 주기 위하여 기간시스템의 데이터베이스에 축적된 데이터를 공통의 형식으로 변환해서 관리하는 데이터베이스를 말한다. 줄여&quot; data-og-host=&quot;ko.wikipedia.org&quot; data-og-source-url=&quot;https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%9B%A8%EC%96%B4%ED%95%98%EC%9A%B0%EC%8A%A4&quot; data-og-url=&quot;https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%9B%A8%EC%96%B4%ED%95%98%EC%9A%B0%EC%8A%A4&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%9B%A8%EC%96%B4%ED%95%98%EC%9A%B0%EC%8A%A4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%9B%A8%EC%96%B4%ED%95%98%EC%9A%B0%EC%8A%A4&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;데이터 웨어하우스 - 위키백과, 우리 모두의 백과사전&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;데이터 웨어하우스(data warehouse)란 사용자의 의사 결정에 도움을 주기 위하여 기간시스템의 데이터베이스에 축적된 데이터를 공통의 형식으로 변환해서 관리하는 데이터베이스를 말한다. 줄여&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ko.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1628665341108&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;Data warehouse - Wikipedia&quot; data-og-description=&quot;The basic architecture of a data warehouse In computing, a data warehouse (DW or DWH), also known as an enterprise data warehouse (EDW), is a system used for reporting and data analysis and is considered a core component of business intelligence.[1] DWs ar&quot; data-og-host=&quot;en.wikipedia.org&quot; data-og-source-url=&quot;https://en.wikipedia.org/wiki/Data_warehouse&quot; data-og-url=&quot;https://en.wikipedia.org/wiki/Data_warehouse&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vRkmD/hyLcuVIvvL/SFnemXfcVLWi2XkCxUMXl0/img.jpg?width=434&amp;amp;height=254&amp;amp;face=0_0_434_254&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Data_warehouse&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://en.wikipedia.org/wiki/Data_warehouse&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vRkmD/hyLcuVIvvL/SFnemXfcVLWi2XkCxUMXl0/img.jpg?width=434&amp;amp;height=254&amp;amp;face=0_0_434_254');&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;Data warehouse - Wikipedia&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The basic architecture of a data warehouse In computing, a data warehouse (DW or DWH), also known as an enterprise data warehouse (EDW), is a system used for reporting and data analysis and is considered a core component of business intelligence.[1] DWs ar&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;en.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EDW(Enterprise Data warehouse)&lt;/p&gt;
&lt;figure id=&quot;og_1628666329180&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;Enterprise Data Warehouse (EDW)&quot; data-og-description=&quot;See our definition of EDW, or Enterprise Data Warehouse. Understand what a data warehouse is and why its important&quot; data-og-host=&quot;www.precisely.com&quot; data-og-source-url=&quot;https://www.precisely.com/glossary/enterprise-data-warehouse&quot; data-og-url=&quot;https://www.precisely.com/glossary/enterprise-data-warehouse&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bt5Sf0/hyLdx4nSUk/6hikgglurS3VcM1YvRTylk/img.png?width=1200&amp;amp;height=434&amp;amp;face=0_0_1200_434,https://scrap.kakaocdn.net/dn/sZ1zb/hyLcyDPFcv/4B31wKiY5fPIC0jGwkTH40/img.png?width=1000&amp;amp;height=667&amp;amp;face=607_298_678_377&quot;&gt;&lt;a href=&quot;https://www.precisely.com/glossary/enterprise-data-warehouse&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.precisely.com/glossary/enterprise-data-warehouse&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bt5Sf0/hyLdx4nSUk/6hikgglurS3VcM1YvRTylk/img.png?width=1200&amp;amp;height=434&amp;amp;face=0_0_1200_434,https://scrap.kakaocdn.net/dn/sZ1zb/hyLcyDPFcv/4B31wKiY5fPIC0jGwkTH40/img.png?width=1000&amp;amp;height=667&amp;amp;face=607_298_678_377');&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;Enterprise Data Warehouse (EDW)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;See our definition of EDW, or Enterprise Data Warehouse. Understand what a data warehouse is and why its important&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.precisely.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1628667125427&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;Understanding EDW (Enterprise Data Warehouse) Simplified&quot; data-og-description=&quot;This article will provide you with an understanding of Enterprise Data Warehouses (EDW) along with its types allowing you to set it up for your business.&quot; data-og-host=&quot;hevodata.com&quot; data-og-source-url=&quot;https://hevodata.com/learn/enterprise-data-warehouse-edw-simplified/&quot; data-og-url=&quot;https://hevodata.com/learn/enterprise-data-warehouse-edw-simplified/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jivLb/hyLdwYIoqE/ZQqOXo2t7RDhO3uAcRSqvK/img.png?width=1288&amp;amp;height=728&amp;amp;face=0_0_1288_728,https://scrap.kakaocdn.net/dn/T4ik0/hyLctvLooT/3WneqdJOHg3F2lIxfCSpw1/img.png?width=1288&amp;amp;height=728&amp;amp;face=0_0_1288_728,https://scrap.kakaocdn.net/dn/4ZhFS/hyLdyCee6r/d85jSGdEnhkHFGUVzCuzZ0/img.png?width=768&amp;amp;height=434&amp;amp;face=0_0_768_434&quot;&gt;&lt;a href=&quot;https://hevodata.com/learn/enterprise-data-warehouse-edw-simplified/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hevodata.com/learn/enterprise-data-warehouse-edw-simplified/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jivLb/hyLdwYIoqE/ZQqOXo2t7RDhO3uAcRSqvK/img.png?width=1288&amp;amp;height=728&amp;amp;face=0_0_1288_728,https://scrap.kakaocdn.net/dn/T4ik0/hyLctvLooT/3WneqdJOHg3F2lIxfCSpw1/img.png?width=1288&amp;amp;height=728&amp;amp;face=0_0_1288_728,https://scrap.kakaocdn.net/dn/4ZhFS/hyLdyCee6r/d85jSGdEnhkHFGUVzCuzZ0/img.png?width=768&amp;amp;height=434&amp;amp;face=0_0_768_434');&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;Understanding EDW (Enterprise Data Warehouse) Simplified&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This article will provide you with an understanding of Enterprise Data Warehouses (EDW) along with its types allowing you to set it up for your business.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hevodata.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RDW(Real-Time Data Warehouse)&lt;/p&gt;
&lt;figure id=&quot;og_1628668012109&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;An Overview of Real Time Data Warehousing on Cloudera - Cloudera Blog&quot; data-og-description=&quot;Users today are asking ever more from their data warehouse. This is resulting in advancements of what is provided by the technology, and a resulting shift in the art of the possible. As an example of this, in this post we look at Real Time Data Warehousing&quot; data-og-host=&quot;blog.cloudera.com&quot; data-og-source-url=&quot;https://blog.cloudera.com/an-overview-of-real-time-data-warehousing-on-cloudera/&quot; data-og-url=&quot;https://blog.cloudera.com/an-overview-of-real-time-data-warehousing-on-cloudera/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bJXMWt/hyLcwF4DWv/vVkHd8ekC47z1KT3x6lybk/img.jpg?width=2560&amp;amp;height=1707&amp;amp;face=0_0_2560_1707,https://scrap.kakaocdn.net/dn/ZWQL9/hyLdm9Emkc/kNvmrkRYOnPsC5uMKa5l4k/img.jpg?width=2560&amp;amp;height=1707&amp;amp;face=0_0_2560_1707,https://scrap.kakaocdn.net/dn/TRCA8/hyLcwMOf19/XJBMff3bKPC83qdQ87EsBk/img.png?width=1902&amp;amp;height=916&amp;amp;face=0_0_1902_916&quot;&gt;&lt;a href=&quot;https://blog.cloudera.com/an-overview-of-real-time-data-warehousing-on-cloudera/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.cloudera.com/an-overview-of-real-time-data-warehousing-on-cloudera/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bJXMWt/hyLcwF4DWv/vVkHd8ekC47z1KT3x6lybk/img.jpg?width=2560&amp;amp;height=1707&amp;amp;face=0_0_2560_1707,https://scrap.kakaocdn.net/dn/ZWQL9/hyLdm9Emkc/kNvmrkRYOnPsC5uMKa5l4k/img.jpg?width=2560&amp;amp;height=1707&amp;amp;face=0_0_2560_1707,https://scrap.kakaocdn.net/dn/TRCA8/hyLcwMOf19/XJBMff3bKPC83qdQ87EsBk/img.png?width=1902&amp;amp;height=916&amp;amp;face=0_0_1902_916');&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;An Overview of Real Time Data Warehousing on Cloudera - Cloudera Blog&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Users today are asking ever more from their data warehouse. This is resulting in advancements of what is provided by the technology, and a resulting shift in the art of the possible. As an example of this, in this post we look at Real Time Data Warehousing&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.cloudera.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1628668016967&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;Why have a real-time Data Warehouse?&quot; data-og-description=&quot;Going from an infrequently updated data warehouse or data mart environment to a near real-time data warehouse has a number of benefits. Here are just five.|Going from an infrequently updated data warehouse or data mart environment to a near real-time data &quot; data-og-host=&quot;www.hvr-software.com&quot; data-og-source-url=&quot;https://www.hvr-software.com/blog/why-have-a-real-time-data-warehouse/&quot; data-og-url=&quot;https://www.hvr-software.com/blog/why-have-a-real-time-data-warehouse/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/baHZ55/hyLcunUTmX/VKDlDwvimQsgkSlmN4HhVK/img.jpg?width=1920&amp;amp;height=350&amp;amp;face=0_0_1920_350,https://scrap.kakaocdn.net/dn/cd0N1A/hyLcjmqeVr/95LG7fnGfgf7iMok1cFXeK/img.png?width=500&amp;amp;height=105&amp;amp;face=0_0_500_105&quot;&gt;&lt;a href=&quot;https://www.hvr-software.com/blog/why-have-a-real-time-data-warehouse/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.hvr-software.com/blog/why-have-a-real-time-data-warehouse/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/baHZ55/hyLcunUTmX/VKDlDwvimQsgkSlmN4HhVK/img.jpg?width=1920&amp;amp;height=350&amp;amp;face=0_0_1920_350,https://scrap.kakaocdn.net/dn/cd0N1A/hyLcjmqeVr/95LG7fnGfgf7iMok1cFXeK/img.png?width=500&amp;amp;height=105&amp;amp;face=0_0_500_105');&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;Why have a real-time Data Warehouse?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Going from an infrequently updated data warehouse or data mart environment to a near real-time data warehouse has a number of benefits. Here are just five.|Going from an infrequently updated data warehouse or data mart environment to a near real-time data&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.hvr-software.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Database</category>
      <category>adw</category>
      <category>dm</category>
      <category>dw</category>
      <category>EDW</category>
      <category>eTL</category>
      <category>RDW</category>
      <category>데이터웨어하우스란?</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/25</guid>
      <comments>https://simroot.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 11 Aug 2021 17:40:14 +0900</pubDate>
    </item>
    <item>
      <title>[DATABASE] OLTP와 OLAP의 개념과 차이</title>
      <link>https://simroot.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Database가 있으면 크게 두가지의 처리 방법이 있다. OLTP와 OLAP인데, 이 두가지의 대략적인 개념과 실 사용하는 예시를 알아보자. 먼저 이 두가지는 시스템의 개념으로 생각해볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;* OLTP : 온라인 트랜잭션 처리(Online transaction processing) &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#실시간 #트랜잭션처리 #소규모데이터처리&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;트랜잭션 지향 애플리케이션을 손쉽게 관리할 수 있도록 도와주는 정보 시스템의 한 계열이다. OLTP는 시스템이 사용자의 요청에 즉각 반응하는 처리를 가리키는 용어이며 은행 ATM기기의 트랜잭션 처리를 예로 들 수 있다. 보통 이 방법을 금융권, 전산상에서 많이 사용한다. 은행이나 증권거래같은 경우 즉각적인 반응이 매우 중요하기 때문이다.&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;이 시스템은 AWS의 RDS에 저장된다. 그러면 아마존의 RDW 어디쪽에 저장이 될까? RDS는 &lt;b&gt;MySQL, postgreSQL, MariaDB&lt;/b&gt;에 저장된다. 참고로 RDS는 Amazon Relational Database Service를 말한다.&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;br /&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;* OLAP : 온라인 분석 처리(Online Analytical Processing)&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#대화식정보분석 #데이터분석 #정보변환 #대용량데이터처리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;사용자가 동일한 데이터를 가지고 여러 기준으로, 다차원 데이터 분석을 할 수 있도록 도와준다. 의사결정 지원 시스템 중 대표적인 예라 할 수 있다. DW(Data Warehouse)같은 시스템과 연관되어서 데이터를 분석하며 적극적인 데이터의 활용을 통한 의사결정을 할 수 있게 한다. OLAP의&amp;nbsp;특성은&amp;nbsp;다음과&amp;nbsp;같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;- 다차원 정보 제공 &lt;br /&gt;다차원정보에&amp;nbsp;직접적으로&amp;nbsp;대화&amp;nbsp;형태로&amp;nbsp;분석하는&amp;nbsp;것이&amp;nbsp;OLAP의&amp;nbsp;특징이다.&amp;nbsp;보통&amp;nbsp;데이터베이스는&amp;nbsp;2차원인데,&amp;nbsp;현업에서&amp;nbsp;요구하는&amp;nbsp;것은&amp;nbsp;다차원이다.&amp;nbsp;그래서&amp;nbsp;다차원&amp;nbsp;데이터베이스를&amp;nbsp;만들고&amp;nbsp;전문화된&amp;nbsp;데이터베이스&amp;nbsp;엔진으로&amp;nbsp;정보를&amp;nbsp;추출하는&amp;nbsp;것이&amp;nbsp;OLAP이다. &lt;br /&gt;&lt;br /&gt;- 중간 매개자 없이 사용자가 직접 데이터 접근 &lt;br /&gt;OLAP는&amp;nbsp;중간&amp;nbsp;매개자가&amp;nbsp;없이&amp;nbsp;사용자가&amp;nbsp;온라인으로&amp;nbsp;접근한다.&amp;nbsp;홈뱅킹,&amp;nbsp;VOD,또는&amp;nbsp;TV쇼핑&amp;nbsp;등에&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;- 대화형태 정보분석 &lt;br /&gt;OLAP는&amp;nbsp;대화&amp;nbsp;형태로&amp;nbsp;정보가&amp;nbsp;분석된다.&amp;nbsp;대화로&amp;nbsp;진행되기&amp;nbsp;때문에&amp;nbsp;사용자는&amp;nbsp;명령을&amp;nbsp;하고&amp;nbsp;오래&amp;nbsp;기다리지&amp;nbsp;않는다.&amp;nbsp;따라서&amp;nbsp;신속성이&amp;nbsp;중요하다.&amp;nbsp;사용자가&amp;nbsp;질의했을&amp;nbsp;때&amp;nbsp;신속하게&amp;nbsp;처리해야&amp;nbsp;한다. &lt;br /&gt;&lt;br /&gt;- 의사 결정지원 &lt;br /&gt;질의,&amp;nbsp;목표탐색,&amp;nbsp;원인-결과&amp;nbsp;분석 &lt;br /&gt;보통&amp;nbsp;데이터베이스는&amp;nbsp;2차원인데,&amp;nbsp;현업에서&amp;nbsp;요구하는&amp;nbsp;것은&amp;nbsp;다차원이다.&amp;nbsp;그래서&amp;nbsp;다차원&amp;nbsp;데이터베이스를&amp;nbsp;만들고&amp;nbsp;전문화된&amp;nbsp;데이터베이스&amp;nbsp;엔진으로&amp;nbsp;정보를&amp;nbsp;추출하는&amp;nbsp;것이&amp;nbsp;OLAP이다.&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;OLAP는 AWS의 &lt;b&gt;Redshift&lt;/b&gt;을 사용한다. 이번에 새로운 프로젝트를 준비하면서 Redshift에 대해서도 스터디하고 정리한 내용을 업로드 해볼 예정이다. 아직까지는 프로젝트의 큰 틀과 흐름을 잡고있는데 &quot;AWS based EDW 구축&quot;이라는 주제를 한번 고민해봐야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;733&quot; data-origin-height=&quot;236&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df5nU8/btrbpQAttzm/wpQOES0GADETaO3YweM5Xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df5nU8/btrbpQAttzm/wpQOES0GADETaO3YweM5Xk/img.png&quot; data-alt=&quot;OLTP와 OLAP의 차이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df5nU8/btrbpQAttzm/wpQOES0GADETaO3YweM5Xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf5nU8%2FbtrbpQAttzm%2FwpQOES0GADETaO3YweM5Xk%2Fimg.png&quot; data-origin-width=&quot;733&quot; data-origin-height=&quot;236&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;OLTP와 OLAP의 차이&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;참고자료&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OLTP : 위키백과&lt;/p&gt;
&lt;figure id=&quot;og_1628329666948&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;온라인 트랜잭션 처리 - 위키백과, 우리 모두의 백과사전&quot; data-og-description=&quot;&quot; data-og-host=&quot;ko.wikipedia.org&quot; data-og-source-url=&quot;https://ko.wikipedia.org/wiki/%EC%98%A8%EB%9D%BC%EC%9D%B8_%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98_%EC%B2%98%EB%A6%AC&quot; data-og-url=&quot;https://ko.wikipedia.org/wiki/%EC%98%A8%EB%9D%BC%EC%9D%B8_%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98_%EC%B2%98%EB%A6%AC&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%98%A8%EB%9D%BC%EC%9D%B8_%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98_%EC%B2%98%EB%A6%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.wikipedia.org/wiki/%EC%98%A8%EB%9D%BC%EC%9D%B8_%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98_%EC%B2%98%EB%A6%AC&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;온라인 트랜잭션 처리 - 위키백과, 우리 모두의 백과사전&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;ko.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OLAP : 위키백과&lt;/p&gt;
&lt;figure id=&quot;og_1628329674340&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;온라인 분석 처리 - 위키백과, 우리 모두의 백과사전&quot; data-og-description=&quot;온라인 분석 처리(Online Analytical Processing, OLAP)는 의사결정 지원 시스템 가운데 대표적인 예로, 사용자가 동일한 데이터를 여러 기준을 이용하는 다양한 방식으로 바라보면서 다차원 데이터 분석&quot; data-og-host=&quot;ko.wikipedia.org&quot; data-og-source-url=&quot;https://ko.wikipedia.org/wiki/%EC%98%A8%EB%9D%BC%EC%9D%B8_%EB%B6%84%EC%84%9D_%EC%B2%98%EB%A6%AC&quot; data-og-url=&quot;https://ko.wikipedia.org/wiki/%EC%98%A8%EB%9D%BC%EC%9D%B8_%EB%B6%84%EC%84%9D_%EC%B2%98%EB%A6%AC&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%98%A8%EB%9D%BC%EC%9D%B8_%EB%B6%84%EC%84%9D_%EC%B2%98%EB%A6%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.wikipedia.org/wiki/%EC%98%A8%EB%9D%BC%EC%9D%B8_%EB%B6%84%EC%84%9D_%EC%B2%98%EB%A6%AC&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;온라인 분석 처리 - 위키백과, 우리 모두의 백과사전&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;온라인 분석 처리(Online Analytical Processing, OLAP)는 의사결정 지원 시스템 가운데 대표적인 예로, 사용자가 동일한 데이터를 여러 기준을 이용하는 다양한 방식으로 바라보면서 다차원 데이터 분석&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ko.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OLTP, OLAP 차이&lt;/p&gt;
&lt;figure id=&quot;og_1628332871851&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;Difference between OLAP and OLTP&quot; data-og-description=&quot;Difference between OLAP and OLTP OLAP &amp;nbsp;stands for On-Line Analytical Processing. It is used for analysis of database information from multiple database systems at one time such as sales analysis and forecasting, market research, budgeting and etc. Data Wa&quot; data-og-host=&quot;www.tutorialspoint.com&quot; data-og-source-url=&quot;https://www.tutorialspoint.com/difference-between-olap-and-oltp&quot; data-og-url=&quot;https://www.tutorialspoint.com/difference-between-olap-and-oltp&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.tutorialspoint.com/difference-between-olap-and-oltp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.tutorialspoint.com/difference-between-olap-and-oltp&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;Difference between OLAP and OLTP&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Difference between OLAP and OLTP OLAP &amp;nbsp;stands for On-Line Analytical Processing. It is used for analysis of database information from multiple database systems at one time such as sales analysis and forecasting, market research, budgeting and etc. Data Wa&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.tutorialspoint.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;</description>
      <category>Database</category>
      <category>OLAP(온라인 분석 처리)</category>
      <category>OLTP(온라인 트랜잭션 처리)</category>
      <category>OLTP와 OLAP의 개념과 차이</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/24</guid>
      <comments>https://simroot.tistory.com/24#entry24comment</comments>
      <pubDate>Sat, 7 Aug 2021 20:04:37 +0900</pubDate>
    </item>
    <item>
      <title>Anaconda navigator를 이용한 Python 실습환경 만들기 - JupyterLab</title>
      <link>https://simroot.tistory.com/23</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;여태까지는 python을 하기위한 도구로 MS의 vscode나 Jetbrains의 Pycharm 또는 쉘에서 프로그래밍을 해봤는데, 파이썬을 기초부터 다시 시작하고자 Anaconda navigator를 이용해서 실습환경을 만드려고 한다.&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;보통 프로그래밍을 할 때는 가상머신 비슷하게 가상환경을 만들어놓고 작업한다. 그리고 문제가 되면 가상환경만 없애주면 된다. 또는 다른 환경을 만들어 똑같은 코드로 실행할 수 있다. 아나콘다 네비게이터는 웹 UI로 작업할 수 있어 Ctrl+C,V도 쉽게할 수 있다. 그리고 찐 파이썬은 아니니까 실제로 동작하는 프로그램은 안되지만, 실습정도는 해볼 수 있기 때문에 프로그램을 처음 접하기에 좋다.&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;먼저 구글링해서 anaconda 홈페이지에서 설치 파일을 다운로드한다.&lt;/p&gt;
&lt;figure id=&quot;og_1624867580829&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;Anaconda | The World's Most Popular Data Science Platform&quot; data-og-description=&quot;Anaconda is the birthplace of Python data science. We are a movement of data scientists, data-driven enterprises, and open source communities.&quot; data-og-host=&quot;www.anaconda.com&quot; data-og-source-url=&quot;https://www.anaconda.com/&quot; data-og-url=&quot;https://www.anaconda.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xFQWt/hyKI8xgBu1/ZGfrz5YK5BK3k8kyg5X27K/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/zBCaQ/hyKHJy5sww/fS2sBkX9k0KSivUxSnGrhK/img.jpg?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418&quot;&gt;&lt;a href=&quot;https://www.anaconda.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.anaconda.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xFQWt/hyKI8xgBu1/ZGfrz5YK5BK3k8kyg5X27K/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/zBCaQ/hyKHJy5sww/fS2sBkX9k0KSivUxSnGrhK/img.jpg?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418');&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;Anaconda | The World's Most Popular Data Science Platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Anaconda is the birthplace of Python data science. We are a movement of data scientists, data-driven enterprises, and open source communities.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.anaconda.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홈페이지상의 get started 클릭 -&amp;gt; Download Anaconda installers 클릭 -&amp;gt; 기기에 맞는 다운로드 클릭하여 다운받음.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;588&quot; data-filename=&quot;Screenshot from 2021-06-28 17-07-21.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGzuBR/btq8mUc69dB/QmP7c1iLYGeLQsKUGZCk7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGzuBR/btq8mUc69dB/QmP7c1iLYGeLQsKUGZCk7k/img.png&quot; data-alt=&quot;Download Anaconda installers&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGzuBR/btq8mUc69dB/QmP7c1iLYGeLQsKUGZCk7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGzuBR%2Fbtq8mUc69dB%2FQmP7c1iLYGeLQsKUGZCk7k%2Fimg.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;588&quot; data-filename=&quot;Screenshot from 2021-06-28 17-07-21.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Download Anaconda installers&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1366&quot; data-origin-height=&quot;624&quot; data-filename=&quot;Screenshot from 2021-06-28 17-07-33.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o8fQV/btq8mk4cj08/nurNBifTH7QvfUtD4Ayh6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o8fQV/btq8mk4cj08/nurNBifTH7QvfUtD4Ayh6K/img.png&quot; data-alt=&quot;Anaconda Installers&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o8fQV/btq8mk4cj08/nurNBifTH7QvfUtD4Ayh6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo8fQV%2Fbtq8mk4cj08%2FnurNBifTH7QvfUtD4Ayh6K%2Fimg.png&quot; data-origin-width=&quot;1366&quot; data-origin-height=&quot;624&quot; data-filename=&quot;Screenshot from 2021-06-28 17-07-33.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Anaconda Installers&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;참고로 나는 호스트를 Linux를 사용하고 있기 때문에 리눅스 맨 첫번째 64bit installer버전을 다운로드 받았다. 받는데 시간이 좀 걸리는데, 다운로드가 완료된 후 다운로드폴더에 저장이 되면 해당 폴더로 이동해준 뒤 파일의 실행권한을 준다.&lt;/p&gt;
&lt;pre id=&quot;code_1624868033267&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user@test:~/Downloads$ sudo chmod +x Anaconda3-2021.05-Linux-x86_64.sh &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행권한이 생겼으면 파일을 실행해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1624868061020&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user@test:~/Downloads$ ./Anaconda3-2021.05-Linux-x86_64.sh &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 실행을 해주면 영어로 길~게 글이 적혀있다. 엔터를 쳐서 넘겨준다. 그러고 나면 yes/no 확인 프롬프트가 뜨는데 yes를 입력해준다. 조금 시간이 더 지나면 init 어쩌고 하면서 yes/no 가 표시되는데, 이 init은 yes로 설정해주도록 하자.&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_1624868244849&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user@test:~/Downloads$ bash
// bash를 입력하면 아래와 같이 표기된다.

(base) user@test:~$ anaconda-navigator&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 초록색 원 모양의 아이콘이 뜨면서 아나콘다 네비게이터가 실행된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1825&quot; data-origin-height=&quot;886&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUESuh/btq8lUdAEHv/Qg3o7SA8eduFgBNfM6ZJS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUESuh/btq8lUdAEHv/Qg3o7SA8eduFgBNfM6ZJS1/img.png&quot; data-alt=&quot;anaconda navigator 대시보드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUESuh/btq8lUdAEHv/Qg3o7SA8eduFgBNfM6ZJS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUESuh%2Fbtq8lUdAEHv%2FQg3o7SA8eduFgBNfM6ZJS1%2Fimg.png&quot; data-origin-width=&quot;1825&quot; data-origin-height=&quot;886&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;anaconda navigator 대시보드&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;이제 쉘 창은 숨겨두고, Environments 메뉴를 클릭하면 왼쪽 하단에 Create를 눌러준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 요약 : environments &amp;rarr; create &amp;rarr; 원하는 &lt;span&gt;이름으로 지정&lt;/span&gt;(3.8&lt;span&gt;버전&lt;/span&gt;) &amp;ndash; &lt;span&gt;생성&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1850&quot; data-origin-height=&quot;1039&quot; data-filename=&quot;Screenshot from 2021-06-28 17-20-20.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2ly3A/btq8mZFsPnq/6Yg9uiijaLnem6opuSwf7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2ly3A/btq8mZFsPnq/6Yg9uiijaLnem6opuSwf7K/img.png&quot; data-alt=&quot;Environments Create&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2ly3A/btq8mZFsPnq/6Yg9uiijaLnem6opuSwf7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2ly3A%2Fbtq8mZFsPnq%2F6Yg9uiijaLnem6opuSwf7K%2Fimg.png&quot; data-origin-width=&quot;1850&quot; data-origin-height=&quot;1039&quot; data-filename=&quot;Screenshot from 2021-06-28 17-20-20.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Environments Create&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 버전과 함께 이름을 내가 원하는대로 지정해준다. 나는 기본값인 파이썬 3.8 버전으로 만들어 준 후 다시 Home으로 와서 JupyterLab을 Install해줬다. Install이 완료되면 Lanch라는 이름으로 바뀌는데, 그걸 클릭해주면 주피터랩이 웹 브라우저로 실행된다. JupyterLab은 JupyterNotebook에서 제공하는 기능도 들어있어서 이 것으로 설치해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;705&quot; data-filename=&quot;Screenshot from 2021-06-28 17-24-00.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqjt5W/btq8cRwbQuI/XaQksbuUkboj65C6jg5OCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqjt5W/btq8cRwbQuI/XaQksbuUkboj65C6jg5OCK/img.png&quot; data-alt=&quot;Notebook - Python3 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqjt5W/btq8cRwbQuI/XaQksbuUkboj65C6jg5OCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcqjt5W%2Fbtq8cRwbQuI%2FXaQksbuUkboj65C6jg5OCK%2Fimg.png&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;705&quot; data-filename=&quot;Screenshot from 2021-06-28 17-24-00.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Notebook - Python3 클릭&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;웹 서버가 하나 띄워진 것이라고 생각할 수 있다. 그 밑에는 파이썬 커널이 동작하고 있고 웹 서버를 띄워 연동되어져 있는 상태다.&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;Notebook의 Python3를 눌러 그 안에서 실습을 진행할 수 있다. 만들게되면 확장자가 ipynb으로 만들어지는데 파이썬 확장자가 아니기 때문에 이 화면에서만 작업을 할 수 있다. 그래도 노션처럼 편리하게 작성할 수 있고 실습해볼 수 있다. 폴더를 통해 경로도 만들어놓을 수 있고 이름도 지정해서 자유롭게 실습해보면 된다. 실제 동작을 위한 프로그래밍은 vscode나 pycharm으로 하는게 더 좋지만, 프로그램을 처음 접하기에는 이 환경도 괜찮다. 그리고 옛날에는 아나콘다 네비게이터에서 pycharm이 안 됐는데 이제는 지원이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;238&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5u07g/btq8iwSmIsi/Mf0NdNfqV1aq3PHeuXMsQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5u07g/btq8iwSmIsi/Mf0NdNfqV1aq3PHeuXMsQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5u07g/btq8iwSmIsi/Mf0NdNfqV1aq3PHeuXMsQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5u07g%2Fbtq8iwSmIsi%2FMf0NdNfqV1aq3PHeuXMsQ1%2Fimg.png&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;238&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Desktop/week1/ &lt;span&gt;폴더경로에서 &lt;/span&gt;python3 &lt;span&gt;생성. &lt;/span&gt;day1&lt;span&gt;으로 &lt;/span&gt;rename&lt;span&gt;해줌&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보이는 네모칸에 프로그래밍을 해볼 수 있다. 우측상단에 Code라고 되어있으면 코드를 작성할 수 있으며 m을 누르면 마크다운으로 바뀌면서 주석도 쓸 수 있다. 이러한 마크다운을 쓰는 방법은 아래 깃허브 링크를 통해 상세하게 확인해볼 수 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1624869109171&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;마크다운(Markdown) 사용법&quot; data-og-description=&quot;마크다운(Markdown) 사용법. GitHub Gist: instantly share code, notes, and snippets.&quot; data-og-host=&quot;gist.github.com&quot; data-og-source-url=&quot;https://gist.github.com/ihoneymon/652be052a0727ad59601&quot; data-og-url=&quot;https://gist.github.com/ihoneymon/652be052a0727ad59601&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c0KdT2/hyKIWRocIG/fEEFW8Z4Iy6Q2lkiXcHcJ1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/cI2AyP/hyKHKZlEbL/Ho63JpV6ab0eq3Phe5B0qK/img.jpg?width=1024&amp;amp;height=576&amp;amp;face=0_0_1024_576,https://scrap.kakaocdn.net/dn/Bu9z9/hyKHPzxbM6/hdLkUD8xpsHa9N9U3yQ201/img.jpg?width=1024&amp;amp;height=576&amp;amp;face=0_0_1024_576&quot;&gt;&lt;a href=&quot;https://gist.github.com/ihoneymon/652be052a0727ad59601&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gist.github.com/ihoneymon/652be052a0727ad59601&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c0KdT2/hyKIWRocIG/fEEFW8Z4Iy6Q2lkiXcHcJ1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/cI2AyP/hyKHKZlEbL/Ho63JpV6ab0eq3Phe5B0qK/img.jpg?width=1024&amp;amp;height=576&amp;amp;face=0_0_1024_576,https://scrap.kakaocdn.net/dn/Bu9z9/hyKHPzxbM6/hdLkUD8xpsHa9N9U3yQ201/img.jpg?width=1024&amp;amp;height=576&amp;amp;face=0_0_1024_576');&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;마크다운(Markdown) 사용법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;마크다운(Markdown) 사용법. GitHub Gist: instantly share code, notes, and snippets.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gist.github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 동작 방법은 다음과 같다. 참고로 하나의 네모칸(입력하는곳)을 셀이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 컨트롤 엔터 &lt;/span&gt;: &lt;span&gt;셀이 동작하고 나면 숫자로 바뀐다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 쉬프트 엔터 &lt;/span&gt;: &lt;span&gt;실행이 되면서 밑에라인이 추가된다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 셀 지우기 : dd&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 셀 위로 추가 : a (above)&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;gt; 그럼 이제 이 환경으로 프로그래밍을 시작해보자!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;286&quot; data-filename=&quot;Screenshot from 2021-06-28 17-35-08.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EdGnP/btq8gypDUWG/NXfIujatEOt9kOYvVlKyFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EdGnP/btq8gypDUWG/NXfIujatEOt9kOYvVlKyFK/img.png&quot; data-alt=&quot;hello world!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EdGnP/btq8gypDUWG/NXfIujatEOt9kOYvVlKyFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEdGnP%2Fbtq8gypDUWG%2FNXfIujatEOt9kOYvVlKyFK%2Fimg.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;286&quot; data-filename=&quot;Screenshot from 2021-06-28 17-35-08.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;hello world!&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;서적 추천&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;점프 투 파이썬&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파이썬 &lt;/span&gt;for Beginner&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;처음 시작하는 파이썬 : 단점은 딱딱하고 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파이썬을 이용한 컴퓨터 과학 입문 &lt;/span&gt;: &lt;span&gt;체계적으로 배우고싶다면 이 책을 추천&lt;/span&gt;. &lt;span&gt;작년에 나왔는데&amp;nbsp;&lt;/span&gt;&lt;span&gt;내용이 어려움.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;파이썬&lt;/span&gt;3 &lt;span&gt;바이블 &lt;/span&gt;: 2013&lt;span&gt;년도에 나온 책. 욕은 많이 먹고있지만 깊이가 깊음.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python</category>
      <category>Anaconda navigator를 이용한 Python 실습환경 만들기</category>
      <category>jupyterlab</category>
      <category>마크다운 사용법</category>
      <category>점프투파이썬</category>
      <category>파이썬 환경구축</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/23</guid>
      <comments>https://simroot.tistory.com/23#entry23comment</comments>
      <pubDate>Mon, 28 Jun 2021 17:38:16 +0900</pubDate>
    </item>
    <item>
      <title>쿠버네티스 클러스터의 구성요소는? 쿠버네티스 아키텍처에 대하여</title>
      <link>https://simroot.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 클러스터의 구성 요소는 크게 세가지가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컨트롤 플레인(Control Plane)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 노드(Node)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 애드온(Addons)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 쿠버네티스 컨트롤러 매니저 이미지를 보며 항목별로 알아보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;585&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bplhlY/btq76zhBSX9/kxTCzCjKx9d4THkbJXfGB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bplhlY/btq76zhBSX9/kxTCzCjKx9d4THkbJXfGB0/img.png&quot; data-alt=&quot;쿠버네티스 컨트롤러 매니저&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bplhlY/btq76zhBSX9/kxTCzCjKx9d4THkbJXfGB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbplhlY%2Fbtq76zhBSX9%2FkxTCzCjKx9d4THkbJXfGB0%2Fimg.png&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;585&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쿠버네티스 컨트롤러 매니저&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;1) Control Plane(컨트롤 플레인)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 박스는 컨트롤플레인으로, 클러스터의 전체를 제어한다. 클러스터에 대한 전반적인 결정을 수행하고 클러스터 이벤트를 감지하고 대응하는 일을 한다. ex. 스케줄링 등&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) API 서버(kube-apiserver)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 클러스터의 모든 구성요소들과 메세지를 주고받기 위해서는 항상 컨트롤 플레인의 api서버를 지나가야 한다. 컨트롤플레인에 대한 프론트엔드를 담당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) 키-값 저장소(etcd) [엣씨디]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 클러스터의 모든 정보데이터들을 저장하는 일관성과 고가용성을 지원하는 키-값 저장소이다. k8s의 모든 정보를 가지고 있기 때문에 DB라고 보면 된다. 그리고 발음이 특이해서 옆에 따로 적어봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(3) 쿠버네티스 스케줄러(kube-scheduler)&lt;/b&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;&lt;b&gt;(4) 쿠버네티스 컨트롤러 관리자(kube-controller-manager)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림의 c-m에 해당한다. 컨트롤러는 API서버를 통해 클러스터의 상태를 감시하고 필요한 상태로 이행하는 기능을 가진다. 컨트롤 관리자의 종류는 다음과 같다&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;- 노드 컨트롤러(Node controller) : 노드를 관리하며 노드가 다운 되었을 때 알림과 대응을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 레플리케이션(Replication) 컨트롤러 : 복제 컨트롤러를 사용하는 모든 오브젝트를 관리하며 알맞은 수의 파드를 유지하는 기능을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 엔드포인트(Endpoint) 컨트롤러 : 서비스와 파드를 연결한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서비스 어카운트(Service Account) 및 토큰 컨트롤러(Token Controller) : 쿠버네티스의 네임스페이스, 계정, 토큰을 담당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(5) 클라우드 컨트롤러 관리자(cloud-controller-manager)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림의 c-c-m에 해당한다. 클라우드를 제공하는 업체의 기능과 클라우드에서 동작하는 쿠버네티스 구성 요소와 상호작용할 수 있도록 하는 컨트롤러 관리자이다. 쿠버네티스 1.6버전에서 도입된 알파 기능이다. 초반에는 이게 없어서 api와 cloud provider api가 직접 통신했다. 클라우드와 상호작용하는것이라고 생각할 수 있다. 종류는 다음과 같다.&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;/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;클라우드 컨트롤러 관리자는 클라우드 공급자(AWS, Azure, GCP, OCI 등)의 의존성을 갖는다.&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;size18&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;2) Node(노드)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드는 쿠버네티스의 컨테이너 런타임 환경을 제공하며 동작중인 파드를 유지하는 기능을 한다. 예전에 불리던 이름으로는 미니언(Minion), 워커(Worker)노드라고 불렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) kubelet&lt;/b&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;&lt;b&gt;(2) 쿠버네티스 프록시(kube-proxy)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 레벨의 네트워크 규칙을 구성하고 외부 연결 포워딩을 담당한다. 쿠버네티스의 서비스 추상화가 가능하도록 한다. 쉽게말해서 pod(컨테이너)에게 네트워크를 제공해주는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(3) 컨테이너 런타임&lt;/b&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;- Docker -&amp;gt; 1.20버전부터는 더이상 지원하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- containerd -&amp;gt; 도커는 이것을 사용하여 컨테이너를 만든다.(위의 지원중단과 헷갈리지 말기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CRI-O&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Kubernetes CRI(Container Runtime Interface)를 구현한 모든 런타임&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;size18&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;3) Addon(애드온)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 클러스터에 추가할 수 있는 확장기능을 제공해준다. 주요 애드온 구성요소로는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클러스터 DNS : 쿠버네티스 클러스터 내에 여러 오브젝트(파드,컨테이너,서비스 등)에 대한 DNS 레코드 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 대시보드 : k8s 클러스터를 위한 웹 기반 인터페이스 제공&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;/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;size18&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;4) 쿠버네티스 API&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) API 버전 규칙&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A. 알파 버전 API&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 버전은 버그가 있을 수도 있으며 언제든 공지 없이 중단될 수 있다. 버전 이름에 alpha가 포함되어있다.&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;B. 베타 버전 API&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드가 잘 테스트되어있어서 이 기능을 활성화해도 안전하다. 전반적인 기능에 대한 기술지원이 중단되지 않는다. 버전 이름에 beta가 포함되어 있다.&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;C. 안정화 버전 API&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 이름이 v?? 이거나 ??(정수) 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) API 그룹&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코어 그룹&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코어 이외 그룹&lt;/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;&amp;lt;참고자료&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1624858879530&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;쿠버네티스 컴포넌트&quot; data-og-description=&quot;쿠버네티스 클러스터는 컴퓨터 집합인 노드 컴포넌트와 컨트롤 플레인 컴포넌트로 구성된다.&quot; data-og-host=&quot;kubernetes.io&quot; data-og-source-url=&quot;https://kubernetes.io/ko/docs/concepts/overview/components/&quot; data-og-url=&quot;https://kubernetes.io/ko/docs/concepts/overview/components/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/czMWPd/hyKHEEIqGh/GNk2VOAXDfHhWOPABHUBtk/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/5qac5/hyKIXCEAYw/wM8xY1arrRjNNpUpso0zzk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/concepts/overview/components/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kubernetes.io/ko/docs/concepts/overview/components/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/czMWPd/hyKHEEIqGh/GNk2VOAXDfHhWOPABHUBtk/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/5qac5/hyKIXCEAYw/wM8xY1arrRjNNpUpso0zzk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&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;쿠버네티스 컴포넌트&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스 클러스터는 컴퓨터 집합인 노드 컴포넌트와 컨트롤 플레인 컴포넌트로 구성된다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kubernetes.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Kubernetes</category>
      <category>쿠버네티스 아키텍처</category>
      <category>쿠버네티스 클러스터의 구성요소</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/22</guid>
      <comments>https://simroot.tistory.com/22#entry22comment</comments>
      <pubDate>Mon, 28 Jun 2021 14:40:26 +0900</pubDate>
    </item>
    <item>
      <title>Vagrant를 이용하여 쿠버네티스 클러스터 구성에서 노드 제거 및 추가하기</title>
      <link>https://simroot.tistory.com/21</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;쿠버네티스 클러스터를 구성하다가 node가 많아지면 복잡하고 골치아파진다. 지난번에 테스트 한 환경을 배경으로 클러스터의 노드를 제거 및 추가하는 방법을 적어본다. 사전에 준비해야 할 환경은 master, node1, node2가 이루어져 있는 환경이 필요하다. 아래 글 외에도 kubernetes 카테고리의 글들을 참고하면 된다.&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;lt;지난 글 바로가기&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1624084327850&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;[쿠버네티스] Vagrant를 이용한 kubeadm 클러스터 업그레이드(Version에 대하여)&quot; data-og-description=&quot;이번에는 Vagrant를 이용한 kubeadm 클러스터 버전을 업그레이드를 해볼 예정이다. 쿠버네티스 공식 홈페이지에 보면 관련 명령어를 다 확인해볼 수 있다. 오늘 새벽에 최신 버전이 나와서 쿠버네티&quot; data-og-host=&quot;simroot.tistory.com&quot; data-og-source-url=&quot;https://simroot.tistory.com/20&quot; data-og-url=&quot;https://simroot.tistory.com/20&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/NSp1Q/hyKByEIMjy/KSreTzOS3Wn8KPEZ7X0JA1/img.png?width=800&amp;amp;height=288&amp;amp;face=0_0_800_288,https://scrap.kakaocdn.net/dn/b5Qshr/hyKCLoTRLl/VA45UkoKy6a1BB9FQzjyK0/img.png?width=800&amp;amp;height=288&amp;amp;face=0_0_800_288,https://scrap.kakaocdn.net/dn/G4GMi/hyKCMuz4Xi/7GzdFMWfm7D4Pdp4Tz5sG1/img.png?width=1830&amp;amp;height=661&amp;amp;face=0_0_1830_661&quot;&gt;&lt;a href=&quot;https://simroot.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://simroot.tistory.com/20&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/NSp1Q/hyKByEIMjy/KSreTzOS3Wn8KPEZ7X0JA1/img.png?width=800&amp;amp;height=288&amp;amp;face=0_0_800_288,https://scrap.kakaocdn.net/dn/b5Qshr/hyKCLoTRLl/VA45UkoKy6a1BB9FQzjyK0/img.png?width=800&amp;amp;height=288&amp;amp;face=0_0_800_288,https://scrap.kakaocdn.net/dn/G4GMi/hyKCMuz4Xi/7GzdFMWfm7D4Pdp4Tz5sG1/img.png?width=1830&amp;amp;height=661&amp;amp;face=0_0_1830_661');&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;[쿠버네티스] Vagrant를 이용한 kubeadm 클러스터 업그레이드(Version에 대하여)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번에는 Vagrant를 이용한 kubeadm 클러스터 버전을 업그레이드를 해볼 예정이다. 쿠버네티스 공식 홈페이지에 보면 관련 명령어를 다 확인해볼 수 있다. 오늘 새벽에 최신 버전이 나와서 쿠버네티&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;simroot.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;노드 제거&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;888&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MWT7G/btq7Ez2nw4c/42CeYFsQ1Ku3mlTmOwaEkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MWT7G/btq7Ez2nw4c/42CeYFsQ1Ku3mlTmOwaEkK/img.png&quot; data-alt=&quot;kubernetes - Clean up&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MWT7G/btq7Ez2nw4c/42CeYFsQ1Ku3mlTmOwaEkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMWT7G%2Fbtq7Ez2nw4c%2F42CeYFsQ1Ku3mlTmOwaEkK%2Fimg.png&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;888&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;kubernetes - Clean up&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;공식 홈페이지에서 제거하기 위한 절차가 잘 작성되어있다. 명령어를 기준으로 작성해나가려고 하는데, 이전에 갖춰져있어야 할 환경과 진행 순서는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1624084616598&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kvagrant@kube-control1:~$ kubectl get nodes
NAME            STATUS   ROLES    AGE    VERSION 
kube-control1   Ready    master   151m   v1.19.11 
kube-node1      Ready    &amp;lt;none&amp;gt;   113m   v1.19.11 
kube-node2      Ready    &amp;lt;none&amp;gt;   122m   v1.19.11&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;1. kubeadm reset부터 시작(작업내용 초기화) -&amp;gt; 이 때 여기에 있던 kubelet들이 다 없어진다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;2. 노드 1개를 제거한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 초기화&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;kube-node2를 제거해보도록 하자. ssh 원격으로 접속한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1624084780967&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ ssh vagrant@kube-node2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;노드를 제거하기 전에 kubeadm이 설치한 상태를&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;reset&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;한다. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;reset&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;은 다시 작업했던 것들을 초기화하는 것이다. 그리고&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt; iptables를 재설정하려면 다음 명령어도 진행해야하는데, 사용자 계정이라 permission 에러가 떠서 root 권한으로 명령을 실행한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1624084892438&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-node2:~$ sudo kubeadm reset

vagrant@kube-node2:~$ sudo -i
root@kube-node2:~$ iptables -F &amp;amp;&amp;amp; iptables -t nat -F &amp;amp;&amp;amp; iptables -t mangle -F &amp;amp;&amp;amp; iptables -X 
root@kube-node2:~# ipvsadm -C

root@kube-node2:~# exit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;이제 master node인 kube-control1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;에서&lt;span&gt; 확인해보면 Not R&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;eady&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;가 표시된다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 이 상태에서 kube-node2를 제거한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1624085274079&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION 
kube-control1 Ready master 3h35m v1.19.11 
kube-node1 Ready &amp;lt;none&amp;gt; 178m v1.19.11 
kube-node2 NotReady &amp;lt;none&amp;gt; 3h7m v1.19.11 &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;2. 제거&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kubectl delete 명령을 이용해 노드를 제거하고 exit 해서 호스트로 이동한다. 호스트에서 vagrant status를 확인해봐도 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1624085345774&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ kubectl delete node kube-node2 
node &quot;kube-node2&quot; deleted 

vagrant@kube-control1:~$ exit &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;이후 다시 Vagrant를 이용해서 클러스터 추가를 하기 위해서는 vagrant reload를 해야한다.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&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;이 작업에서는 다시 join을 해줘야하기 때문에 토큰값과 해시값이 필요하다. 먼저 호스트에서 vagrant를 reload해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1624085723067&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user@test:~/vagrant/kubernetes$ vagrant reload kube-node2&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_1624085768274&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user@test:~/vagrant/kubernetes$ vagrant ssh kube-control1
vagrant@kube-control1:~$ ssh vagrant@kube-node2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;master node인 kube-control1에서 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;토큰과 해쉬값을 확인하여 따로 메모해둔다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1624085846108&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ kubeadm token list
// token 확인 명령어&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지난시간 포스팅했듯 토큰값은 24시간이 지나면 사라지기 때문에 list를 해도 조회가 되지 않는다면 kubeadm token create를 해서 생성해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1624085874214&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2&amp;gt;/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' 
// hash값 확인 명령어 &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토큰값과 해시값이 확인되었으면 &lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;token&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;hash부분에 값을&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;&amp;nbsp;넣고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;node2로 들어가&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt; 연결해준다(join)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-contrast=&quot;auto&quot;&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;kubeadm&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;--&lt;/span&gt;&lt;span&gt;control-plane-endpoint&lt;/span&gt;&lt;span&gt;&amp;gt;:6443 --&lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;&amp;gt; --&lt;/span&gt;&lt;span&gt;discovery-token-ca-cert-hash&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;hash&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1624085926270&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ ssh vagrant@kube-node2

vagrant@kube-node2:~$ sudo kubeadm join 192.168.100.11:6443 --token 3quz9~~~~nfyc6exg \ 
--discovery-token-ca-cert-hash sha256:5078ade3213814~~~~~4fe31d8~~~~~~~fa857203278a0ce8405 &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;이후 다시 master node에서 확인해보면 클러스터 구성에 추가됨을 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1624086105686&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION 
kube-control1 Ready master 50m v1.19.11 
kube-node1 Ready &amp;lt;none&amp;gt; 29m v1.19.11 
kube-node2 Ready &amp;lt;none&amp;gt; 105s v1.19.11 &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;참고로 쉘에서 TAB 자동완성이 잘 되지 않으면 아래 명령어를 사용하여 구성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1624086223880&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source &amp;lt;(kubectl completion bash)
echo &quot;source &amp;lt;(kubectl completion bash)&quot; &amp;gt;&amp;gt; ~/.bashrc&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;* 출처 및 참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1624084199015&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;Creating a cluster with kubeadm&quot; data-og-description=&quot;Using kubeadm, you can create a minimum viable Kubernetes cluster that conforms to best practices. In fact, you can use kubeadm to set up a cluster that will pass the Kubernetes Conformance tests. kubeadm also supports other cluster lifecycle functions, su&quot; data-og-host=&quot;kubernetes.io&quot; data-og-source-url=&quot;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#join-nodes&quot; data-og-url=&quot;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gNl6q/hyKCGgPlo2/XRoAi299HQtiMGKswgKctK/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/ctCcDo/hyKBBg849v/b0FPkraqlR35Schb4DaBMk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/VHLH3/hyKBMQvwgp/warWqSlxtBF3DQUGF3DIak/img.png?width=1292&amp;amp;height=1475&amp;amp;face=0_0_1292_1475&quot;&gt;&lt;a href=&quot;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#join-nodes&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#join-nodes&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gNl6q/hyKCGgPlo2/XRoAi299HQtiMGKswgKctK/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/ctCcDo/hyKBBg849v/b0FPkraqlR35Schb4DaBMk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/VHLH3/hyKBMQvwgp/warWqSlxtBF3DQUGF3DIak/img.png?width=1292&amp;amp;height=1475&amp;amp;face=0_0_1292_1475');&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;Creating a cluster with kubeadm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Using kubeadm, you can create a minimum viable Kubernetes cluster that conforms to best practices. In fact, you can use kubeadm to set up a cluster that will pass the Kubernetes Conformance tests. kubeadm also supports other cluster lifecycle functions, su&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kubernetes.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Kubernetes</category>
      <category>Vagrant를 이용하여 쿠버네티스 클러스터 구성에서 노드 제거 및 추가하기</category>
      <category>쿠버네티스 node추가</category>
      <category>쿠버네티스 클러스터 제거</category>
      <category>쿠버네티스 클러스터 추가</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/21</guid>
      <comments>https://simroot.tistory.com/21#entry21comment</comments>
      <pubDate>Sat, 19 Jun 2021 16:05:39 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스] Vagrant를 이용한 kubeadm 클러스터 업그레이드(Version에 대하여)</title>
      <link>https://simroot.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 Vagrant를 이용한 kubeadm 클러스터 버전을 업그레이드를 해볼 예정이다. 쿠버네티스 공식 홈페이지에 보면 관련 명령어를 다 확인해볼 수 있다. 오늘 새벽에 최신 버전이 나와서 쿠버네티스의 최신 버전은 현재 기준으로 v1.21.2-00가 최신 버전이다.&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&gt;아래에 보면 노드 드레이닝&lt;/span&gt;(draining)&lt;span&gt;에 대한 내용이 등장한다&lt;/span&gt;. drain&lt;span&gt;은 '배수'라는 뜻으로, 싱크대를 비우는 것을 생각해볼 수 있다.&lt;/span&gt; kubeadm 클러스터를 &lt;span&gt;업그레이드 하기 전에는 비워놓고 해야한다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;566&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KS07P/btq7CPqE1zz/YKFfDPfCEOH2tb4VBN2E2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KS07P/btq7CPqE1zz/YKFfDPfCEOH2tb4VBN2E2K/img.png&quot; data-alt=&quot;쿠버네티스 홈페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KS07P/btq7CPqE1zz/YKFfDPfCEOH2tb4VBN2E2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKS07P%2Fbtq7CPqE1zz%2FYKFfDPfCEOH2tb4VBN2E2K%2Fimg.png&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;566&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쿠버네티스 홈페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/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_1624003315131&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ apt-cache madison kubeadm&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Version Skew Policy&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&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;먼저 버전에 대한 내용을 이해하기 위하여 Version Skew Policy(갭차이)를 살펴보면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1830&quot; data-origin-height=&quot;661&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJZt5b/btq7COL6Oxn/WEgvHbu20kJVnTByX8J7U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJZt5b/btq7COL6Oxn/WEgvHbu20kJVnTByX8J7U0/img.png&quot; data-alt=&quot;kubernetes version skew policy&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJZt5b/btq7COL6Oxn/WEgvHbu20kJVnTByX8J7U0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJZt5b%2Fbtq7COL6Oxn%2FWEgvHbu20kJVnTByX8J7U0%2Fimg.png&quot; data-origin-width=&quot;1830&quot; data-origin-height=&quot;661&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;kubernetes version skew policy&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;Kubernetes versions are expressed as &lt;b&gt;x.y.z&lt;/b&gt;, where &lt;b&gt;x&lt;/b&gt; is the major version, &lt;b&gt;y&lt;/b&gt; is the minor version, and &lt;b&gt;z &lt;/b&gt;is the patch version, following Semantic Versioning terminology. For more information, see Kubernetes Release Versioning.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 요약 : x&lt;/b&gt;&lt;span&gt;&lt;b&gt;는 메이저 버전&lt;/b&gt;&lt;/span&gt;&lt;b&gt;, y&lt;/b&gt;&lt;span&gt;&lt;b&gt;는 마이너 버전&lt;/b&gt;&lt;/span&gt;&lt;b&gt;, z&lt;/b&gt;&lt;span&gt;&lt;b&gt;는 패치 버전&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;버전은 x.y.z형태로 이루어져 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;메이저버전은 메인 버전이고 마이너는 소소한 내용이 변경된 것&lt;/span&gt;, &lt;span&gt;패치는 버그나 보완대응 하기위한 버전이다&lt;/span&gt;. &lt;span&gt;메이저버전은 변경된 적 없고 마이너 버전은 &lt;/span&gt;3&lt;span&gt;개월에 한 번씩 바뀐다&lt;/span&gt;. 1&lt;span&gt;년에 총 &lt;/span&gt;4&lt;span&gt;번의 버전이 나온다&lt;/span&gt;. &lt;span&gt;정확하게는 &lt;/span&gt;1&lt;span&gt;년에 총 &lt;/span&gt;3&lt;span&gt;번의 버전이 나온다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하나의 버전은 &lt;/span&gt;1&lt;span&gt;년이 지나게 되면 지원이 종료된다&lt;/span&gt;. &lt;span&gt;지금은 &lt;/span&gt;2.21.x &lt;span&gt;버전이 나왔으니 &lt;/span&gt;1.18~ 이용이&amp;nbsp;&lt;span&gt;가능하다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 AWS&lt;span&gt;의 &lt;/span&gt;EKS(Elastic Kubernetes Service)의 경우,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아직까지도 쿠버네티스 버전이 &lt;/span&gt;1.20&lt;span&gt;까지만 지원되며&lt;/span&gt;, &lt;span&gt;기본값은 &lt;/span&gt;1.19이다.&amp;nbsp;&lt;span&gt;최신버전은 안정성이 떨어지기 때문에 위험하긴 한 부분이 있어 기본값을 이렇게 셋팅해 놓은 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Supported component upgrade order&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;버전 업그레이드를 하게될 때 순서가 매우 중요하다. &lt;span&gt;실제 현업에서 중요한 개념인데, &lt;/span&gt;&lt;span&gt;외울 필요는 없지만 알고는 있도록 하자.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;591&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wx6c4/btq7Chuyo9q/lyhriAfaxrIyo6d46kCl70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wx6c4/btq7Chuyo9q/lyhriAfaxrIyo6d46kCl70/img.png&quot; data-alt=&quot;kubernetes supported component upgrade order&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wx6c4/btq7Chuyo9q/lyhriAfaxrIyo6d46kCl70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWx6c4%2Fbtq7Chuyo9q%2FlyhriAfaxrIyo6d46kCl70%2Fimg.png&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;591&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;kubernetes supported component upgrade order&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;해당 내용을 읽다보면 순서가 나타나는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kube-apiserver -&amp;gt; kube-controllermamager -&amp;gt; kubelet &lt;span&gt;순서대로 업그레이드를 해야한다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;업그레이드를 하든 업데이트를 하든 그 동안에는 사용을 하지 못한다&lt;/span&gt;. &lt;span&gt;그것을 &lt;b&gt;다운타임&lt;/b&gt;이라고 한다&lt;/span&gt;. 실제 기업에서는 사&lt;span&gt;용율이 제일 적은 때 서비스를 닫아놓고 다 업데이트한다&lt;/span&gt;. ex. &lt;span&gt;금융권은 추석때 정기점검&lt;/span&gt;(그동안&amp;nbsp;&lt;span&gt;사용 못함&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;보통 &lt;/span&gt;24/7(24&lt;span&gt;시간 일주일 내내&lt;/span&gt;)서비스로 돌아가야 하는 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;365&lt;span&gt;일동안 장애가 발생하지 않는 한 계속해서 서비스 되어야 하는 것인데&lt;/span&gt;, &lt;span&gt;업데이트를 어떻게 할까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;결론은 부분 부분 해야한다&lt;/span&gt;. &lt;span&gt;모두 다 한꺼번에 다 업데이트를 할 수가 없기 때문이다&lt;/span&gt;. &lt;span&gt;한번에 하면 앞서 말했듯 다운타임이 발생한다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex. Naver, Daum은 &lt;span&gt;수십억의 매출 손실이 나기 때문에 순차적으로 부분 부분 업그레이드를 해야 전체 서비스가 중단되지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;그렇기 때문에&amp;nbsp; 버전 설치 순서에 대한 내용을 알고 있어야 하는 것이다.&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;업그레이드 테스트를 해볼텐데, 먼저 z에 해당하는 패치 업그레이드 -&amp;gt; y에 해당하는 마이너 업그레이드 순서로 진행 할 것이다.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&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;&lt;b&gt;[v1.18.18-00 -&amp;gt; v1.18.19-00 패치 업그레이드]&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;* 사전 준비해야 할 환경 : v1.18.18-00로 설치된 master node, node1, node2 환경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;준비사항은 이전 포스팅 참고 : Ubuntu 18.04 LTS, Vagrant를 이용한 쿠버네티스 아키텍처 설치&lt;/p&gt;
&lt;figure id=&quot;og_1624001728876&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;Ubuntu 18.04 LTS, Vagrant를 이용한 쿠버네티스 아키텍처 설치&quot; data-og-description=&quot;쿠버네티스의 기본 중에서 쿠버네티스 아키텍처에 대한 간단한 설명과 함께 다양한 테스트를 해보려고 한다. 쿠버네티스 클러스터의 구성 요소는 큼직하게 컨트롤 플레인(Control Plane), 노드(Node)&quot; data-og-host=&quot;simroot.tistory.com&quot; data-og-source-url=&quot;https://simroot.tistory.com/19?category=941767&quot; data-og-url=&quot;https://simroot.tistory.com/19&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fxBgu/hyKBBAJzBx/cDy5KKKz6lEWg4kPEKWkP0/img.png?width=800&amp;amp;height=386&amp;amp;face=58_151_571_304,https://scrap.kakaocdn.net/dn/sfoiC/hyKByquBEi/NVslCfJYOYk3q5O0gsm8ck/img.png?width=800&amp;amp;height=386&amp;amp;face=58_151_571_304,https://scrap.kakaocdn.net/dn/sXNcP/hyKBH1ZALG/XMeNtc73yhARwyCngKlRaK/img.png?width=750&amp;amp;height=728&amp;amp;face=0_0_750_728&quot;&gt;&lt;a href=&quot;https://simroot.tistory.com/19?category=941767&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://simroot.tistory.com/19?category=941767&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fxBgu/hyKBBAJzBx/cDy5KKKz6lEWg4kPEKWkP0/img.png?width=800&amp;amp;height=386&amp;amp;face=58_151_571_304,https://scrap.kakaocdn.net/dn/sfoiC/hyKByquBEi/NVslCfJYOYk3q5O0gsm8ck/img.png?width=800&amp;amp;height=386&amp;amp;face=58_151_571_304,https://scrap.kakaocdn.net/dn/sXNcP/hyKBH1ZALG/XMeNtc73yhARwyCngKlRaK/img.png?width=750&amp;amp;height=728&amp;amp;face=0_0_750_728');&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;Ubuntu 18.04 LTS, Vagrant를 이용한 쿠버네티스 아키텍처 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스의 기본 중에서 쿠버네티스 아키텍처에 대한 간단한 설명과 함께 다양한 테스트를 해보려고 한다. 쿠버네티스 클러스터의 구성 요소는 큼직하게 컨트롤 플레인(Control Plane), 노드(Node)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;simroot.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패치 업그레이드 순서는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;control-plane&amp;nbsp;&lt;br /&gt;-&amp;nbsp;kubeadm&amp;nbsp;&lt;br /&gt;-&amp;nbsp;kubectl,&amp;nbsp;kubelet&amp;nbsp;&lt;br /&gt;2. kube-node1/node2&amp;nbsp;&lt;br /&gt;-&amp;nbsp;kubeadm&amp;nbsp;&lt;br /&gt;- kubectl, kubelet&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. control-plane&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kubeadm 업그레이드&lt;/p&gt;
&lt;pre id=&quot;code_1624006013096&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ sudo apt-get install -y --allow-change-held-packages kubeadm=1.18.19-00
// kubeadm 업그레이드
vagrant@kube-control1:~$ sudo kubeadm upgrade plan

vagrant@kube-control1:~$ sudo kubeadm upgrade apply v1.18.19
// 조금 오래걸림. 명령이 완료되면 SUCCESS! 가 뜬다.
vagrant@kube-control1:~$ kubectl get nodes
// 아직 변동안되어있음&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;- kubelet, kubectl 업그레이드&lt;/p&gt;
&lt;pre id=&quot;code_1624006154570&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ sudo  apt-get install -y --allow-change-held-packages kubelet=1.18.19-00 kubectl=1.18.19-00
// kubelet, kubectl 업그레이드

vagrant@kube-control1:~$ sudo systemctl daemon-reload
vagrant@kube-control1:~$ sudo systemctl restart kubelet

vagrant@kube-control1:~$ kubectl get nodes
NAME            STATUS   ROLES    AGE    VERSION
kube-control1   Ready    master   135m   v1.18.19
kube-node1      Ready    &amp;lt;none&amp;gt;   97m    v1.18.18
kube-node2      Ready    &amp;lt;none&amp;gt;   106m   v1.18.18&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kubelet, kubectl을 업그레이드 해줄 때에는 daemon을 reload해줘야 하고 kubelet을 restart시켜주는 과정이 필요하다. 이후 노드를 확인해보면 kube-control1만 v1.18.19로 업그레이드 된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. kube-node1/node2&amp;nbsp; 각각 업그레이드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kubeadm 업그레이드&lt;/p&gt;
&lt;pre id=&quot;code_1624006343462&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-node1:~$ sudo apt-get install -y --allow-change-held-packages kubeadm=1.18.19-00
vagrant@kube-node1:~$ sudo kubeadm upgrade node&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;- kubelet, kubectl 업그레이드&lt;/p&gt;
&lt;pre id=&quot;code_1624006357487&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-node1:~$ sudo apt-get install -y --allow-change-held-packages kubelet=1.18.19-00 kubectl=1.18.19-00
vagrant@kube-node1:~$ sudo systemctl daemon-reload
vagrant@kube-node1:~$ sudo systemctl restart kubelet&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* &lt;span&gt;클러스터 상태 확인&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1624006442723&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ kubectl get nodes
NAME            STATUS   ROLES    AGE    VERSION
kube-control1   Ready    master   135m   v1.18.19
kube-node1      Ready    &amp;lt;none&amp;gt;   97m    v1.18.19
kube-node2      Ready    &amp;lt;none&amp;gt;   106m   v1.18.19&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 나머지 2개의 노드 모두 1.18.19 버전으로 업그레이드 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&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;&lt;b&gt;[v1.18.19에서 1.19의 최신버전(v1.19.11-00)으로 업그레이드하기]&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;&lt;span&gt;업그레이드 순서는 동일하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. control plane&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kubeadm&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kubelet, kubectl&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. worker node&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kubeadm&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- kubelet, kubectl&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 여기서 드는 의문) &lt;span&gt;만약 작업이 수백대라면&lt;/span&gt;? &lt;span&gt;엄청 오래 걸릴 것&lt;/span&gt;. 이 부분도 해결하는 방법이 있을 것 같은데 더 공부해봐야 할 문제인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.19버전의 최신버전은 무엇일까?&lt;/p&gt;
&lt;pre id=&quot;code_1624006820218&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ apt-cache madison kubeadm | grep 1.19&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어를 이용해 현재 지원되는 1.19버전의 목록을 찾아보았더니 1.19.11-00버전이 최신버전으로 확인된다. 1.18에서 1.19로 두번째 부분인&lt;b&gt; y&lt;/b&gt; 부분이 바뀌는 것이니 마이너 업그레이드라고 할 수 있다.&lt;b&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;&lt;b&gt;1. control plane&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;- kubeadm&lt;/p&gt;
&lt;pre id=&quot;code_1624006996781&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ sudo apt-get install -y --allow-change-held-packages kubeadm=1.19.11-00
vagrant@kube-control1:~$ sudo kubeadm upgrade plan

vagrant@kube-control1:~$ sudo kubeadm upgrade apply v1.19.11&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;- kubelet, kubectl&lt;/p&gt;
&lt;pre id=&quot;code_1624007034702&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ sudo  apt-get install -y --allow-change-held-packages kubelet=1.19.11-00 kubectl=1.19.11-00

vagrant@kube-control1:~$ sudo systemctl daemon-reload
vagrant@kube-control1:~$ sudo systemctl restart kubelet.service &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_1624007068902&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ kubectl get nodes&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;&lt;b&gt;2. worker node(&lt;b&gt;kube-node1/node2&amp;nbsp; 각각 업그레이드)&lt;/b&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;- kubeadm&lt;/p&gt;
&lt;pre id=&quot;code_1624007125029&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-node1:~$ sudo apt-get install -y --allow-change-held-packages kubeadm=1.19.11-00
vagrant@kube-node1:~$ kubeadm version
vagrant@kube-node1:~$ sudo kubeadm upgrade node&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;- kubelet, kubectl&lt;/p&gt;
&lt;pre id=&quot;code_1624007132156&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-node1:~$ sudo apt-get install -y --allow-change-held-packages kubelet=1.19.11-00 kubectl=1.19.11-00
vagrant@kube-node1:~$ sudo systemctl daemon-reload
vagrant@kube-node1:~$ sudo systemctl restart kubelet&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_1624007519333&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kvagrant@kube-control1:~$ kubectl get nodes
NAME            STATUS   ROLES    AGE    VERSION
kube-control1   Ready    master   151m   v1.19.11
kube-node1      Ready    &amp;lt;none&amp;gt;   113m   v1.19.11
kube-node2      Ready    &amp;lt;none&amp;gt;   122m   v1.19.11&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&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;이번 글을 쓰면서 버전에 대한 개념에 대해 제대로 정립할 수 있었다. 파이썬이나 다른 서비스들을 다운로드 받을 때 최신버전은 안정성이 떨어진다고 하는 동료들의 이야기를 듣고 사실 큰 신경을 쓰지 않았었다. 그런데 쿠버네티스를 공부하면서 모든 서비스들이 서로 유기적으로 연결되어있다보니, 버전은 현업에서 중요하게 작용하는 부분임을 확실하게 느낄 수 있었다.&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;나중에 이 글을 보더라도 이해할 수 있도록 신경써서 정리를 해봤는데, 중요한 개념들을 종종 적어나가면서 스킬업 해나가야겠다. 다음번 포스팅에서는 Clean up에 대해 다룰건데, 마스터와 노드들을 셋팅하는것도 중요하지만 제거하는 것도 중요하다. 그래서 노드를 제거하는것과 다시 추가해보는 테스트도 진행해볼 것이다.&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;&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;&amp;lt;kubeadm 클러스터 업그레이드&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1624002667771&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;kubeadm 클러스터 업그레이드&quot; data-og-description=&quot;이 페이지는 kubeadm으로 생성된 쿠버네티스 클러스터를 1.20.x 버전에서 1.21.x 버전으로, 1.21.x 버전에서 1.21.y(여기서 y &amp;gt; x) 버전으로 업그레이드하는 방법을 설명한다. 업그레이드가 지원되지 않는 &quot; data-og-host=&quot;kubernetes.io&quot; data-og-source-url=&quot;https://kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/&quot; data-og-url=&quot;https://kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/JTa5X/hyKBJZQ4Xl/5DGfQKRFYkggACb4fqVFm0/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/d8Gzgq/hyKBAPnG7P/0iCXtMyolE5S4A6RjAyNR1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/JTa5X/hyKBJZQ4Xl/5DGfQKRFYkggACb4fqVFm0/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/d8Gzgq/hyKBAPnG7P/0iCXtMyolE5S4A6RjAyNR1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&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;kubeadm 클러스터 업그레이드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 페이지는 kubeadm으로 생성된 쿠버네티스 클러스터를 1.20.x 버전에서 1.21.x 버전으로, 1.21.x 버전에서 1.21.y(여기서 y &amp;gt; x) 버전으로 업그레이드하는 방법을 설명한다. 업그레이드가 지원되지 않는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kubernetes.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;Version Skew Policy&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1624003405050&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;Version Skew Policy&quot; data-og-description=&quot;The maximum version skew supported between various Kubernetes components.&quot; data-og-host=&quot;kubernetes.io&quot; data-og-source-url=&quot;https://kubernetes.io/releases/version-skew-policy/&quot; data-og-url=&quot;https://kubernetes.io/releases/version-skew-policy/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bf0BCM/hyKBGIP04m/a9EVOzWAuy6RYk0KGisRE0/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/6b2Xf/hyKBGB336x/Pvmx4BqKlgVTkQiPKNpMkK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://kubernetes.io/releases/version-skew-policy/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kubernetes.io/releases/version-skew-policy/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bf0BCM/hyKBGIP04m/a9EVOzWAuy6RYk0KGisRE0/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/6b2Xf/hyKBGB336x/Pvmx4BqKlgVTkQiPKNpMkK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&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;Version Skew Policy&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The maximum version skew supported between various Kubernetes components.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kubernetes.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Kubernetes</category>
      <category>kubeadm 업그레이드</category>
      <category>kubelet kubectl 업그레이드</category>
      <category>Kubernetes</category>
      <category>Supported component upgrade order</category>
      <category>vagrant</category>
      <category>Version Skew Policy</category>
      <category>마이너 업그레이드</category>
      <category>패치 업그레이드</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/20</guid>
      <comments>https://simroot.tistory.com/20#entry20comment</comments>
      <pubDate>Fri, 18 Jun 2021 18:18:56 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 18.04 LTS, Vagrant를 이용한 쿠버네티스 아키텍처 설치</title>
      <link>https://simroot.tistory.com/19</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;쿠버네티스의 기본 중에서 쿠버네티스 아키텍처에 대한 간단한 설명과 함께 다양한 테스트를 해보려고 한다. 쿠버네티스 클러스터의 구성 요소는 큼직하게 컨트롤 플레인(Control Plane), 노드(Node), 애드온(Addons)이 있다.&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;컨트롤 플레인은 클러스터의 전체를 제어하고, 노드는 쿠버네티스의 컨테이너 런타임 환경을 제공하며 동작중인 파드를 유지하는 기능을 담당한다. 애드온은 쿠버네티스에 추가할 수 있는 확장 기능을 제공한다. 그래서 Ubuntu 18.04 LTS버전이 설치되어 있는 호스트에서 Vagrant를 이용하여 쿠버네티스 아키텍처를 설치하고, 패치/마이너 업그레이드와 노드 제거 및 추가까지 해볼 예정이다.&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;* 사전 준비사항 : Vagrant에 VM 3개 생성(kube-control1, kube-node1, kube-node2) 후 도커 설치되어 있는 환경&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;해당 준비내용은 이전 포스팅을 참고하면 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;Vagrant 설치 및 VM 생성방법&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1623935411923&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;Ubuntu 18.04 Vagrant 설치 및 기본 사용법, 명령어&quot; data-og-description=&quot;VMware나 VirtualBox처럼 가상머신에 가상 컴퓨터가 많이 올라가있으면 부팅이 안 되는 현상이 발생할 수 있다. 그렇기 때문에 안 쓰는 가상 컴퓨터는 싹 정리해주는 과정이 사전에 필요하다. Kubernete&quot; data-og-host=&quot;simroot.tistory.com&quot; data-og-source-url=&quot;https://simroot.tistory.com/15&quot; data-og-url=&quot;https://simroot.tistory.com/15&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/p4SZC/hyKBzhUc1w/PK7dy2zkk5Rk1XWrOZ4Krk/img.png?width=800&amp;amp;height=408&amp;amp;face=0_0_800_408,https://scrap.kakaocdn.net/dn/buwHUY/hyKAiWnkzs/1t01KjCMXAWDJRxZ06kTWK/img.png?width=800&amp;amp;height=408&amp;amp;face=0_0_800_408,https://scrap.kakaocdn.net/dn/bQwdCR/hyKBKX1oXr/wJ9Q9RI9NAZztteblZKw40/img.png?width=1278&amp;amp;height=653&amp;amp;face=0_0_1278_653&quot;&gt;&lt;a href=&quot;https://simroot.tistory.com/15&quot; data-source-url=&quot;https://simroot.tistory.com/15&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/p4SZC/hyKBzhUc1w/PK7dy2zkk5Rk1XWrOZ4Krk/img.png?width=800&amp;amp;height=408&amp;amp;face=0_0_800_408,https://scrap.kakaocdn.net/dn/buwHUY/hyKAiWnkzs/1t01KjCMXAWDJRxZ06kTWK/img.png?width=800&amp;amp;height=408&amp;amp;face=0_0_800_408,https://scrap.kakaocdn.net/dn/bQwdCR/hyKBKX1oXr/wJ9Q9RI9NAZztteblZKw40/img.png?width=1278&amp;amp;height=653&amp;amp;face=0_0_1278_653');&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;Ubuntu 18.04 Vagrant 설치 및 기본 사용법, 명령어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;VMware나 VirtualBox처럼 가상머신에 가상 컴퓨터가 많이 올라가있으면 부팅이 안 되는 현상이 발생할 수 있다. 그렇기 때문에 안 쓰는 가상 컴퓨터는 싹 정리해주는 과정이 사전에 필요하다. Kubernete&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;simroot.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;설치하기 전에..&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;쿠버네티스를 설치하기 전에 kubeadm을 설치해야한다.&amp;nbsp; 그 이후 kubelet과 kubectl을 설치한다. 이 세가지는 쿠버네티스를 시작하기 위해 중요한 설정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* kubeadm&lt;/b&gt; : 클러스터를 부트스트랩(bootstrap)하는 명령어. 설치를 하는 명령어.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;bootstrap은 여성의 부츠에 있는 고리. 이 의미는 it의 많은 곳에서 사용된다. bootstrap이라 하는 것은 부츠의 끈을 손으로 들어 올려서 들어 올릴 수 있도록 만드는 것. 자기가 자기 발을 들어 올린다는 말인데, 모든 운영체제는 자기 혼자서 작동하지 못한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터에 전원을 넣게 되면 boot loader가 실행이 된다. 이 bootstrap이라고 하는 프로그램이 운영체제를 띄운다. 자기가 자기 자신을 잡아당겨서 스스로 구출해낸다는 어원이 있다고 하는데, 그 특성에 맞게 자기 자신이 운영체제를 끌어올린다 해서 bootstrap이라 한다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;-&amp;gt; 쿠버네티스를 끌어올린다. 설치한다는 의미!&amp;nbsp;&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;* kubelet&lt;/b&gt; : 하단의 kubernetes cluster 이미지 참고&amp;nbsp; &lt;br /&gt;&lt;br /&gt;쿠버네티스가 설치되려면 Control Plane이 필요하다. 이런 요소도(api, c-m, c-c-m,,) 나중에 컨테이너로 실행된다. 엄밀히 이야기 하면 Control Plane도 worker node이다. 요즘에는 인종차별 논란도 있고 해서 worker라는 이름을 잘 안쓰려고 한다는데, 아무튼 node이다. 실행을 해야 하기 때문인데, 그래서 Control Plane에도 kubelet과 k-proxy가 들어있다. 꼭 기억해야 할 사항이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* kubectl&lt;/b&gt; : 쿠버네티스를 관리하기 위한 것.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;460&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9urZp/btq7yrwFwBl/QYHXNLEkzrsdGlyxDsNfg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9urZp/btq7yrwFwBl/QYHXNLEkzrsdGlyxDsNfg0/img.png&quot; data-alt=&quot;클라우드 컨트롤러 매니저 : kubernetes.io&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9urZp/btq7yrwFwBl/QYHXNLEkzrsdGlyxDsNfg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9urZp%2Fbtq7yrwFwBl%2FQYHXNLEkzrsdGlyxDsNfg0%2Fimg.png&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;460&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;클라우드 컨트롤러 매니저 : kubernetes.io&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;쿠버네티스 공식 홈페이지에 보면 자세한 설명이 나와있는데, 리눅스 계열 별 설치방법이 각각 따로 존재한다. 호스트가 현재 Ubuntu이기 때문에 데비안 기반 배포판 내용을 참고하여 진행하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span&gt;설치 시작&amp;nbsp;&lt;/span&gt;(v1.18.18)&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. kube-control1 설치&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;kube-control1이 control plane이기 때문에 먼저 설치를 한다. enp0s8에 보면 ip 주소는 192.168.100.11이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;471&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPcpBe/btq7zqRBG4Z/LoM1BCad9KPVTktdJ0G001/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPcpBe/btq7zqRBG4Z/LoM1BCad9KPVTktdJ0G001/img.png&quot; data-alt=&quot;enp0s8 ip 주소 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPcpBe/btq7zqRBG4Z/LoM1BCad9KPVTktdJ0G001/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPcpBe%2Fbtq7zqRBG4Z%2FLoM1BCad9KPVTktdJ0G001%2Fimg.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;471&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;enp0s8 ip 주소 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;공식 홈페이지에 데비안 기반 배포판을 순차적으로 설치한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;599&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbLxNv/btq7usX9Hln/9HuOOrD6oUYo2wK6RFH4Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbLxNv/btq7usX9Hln/9HuOOrD6oUYo2wK6RFH4Ek/img.png&quot; data-alt=&quot;kubeadm 설치 - 데비안 기반 배포판&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbLxNv/btq7usX9Hln/9HuOOrD6oUYo2wK6RFH4Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbLxNv%2Fbtq7usX9Hln%2F9HuOOrD6oUYo2wK6RFH4Ek%2Fimg.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;599&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;kubeadm 설치 - 데비안 기반 배포판&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;설치 내용을 순서대로 살펴보자면 apt update -&amp;gt; 패키지 설치 -&amp;gt; GPG key -&amp;gt; repository 추가 -&amp;gt; 다시 apt update&amp;hellip;&amp;nbsp; 가 된다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;* 처음보는 부분) hold라고 하는 것은 apt를 update를 하지 않게 만드는 패키지이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;왜 업데이트를 하지 않는지? 여러 컴포넌트들이 서로 유기적으로 작용하는데, 각각의 버전이라는 것이 존재한다. 서로 상호 관계가 있기 때문에 잘못 설치하면 쿠버네티스가 죽어버린다. 쿠버네티스 버전을 업데이트 할 때에는 절차라는 것이 존재하는데, 단순하게 패키지를 업데이트 해버리면 안 된다. 그래서 hold를 걸어놓는 것. hold의&amp;nbsp;반대는&amp;nbsp;unhold해주면&amp;nbsp;풀어준다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623937296194&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ sudo apt-get update
vagrant@kube-control1:~$ sudo apt-get install -y apt-transport-https ca-certificates curl

vagrant@kube-control1:~$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

vagrant@kube-control1:~$ echo &quot;deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main&quot; | sudo tee /etc/apt/sources.list.d/kubernetes.list

vagrant@kube-control1:~$ sudo apt-get update
vagrant@kube-control1:~$ sudo apt install -y kubelet=1.18.18-00 kubeadm=1.18.18-00 kubectl=1.18.18-00
vagrant@kube-control1:~$ sudo apt-mark hold kubelet kubeadm kubectl
kubelet set on hold. 
kubeadm set on hold. 
kubectl set on hold. &lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;위와같이 설치하기 전, 버전을 확인하는 방법은 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1623937394482&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ apt info kubeadm
Package: kubeadm  
Version: 1.21.1-00  

vagrant@kube-control1:~$ apt-cache madison kubeadm  &lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;info는 최신버전을 확인하는 명령어이며, 후자는 설치 가능한 버전을 확인할 수 있도록 출력해주는 명령어이다. kubelet, kubectl도 마찬가지.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;apt-cache madison 명령어를 입력하면 kubeadm설치할 수 있는 목록 리스트업이 쫙 나온다.&amp;nbsp; kubeadm 홈페이지 설치 순서 4번의 update까지만 설치를 완료해서 해당 명령어로 확인해보면 버전을 확인할 수 있다. 테스트를 위해 1.18.18-00 설치하기로 한다. 그래서 install 부분의 버전들을 1.18.18--00으로 설치하였다. 이후 버전을 업데이트 할 예정이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;b&gt;next..&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;- Creating a cluster with kubeadm&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;control-plane node에서는 최초 1회에 한해서 이니셜라이징 작업이 필요하다. control-plane(master구성) 네트워크 구성 및 환경구성을 진행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623938763629&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo kubeadm init --control-plane-endpoint 192.168.100.11 --pod-network-cidr 192.168.0.0/16 --apiserver-advertise-address 192.168.100.11 &lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;서브넷은 /24 보다도 /16으로 잡아주는 게 컨테이너를 많이 생성할 수 있다. 많이 사용하기 위해 /16, /12정도로도 만든다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;kubeadm&amp;nbsp;init&amp;nbsp;&amp;ndash;control-plane-endpoint&amp;nbsp;:&amp;nbsp;ip&amp;nbsp;a&amp;nbsp;s했을&amp;nbsp;때&amp;nbsp;알수있는&amp;nbsp;ip주소.&amp;nbsp;endpoint.&amp;nbsp;그래서&amp;nbsp;control-plane인&amp;nbsp;kube-control1&amp;nbsp;사용자의&amp;nbsp;사설ip&amp;nbsp;주소를&amp;nbsp;적어주었다.&amp;nbsp;VM을&amp;nbsp;생성할&amp;nbsp;때&amp;nbsp;이&amp;nbsp;ip대역으로&amp;nbsp;생성하기도&amp;nbsp;하였다. &lt;br /&gt;&lt;br /&gt;--apiserver-advertise-address : worker node에게 알려 줄 주소&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;만들고 나서 나오는 To start~로 시작하는 장문의 글을 따로 복사해둔다. 그 순서대로 node join까지 진행할 수 있다. 아래 더보기를 참고하면 된다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;To&amp;nbsp;start&amp;nbsp;using&amp;nbsp;your&amp;nbsp;cluster,&amp;nbsp;you&amp;nbsp;need&amp;nbsp;to&amp;nbsp;run&amp;nbsp;the&amp;nbsp;following&amp;nbsp;as&amp;nbsp;a&amp;nbsp;regular&amp;nbsp;user:&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;mkdir -p $HOME/.kube&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;sudo&amp;nbsp;chown&amp;nbsp;$(id&amp;nbsp;-u):$(id&amp;nbsp;-g)&amp;nbsp;$HOME/.kube/config&amp;nbsp;&lt;/b&gt; &lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;//자격증명 구성. master에&amp;nbsp;kubernetes&amp;nbsp;컴포넌트들이&amp;nbsp;생성되는&amp;nbsp;것인데&amp;nbsp;출력&amp;nbsp;결과에서&amp;nbsp;mkdir,&amp;nbsp;cp,&amp;nbsp;chown&amp;nbsp;명령을&amp;nbsp;kubernetes&amp;nbsp;관리자&amp;nbsp;계정에서&amp;nbsp;실행한다.&amp;nbsp;나오는&amp;nbsp;내용을&amp;nbsp;복사&amp;nbsp;붙여넣기해서&amp;nbsp;사용하면&amp;nbsp;편하다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You should now deploy a pod network to the cluster.&amp;nbsp; &lt;br /&gt;Run &quot;kubectl apply -f [podnetwork].yaml&quot; with one of the options listed at:&amp;nbsp; &lt;br /&gt;&lt;a href=&quot;https://kubernetes.io/docs/concepts/cluster-administration/addons/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kubernetes.io/docs/concepts/cluster-administration/addons/&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;//&amp;nbsp;addon&amp;nbsp;구성&amp;nbsp;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;You can now join any number of control-plane nodes by copying certificate authorities&amp;nbsp; &lt;br /&gt;and&amp;nbsp;service&amp;nbsp;account&amp;nbsp;keys&amp;nbsp;on&amp;nbsp;each&amp;nbsp;node&amp;nbsp;and&amp;nbsp;then&amp;nbsp;running&amp;nbsp;the&amp;nbsp;following&amp;nbsp;as&amp;nbsp;root:&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;kubeadm join 192.168.100.11:6443 --token k~~~@#~~~xr8tz7 \&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;--discovery-token-ca-cert-hash sha256:6bd28~~b8dcf90a43~~~~~~~72101cb65a15819f351fa \&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;--control-plane&amp;nbsp;&lt;/b&gt; &lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;// control-plane node를 추가하는 값. kubeadm join &amp;lt;token&amp;gt; 은 worker node가 master에 연결될때 필요하다. 별도로 저장해두도록 한다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then&amp;nbsp;you&amp;nbsp;can&amp;nbsp;join&amp;nbsp;any&amp;nbsp;number&amp;nbsp;of&amp;nbsp;worker&amp;nbsp;nodes&amp;nbsp;by&amp;nbsp;running&amp;nbsp;the&amp;nbsp;following&amp;nbsp;on&amp;nbsp;each&amp;nbsp;as&amp;nbsp;root:&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;이미지는 미리 받아놓기(pulling 시간 오래걸림)&lt;/p&gt;
&lt;pre id=&quot;code_1623938813549&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ kubeadm config images pull

vagrant@kube-control1:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE 
wordpress 5.7 c2dd1984ad5b 11 days ago 551MB 
k8s.gcr.io/kube-proxy v1.18.19 a5cae4db9292 4 weeks ago 117MB 
k8s.gcr.io/kube-apiserver v1.18.19 d26f380d3e93 4 weeks ago 173MB 
k8s.gcr.io/kube-controller-manager v1.18.19 4b0bf89255ad 4 weeks ago 162MB 
k8s.gcr.io/kube-scheduler v1.18.19 916efc2e1cec 4 weeks ago 96.1MB 
mysql 5.7 2c9028880e58 4 weeks ago 447MB 
k8s.gcr.io/pause 3.2 80d28bedfe5d 16 months ago 683kB 
k8s.gcr.io/coredns 1.6.7 67da37a9a360 16 months ago 43.8MB 
k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 19 months ago 288MB &lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;이후 진행할 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1623939574267&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir ~/.kube 
sudo ls /etc/kubernetes/admin.conf 
sudo cp /etc/kubernetes/admin.conf ~/.kube/config 
sudo chown vagrant:vagrant ~/.kube/config 

ls -l ~/.kube/config 
kubectl get nodes 
cat ~/.kube/config &lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;kubectl get nodes를 통해서 kube-control1이 master노드임을 확인할 수 있다. STATUS가 아직 NotReady로 되어있는데, 일정 시간이 지나면 곧 Ready로 바뀐다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;54&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nAQ1s/btq7utpg2XI/1PVgXp7aImzWq2oruI9X00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nAQ1s/btq7utpg2XI/1PVgXp7aImzWq2oruI9X00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nAQ1s/btq7utpg2XI/1PVgXp7aImzWq2oruI9X00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnAQ1s%2Fbtq7utpg2XI%2F1PVgXp7aImzWq2oruI9X00%2Fimg.png&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;54&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;추가로 network 설정을 도와주는 addon을 설치한다. network addon의 종류는 많이 있는데, 가장 많이 쓰이는 것이 Calico이다. Calico에 관련된 명령어 및 설명은 참고링크를 아래 달아두었다.&lt;/p&gt;
&lt;pre id=&quot;code_1623975803722&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl https://docs.projectcalico.org/manifests/calico.yaml -O
kubectl apply -f calico.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;curl~&lt;span&gt;파일 받아서 저장 후 &lt;/span&gt;ls&lt;span&gt;하면 &lt;/span&gt;calico.yaml&lt;span&gt;파일이 다운로드 된다&lt;/span&gt;. vim같은 편집기로 calico.yaml파일에 들어와보면 ip address가 설정되어 있는데, 이 부분을 적절하게 바꿔준다. 192.168.0.0 로 다운로드가 받아져서 따로 바꾸지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그 다음 명령어 실행하면 쿠버네티스 사용의 전제조건인 Objectives부분을 만족하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. kube-node1 추가(worker node 구성)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;master node(control-plane)을 셋팅하는 데만 꽤나 복잡하고 오래 걸렸지만, 이 셋팅을 최초 1회만 해주면 이제 node를 붙였다 떼는 건 쉽게 진행할 수 있다. 이 작업은 각 노드에서 진행하기 때문에 ssh 원격접속으로 kube-node1에서 작업한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623976359584&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ ssh vagrant@kube-node1&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;kube-control1 안에서 ssh 원격접속하는 명령어는 호스트에서 접속할 때와 다른 점을 주의하자. 이렇게 이중으로 접속하게 되면 비밀번호를 물어보는데, 기본 셋팅되어 있는 비밀번호는 vagrant이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* Add Worker (node1/node2) WorkFlow&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Docker &lt;span&gt;설치(사전에 완료해놓았음)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. kubeadm, kubectl, kubelet=1.18.18-00 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 설치 후에 join만 해주면 됨. (아까 더보기에 있던 내용의 마지막 부분을 참고하여 token을 포함한 join명령을 실행해야 한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) kubeadm &lt;/b&gt;&lt;span&gt;&lt;b&gt;설치&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623976226863&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-node1:~$ sudo apt-get update
sudo apt-get node1:~$ sudo apt-get install-y apt-transport-https ca-certificates curl&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;위 &lt;/span&gt;2&lt;span&gt;줄은 마스터노드를 구성한 뒤 생략 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623976262876&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

echo &quot;deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main&quot; | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt install kubectl=1.18.18-00 kubeadm=1.18.18-00 kubelet=1.18.18-00
sudo apt-mark hold kubelet kubeadm kubectl&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마스터노드 때와 마찬가지로 kubeadm을 설치한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* kube-control1에서 했던 아래 명령은 node&lt;/b&gt;&lt;span&gt;&lt;b&gt;에서 진행 &lt;/b&gt;&lt;/span&gt;&lt;b&gt;XX -&amp;gt; master node&lt;/b&gt;&lt;span&gt;&lt;b&gt;에서만 &lt;/b&gt;&lt;/span&gt;&lt;b&gt;1&lt;/b&gt;&lt;span&gt;&lt;b&gt;회 진행하면 된다&lt;/b&gt;&lt;/span&gt;&lt;b&gt;.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623976583663&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubeadm config images pull
sudo kubeadm init --control-plane-endpoint 192.168.100.11 --pod-network-cidr 192.168.0.0/16 --apiserver-advertise-address 192.168.100.11&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어는 참고만 하며,&amp;nbsp;node1&lt;span&gt;과 &lt;/span&gt;node2&lt;span&gt;는 아래 토큰과 해시값을 추가하여 join만 해주면 된다&lt;/span&gt;. 이전에 master node를 생성할 때 나왔던(더보기 참고) 맨 마지막줄의 token, hash값을 참고한다. 혹시 그 값을 잊어버리면 아래 명령어를 통해서 확인해볼 수 있다.&amp;nbsp;master node인 kube-control1에서 아래 명령어를 입력해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623990442964&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ kubeadm token list
vagrant@kube-control1:~$ kubeadm token create&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;token list는 토큰값을 출력해주는 명령어이다. token은 24시간 뒤면 만료가 되어 사라지는데 그럴 땐 당황하지 않고 create를 해주면 생성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1623990917885&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2&amp;gt;/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hash값을 구하는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRlAzp/btq7yXW0j0C/GmrLQ9knBl2aKrKaNKFDMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRlAzp/btq7yXW0j0C/GmrLQ9knBl2aKrKaNKFDMk/img.png&quot; data-alt=&quot;hash값 구하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRlAzp/btq7yXW0j0C/GmrLQ9knBl2aKrKaNKFDMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRlAzp%2Fbtq7yXW0j0C%2FGmrLQ9knBl2aKrKaNKFDMk%2Fimg.png&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;hash값 구하기&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) join&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 node1에 아래와 같은 문법을 입력할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo kubeadm join 192.168.100.11:6443 --token &amp;lt;token값&amp;gt; --discovery-token-ca-cert-hash sha256:&amp;lt;hash값&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623990305174&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo kubeadm join 192.168.100.11:6443 --token k457sc.6daeqo~~~~r8tz7 --discovery-token-ca-cert-hash sha256:6bd28d05b8~~~~ae172101cb65a15819f351fa&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;&lt;b&gt;3. kube-node2 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와같은 작업을 node2에도 반복한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Control-plane에서 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1623991230162&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ kubectl get nodes&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kubectl get nodes &lt;span&gt;하면 &lt;/span&gt;node1, node2&lt;span&gt;가 보여야 함&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;결과화면&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;STATUS&amp;nbsp;&amp;nbsp;&amp;nbsp;ROLES&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AGE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VERSION&lt;br /&gt;kube-control1&amp;nbsp;&amp;nbsp;&amp;nbsp;Ready&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;master&amp;nbsp;&amp;nbsp;&amp;nbsp;2d20h&amp;nbsp; &amp;nbsp; v1.18.18&lt;br /&gt;kube-node1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ready&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;none&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2d20h&amp;nbsp; &amp;nbsp;v1.18.18&lt;br /&gt;kube-node2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ready&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;none&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2d19h&amp;nbsp; &amp;nbsp;v1.18.18&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;kubeadm 설치&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1623936491505&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;kubeadm 설치하기&quot; data-og-description=&quot;이 페이지에서는 kubeadm 툴박스를 설치하는 방법을 보여준다. 이 설치 프로세스를 수행한 후 kubeadm으로 클러스터를 만드는 방법에 대한 자세한 내용은 kubeadm을 사용하여 클러스터 생성하기 페이&quot; data-og-host=&quot;kubernetes.io&quot; data-og-source-url=&quot;https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/&quot; data-og-url=&quot;https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Knqpm/hyKAqfOURE/uYsTSfcMdEMZ6L2jkPEjH0/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/cQGWDf/hyKAlyN7FA/drL6JcUsoPQ5BkdVpegcZ1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/flU50/hyKAhiQKBD/YMt0hnvbBJAULQto03uoK1/img.png?width=1292&amp;amp;height=1475&amp;amp;face=0_0_1292_1475&quot;&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Knqpm/hyKAqfOURE/uYsTSfcMdEMZ6L2jkPEjH0/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/cQGWDf/hyKAlyN7FA/drL6JcUsoPQ5BkdVpegcZ1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/flU50/hyKAhiQKBD/YMt0hnvbBJAULQto03uoK1/img.png?width=1292&amp;amp;height=1475&amp;amp;face=0_0_1292_1475');&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;kubeadm 설치하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 페이지에서는 kubeadm 툴박스를 설치하는 방법을 보여준다. 이 설치 프로세스를 수행한 후 kubeadm으로 클러스터를 만드는 방법에 대한 자세한 내용은 kubeadm을 사용하여 클러스터 생성하기 페이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kubernetes.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;Creating a cluster with kubeadm 참고&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1623938070436&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;Creating a cluster with kubeadm&quot; data-og-description=&quot;Using kubeadm, you can create a minimum viable Kubernetes cluster that conforms to best practices. In fact, you can use kubeadm to set up a cluster that will pass the Kubernetes Conformance tests. kubeadm also supports other cluster lifecycle functions, su&quot; data-og-host=&quot;kubernetes.io&quot; data-og-source-url=&quot;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/&quot; data-og-url=&quot;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0zTT7/hyKBDSaMgR/7mFjkf3ZLxMiL9R2bUBOUk/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/ng2RV/hyKBBmwjKv/rXWRRWn8UdvKvlVkB5cGx0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/TvxOs/hyKAqGT1Cq/GKUtcc0UeHm60SQWuwR1C1/img.png?width=1292&amp;amp;height=1475&amp;amp;face=0_0_1292_1475&quot;&gt;&lt;a href=&quot;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0zTT7/hyKBDSaMgR/7mFjkf3ZLxMiL9R2bUBOUk/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/ng2RV/hyKBBmwjKv/rXWRRWn8UdvKvlVkB5cGx0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/TvxOs/hyKAqGT1Cq/GKUtcc0UeHm60SQWuwR1C1/img.png?width=1292&amp;amp;height=1475&amp;amp;face=0_0_1292_1475');&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;Creating a cluster with kubeadm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Using kubeadm, you can create a minimum viable Kubernetes cluster that conforms to best practices. In fact, you can use kubeadm to set up a cluster that will pass the Kubernetes Conformance tests. kubeadm also supports other cluster lifecycle functions, su&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kubernetes.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;Calico&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1623939804718&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;Install Calico networking and network policy for on-premises deployments&quot; data-og-description=&quot;Install Calico networking and network policy for on-premises deployments.&quot; data-og-host=&quot;docs.projectcalico.org&quot; data-og-source-url=&quot;https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises&quot; data-og-url=&quot;https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises&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;Install Calico networking and network policy for on-premises deployments&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Install Calico networking and network policy for on-premises deployments.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.projectcalico.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Kubernetes</category>
      <category>Addons</category>
      <category>Calico</category>
      <category>control plane</category>
      <category>node</category>
      <category>ubuntu 18.04 LTS</category>
      <category>Vagrant를 이용한 쿠버네티스 아키텍처 설치</category>
      <category>쿠버네티스 아키텍처 설치</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/19</guid>
      <comments>https://simroot.tistory.com/19#entry19comment</comments>
      <pubDate>Fri, 18 Jun 2021 13:51:38 +0900</pubDate>
    </item>
    <item>
      <title>쿠버네티스란 무엇인가?</title>
      <link>https://simroot.tistory.com/18</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;쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다. 그래서 공식 마크도 배의 키 모양을 하고 있는 것 같다. K8s라는 표기는 &quot;K&quot;와 &quot;s&quot;와 그 사이에 있는 8글자를 나타내는 약식 표기이다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다. 쿠버네티스는 프로덕션 워크로드를 대규모로 운영하는 15년 이상의 구글 경험과 커뮤니티의 최고의 아이디어와 적용 사례가 결합되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;994&quot; width=&quot;499&quot; height=&quot;485&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1Izv4/btq7nzwmE0C/lqU1E1wlxliqBH5PqeFL4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1Izv4/btq7nzwmE0C/lqU1E1wlxliqBH5PqeFL4k/img.png&quot; data-alt=&quot;kubernetes&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1Izv4/btq7nzwmE0C/lqU1E1wlxliqBH5PqeFL4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1Izv4%2Fbtq7nzwmE0C%2FlqU1E1wlxliqBH5PqeFL4k%2Fimg.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;994&quot; width=&quot;499&quot; height=&quot;485&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;kubernetes&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;사실 기본적인 내용은 쿠버네티스 공식 홈페이지에서 확인해볼 수 있다. 그렇지만 내용이 너무 많기 때문에 조금더 이해하기 쉽게 요약을 해보려고 한다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;쿠버네티스는 컨테이너 기반의 분산 클러스터 환경을 제공하며 워크로드를 위해 컴퓨팅, 네트워킹 및 스토리지 인프라를 오케스트레이션(Orchestration)한다. 도커가 한두개의 작은 컨테이너를 작업한다면 쿠버네티스는 아래 이미지처럼 컨테이너를 지휘하는 문어라고 생각하면 된다. (문어가 아니어도 상관 없다ㅎ) 사실 오케스트레이션 도구는 지난 포스팅에서 알 수 있듯 docker swarm이나 아파치 메소스도 있다. 그렇지만 독보적으로 자리잡고 있는 것이 바로 쿠버네티스이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;689&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZCh2A/btq7n2kQQ06/40XZKiG916G2e68QA1oqMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZCh2A/btq7n2kQQ06/40XZKiG916G2e68QA1oqMk/img.png&quot; data-alt=&quot;이해를 돕기 위한 docker swarm이미지 참고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZCh2A/btq7n2kQQ06/40XZKiG916G2e68QA1oqMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZCh2A%2Fbtq7n2kQQ06%2F40XZKiG916G2e68QA1oqMk%2Fimg.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;689&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이해를 돕기 위한 docker swarm이미지 참고&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;쿠버네티스가 제공하지 않는 기능들도 존재한다. 쿠버네티스는 클라우드의 Paas(Platform-as-a-service)의 분류에 속한다. 그렇지만 일반적인 Paas의 모든 개념을 포함하고 있지는 않다. 하드웨어 단에서 운영되는게 아니고 컨테이너단에서 운영되기 때문에 PaaS의 일부 기능만 제공한다.&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;- CI/CD(Continuous Integration/Continuous Delivery) 파이프라인&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;/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;생각보다 제공하지 않는 기능들이 많다. CI/CD 파이프라인이 제공되지 않는 기능이라고 하는데, 사실 쿠버네티스를 한다면 CI/CD 파이프라인 구축에 대한 내용을 들어봤을 수 있다. 사용이 가능한 이유는 바로 별도의 도구로 구현할 수 있기 때문이다. 별도로 add-on해서 다양한 기능들을 활용할 수 있다.&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;다음 포스팅때에는 도커를 통해 컨테이너를 구축했던 개념을 가지고 앞으로 쿠버네티스 설치부터 시작하여 기초 명령어들을 테스트 해볼 예정이다. kubeadm설치, kubelet, kubectl 설치도 중요한데 함께 다뤄 볼 기회가 있을 것 같다.&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;lt;참고&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1623834072471&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;쿠버네티스란 무엇인가?&quot; data-og-description=&quot;쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하&quot; data-og-host=&quot;kubernetes.io&quot; data-og-source-url=&quot;https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/&quot; data-og-url=&quot;https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dK5OTS/hyKAk6H2RJ/ymjade7fBcTqw6HpHjoXDK/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/boc1ef/hyKAtJl1yp/9xYs5Dl3EV5UyLS1MmfHaK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dK5OTS/hyKAk6H2RJ/ymjade7fBcTqw6HpHjoXDK/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373,https://scrap.kakaocdn.net/dn/boc1ef/hyKAtJl1yp/9xYs5Dl3EV5UyLS1MmfHaK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&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;쿠버네티스란 무엇인가?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kubernetes.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Kubernetes</category>
      <category>쿠버네티스란</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/18</guid>
      <comments>https://simroot.tistory.com/18#entry18comment</comments>
      <pubDate>Thu, 17 Jun 2021 14:00:42 +0900</pubDate>
    </item>
    <item>
      <title>마이크로서비스와 Devops에 대하여</title>
      <link>https://simroot.tistory.com/17</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;쿠버네티스를 이해하기 위해 먼저 모놀로식 아키텍처와 마이크로서비스 아키텍처의 차이에 대해 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 모놀리식(Monolithic) 아키텍처&lt;/b&gt; : 레거시 시스템(legacy)이라고도 함. 옛날 느낌이지만 아직도 사용하고 있는 아키텍처이며 대부분 단일 프로세스에서 실행이 되거나 몇개의 프로세스로 실행됨.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 마이크로서비스(Microservice) 아키텍처&lt;/b&gt; : 모놀로식 아키텍처의 크기가 커지면서 발생하는 문제점을 극복하기 위해 좀더 기능적으로 세분화되고 독립적으로 작동하는 방식.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 장점 : 크고 복잡한 애플리케이션을 지속적으로 배포할 수 있음, 개발 생산성 높고 배포 속도가 높음, 향상된 장애 격리, 다양한 기술 적용이 가능함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단점 : 분산시스템 설계에 따른 복잡성, 배포 및 관리 운영상의 복잡성, 증가된 리소스 소비&lt;/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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* Devops&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Devops[데브옵스]는 개발 방법이 아닌 하나의 문화이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 한 마디로 정의를 할 수가 있다. 사실 예전에는 데브옵스라고 하면 개발과 운영을 편리하게 해주는 것?으로 나름대로 정의를 내렸었는데, 하나의 문화라는 표현이 더 적절한 것 같다. 하드웨어 뿐만이 아니라 운영, 개발도 알아야 한다. 대부분 운영만 알고있는 경우가 많은데, 전체 프로세스가 어떻게 흘러가는지를 알아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;334&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCnzyD/btq7oHgwS8h/khgknri2LLQsxDOXrD9if0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCnzyD/btq7oHgwS8h/khgknri2LLQsxDOXrD9if0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCnzyD/btq7oHgwS8h/khgknri2LLQsxDOXrD9if0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCnzyD%2Fbtq7oHgwS8h%2Fkhgknri2LLQsxDOXrD9if0%2Fimg.jpg&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;334&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;devops라 하면 흔히 볼 수 있는 이미지다. 시작이 어디고 끝이 어딘지 모르겠으나 전체적인 프로세스의 흐름을 알아야 하는 것이 devops 엔지니어가 되기 위해서 중요하다.&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;예전에는 개발팀, QA팀, 운영팀 각각 나눠져서 배포, 관리를 하는 흐름을 가지고 있었다면 최근에는 개발자가 개발만 하는것이 아니라 전반적인 사이클을 알아야 하고 마찬가지로 운영팀 등 모두가 전체적인 작업들을 함께한다는 이야기다. 소통, 협업 및 통합을 강조하는 개발 환경 및 문화를 일컬어 Devops라고 한다.&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 swarm, Apache Mesos, 쿠버네티스 등등.. 이것들은 도커를 클러스터링(오케스트레이션) 하는 환경이다. 이 중에서 지금까지 남아있는 건 쿠버네티스이다. 쿠버네티스가 시장을 장악한 지는 3년정도밖에 안 되긴 했다. 얼마 되지 않는데 거의 독보적인 개념이니만큼 하나하나 알아가보도록 할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kubernetes는 K와 s 사이에 총 8글자가 들어간다고 해서 약어로 k8s라고 적는다. 이전에는 구글이 만들었지만 현재 CNCF 재단으로 넘어갔다는 건 참고로 알아두도록 하자. 그리고 중요한 것은 컨테이너 개념을 제대로 이해해야 쿠버네티스를 제대로 이해할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Kubernetes</category>
      <category>container</category>
      <category>DevOps</category>
      <category>Kubernetes</category>
      <category>MicroService</category>
      <category>Monolithic</category>
      <category>마이크로서비스와 Devops에 대하여</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/17</guid>
      <comments>https://simroot.tistory.com/17#entry17comment</comments>
      <pubDate>Thu, 17 Jun 2021 08:00:37 +0900</pubDate>
    </item>
    <item>
      <title>Vagrant 가상머신에 docker로 wordpress 구현(Ubuntu 18.04 LTS)</title>
      <link>https://simroot.tistory.com/16</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;Vagrant 설치한 뒤 아래 환경을 구축했다는 전제로 Vagrant 가상머신 각각에 docker를 설치하여 그 안에서 wordpress를 구현을 해볼 예정이다. 아래 내용을 참고하면 된다. 이와 관련하여 궁금한 점은 지난 포스팅을 참고하면 된다.&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;Ubuntu 18.04 Vagrant 설치 및 기본 사용법, 명령어&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1623803446005&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;Ubuntu 18.04 Vagrant 설치 및 기본 사용법, 명령어&quot; data-og-description=&quot;VMware나 VirtualBox처럼 가상머신에 가상 컴퓨터가 많이 올라가있으면 부팅이 안 되는 현상이 발생할 수 있다. 그렇기 때문에 안 쓰는 가상 컴퓨터는 싹 정리해주는 과정이 사전에 필요하다. Kubernete&quot; data-og-host=&quot;simroot.tistory.com&quot; data-og-source-url=&quot;https://simroot.tistory.com/15&quot; data-og-url=&quot;https://simroot.tistory.com/15&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/S6DKp/hyKyYcEg1G/wFAGcW6NSf8yd0ysv3153K/img.png?width=800&amp;amp;height=408&amp;amp;face=0_0_800_408,https://scrap.kakaocdn.net/dn/bVUU8V/hyKAnaPqOH/U92xLlkvFJ0u2ohVDC6MAk/img.png?width=800&amp;amp;height=408&amp;amp;face=0_0_800_408,https://scrap.kakaocdn.net/dn/cpzHak/hyKy5W8jAA/sRmHambwMm1hMkKfOKpsL0/img.png?width=1278&amp;amp;height=653&amp;amp;face=0_0_1278_653&quot;&gt;&lt;a href=&quot;https://simroot.tistory.com/15&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://simroot.tistory.com/15&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/S6DKp/hyKyYcEg1G/wFAGcW6NSf8yd0ysv3153K/img.png?width=800&amp;amp;height=408&amp;amp;face=0_0_800_408,https://scrap.kakaocdn.net/dn/bVUU8V/hyKAnaPqOH/U92xLlkvFJ0u2ohVDC6MAk/img.png?width=800&amp;amp;height=408&amp;amp;face=0_0_800_408,https://scrap.kakaocdn.net/dn/cpzHak/hyKy5W8jAA/sRmHambwMm1hMkKfOKpsL0/img.png?width=1278&amp;amp;height=653&amp;amp;face=0_0_1278_653');&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;Ubuntu 18.04 Vagrant 설치 및 기본 사용법, 명령어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;VMware나 VirtualBox처럼 가상머신에 가상 컴퓨터가 많이 올라가있으면 부팅이 안 되는 현상이 발생할 수 있다. 그렇기 때문에 안 쓰는 가상 컴퓨터는 싹 정리해주는 과정이 사전에 필요하다. Kubernete&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;simroot.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 준비사항 : Vagrant로 만들었던 3개의 가상머신 kube-control1, kube-node1, kube-node2&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;wordpress 구현 실습은 kube-control1에서 진행한다.&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;lt;도커엔진 설치&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1623803675176&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;Install Docker Engine on Ubuntu&quot; data-og-description=&quot; &quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; data-og-url=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cETnfH/hyKAsQJEuf/fCh4RkQYL7k2JLIeCXTUKK/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/oloRS/hyKy4cShY8/SpXl44LEanO5imBGGkADuK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/engine/install/ubuntu/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cETnfH/hyKAsQJEuf/fCh4RkQYL7k2JLIeCXTUKK/img.png?width=129&amp;amp;height=128&amp;amp;face=0_0_129_128,https://scrap.kakaocdn.net/dn/oloRS/hyKy4cShY8/SpXl44LEanO5imBGGkADuK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Install Docker Engine on Ubuntu&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 본문 내용을 참고하여서 도커 레포지토리와 GPG key, 도커엔진을 설치해준다.&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로 접근하는 경로는 일반 사용자로는 실행되지 않으며, root 계정이어야 한다. 따라서 명령어 앞에 sudo를 사용하거나 일반 사용자도 사용할 수 있도록 docker 그룹을 추가해줘야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623830250430&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ sudo usermod -aG docker vagrant
vagrant@kube-control1:~$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker 보조그룹을 추가해주었다. 권한추가를 하고나서 바로 적용되는 것은 아니고, 재접속을 해줘야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623830365114&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ exit
user@test:~/vagrant/kubernetes$ vagrant ssh kube-control1
vagrant@kube-control1:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 일반 사용자로도 docker ps 명령이 permission denied 에러가 나지 않고 잘 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;wordpress&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 wordpress를 구축할 환경이 마련되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 dockerhub에서 wordpress image를 다운로드한다. 참고로 이미지의 버전(tag) 중 latest가 디폴트값으로 설정되어있다. 주의할 점은 오늘의 latest와 내일의 latest는 다를 수 있기 때문에 가능한 latest태그를 사용하는 것이 아니라 버전을 지정해주는 것이 원칙이다. 간단한 실습을 할 거지만 안정적인 구성을 위해 최신버전보다는 나온지 조금 된 버전으로 사용한다. 5.7버전을 이용하도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커허브에 들어가보면 이 이미지들을 어떻게 사용할 수 있는지 가이드들이 나와있다. How to use this image가 적혀져있는 곳을 보면 환경변수들을 지정할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;308&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RLTts/btq7nF4lKMe/fRMkfgfIV6yDkNwKcpMWB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RLTts/btq7nF4lKMe/fRMkfgfIV6yDkNwKcpMWB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RLTts/btq7nF4lKMe/fRMkfgfIV6yDkNwKcpMWB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRLTts%2Fbtq7nF4lKMe%2FfRMkfgfIV6yDkNwKcpMWB0%2Fimg.png&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;308&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-e WORDPRESS_DB_HOST=...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-e WORDPRESS_DB_USER=...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-e WORDPRESS_DB_PASSWORD=...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-e WORDPRESS_DB_NAME=...&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;기본적으로 wordpress의 포트는 80번포트이며 dettach인 -d 옵션을 사용하여 동작시키면 된다. 그리고 중요한 것은 run을 할 때 볼륨지정을 해준다는 것이다.&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;* 볼륨 : /var/www/html&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;MySQL&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커허브 MySQL official 이미지에 보면 이것도 8버전과 5버전이 나와있다. 대부분 5버전대를 주로 사용하기 때문에 실습은 5.7버전으로 다운로드 받아서 진행한다. 추가로 자주 사용하는 환경변수 3가지도 있으며 이것 또한 docker run 실행시 -d 모드로 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;534&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/exi9MK/btq7sDjNIC8/Q89JeUg7egz6kvorFgWEzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/exi9MK/btq7sDjNIC8/Q89JeUg7egz6kvorFgWEzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/exi9MK/btq7sDjNIC8/Q89JeUg7egz6kvorFgWEzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fexi9MK%2Fbtq7sDjNIC8%2FQ89JeUg7egz6kvorFgWEzk%2Fimg.png&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;534&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MYSQL_DATABASE&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MYSQL_USER&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MYSQL_PASSWORD&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&gt;볼륨 &lt;/span&gt;: /var/lib/mysql&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;control plane인 cube-control1에서 아래와 같이 구현한다.&lt;/p&gt;
&lt;pre id=&quot;code_1623830955429&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ docker pull wordpress:5.7
vagrant@kube-control1:~$ docker pull mysql:5.7

vagrant@kube-control1:~$ docker run -d --name wpdb -e MYSQL_ROOT_PASSWORD=toor -e MYSQL_DATABASE=wpdb -e MYSQL_USER=wp -e MYSQL_PASSWORD=wppass -v wp-vol:/var/lib/mysql mysql:5.7

vagrant@kube-control1:~$ docker run -d -p 8080:80 --name wp --link wpdb:wpdb -e WORDPRESS_DB_HOST=wpdb -e WORDPRESS_DB_USER=wp -e WORDPRESS_DB_PASSWORD=wppass -e WORDPRESS_DB_NAME=wpdb  -v wp-vol:/var/www/html wordpress:5.7&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wordpress와 mysql 이미지 5.7버전을 pull(다운로드)한 뒤, DB, wordpress 순서로 docker run 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;워드프레스는 80번포트를 사용하기 때문에 8080번으로 지정했을 때 확인할 수 있도록 -p 옵션으로 포트포워딩을 해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--link를 해줌으로써 db와 연동시켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;run할 때 자주 사용하는 환경변수들을 각각 지정해주었고, wp-vol이라는 볼륨을 생성하여 각각 위치를 연결시켰다. 따라서 아래와 같이 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1623831107583&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vagrant@kube-control1:~$ docker volume ls
local     wp-vol&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wp-vol 확인됨.&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;이제 새 탭에서 kube-control1의 ip주소를 입력한 뒤, 8080포트로 접근하면 워드프레스 회원가입하는 화면이 등장한다. 아이디와 비밀번호를 입력하고 로그인하면 메인 페이지가 확인된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주소탭 검색 : 192.168.100.11:8080 -&amp;gt; 회원가입 진행 -&amp;gt; 로그인 -&amp;gt; 아래 결과화면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1846&quot; data-origin-height=&quot;875&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WR3Ht/btq7onIOKet/mgNMHmSFQlLH5ciIwRzdJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WR3Ht/btq7onIOKet/mgNMHmSFQlLH5ciIwRzdJ0/img.png&quot; data-alt=&quot;wordpress main page&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WR3Ht/btq7onIOKet/mgNMHmSFQlLH5ciIwRzdJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWR3Ht%2Fbtq7onIOKet%2FmgNMHmSFQlLH5ciIwRzdJ0%2Fimg.png&quot; data-origin-width=&quot;1846&quot; data-origin-height=&quot;875&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;wordpress main page&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;결과적으로 wordpress가 구현되었고, 이제 이 안에서 글을 남기고 댓글을 작성하는 내용들이 mysql db에 저장되게 된다. 간단하게 작업해볼 수 있는 docker로 구현해보는 wordpress 테스트였다. 항상 모든 실습을 마무리할 때에는 vagrant를 halt해서 잠시 멈춰주도록 한다. 그렇지 않으면 호스트 컴퓨터를 종료할 수가 없기 때문이다.&lt;/p&gt;
&lt;pre id=&quot;code_1623831634813&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;user@test:~/vagrant/kubernetes$ vagrant halt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Kubernetes</category>
      <category>docker로 wordpress 구현</category>
      <category>ubuntu 18.04 LTS</category>
      <category>vagrant</category>
      <category>Vagrant 가상머신에 docker로 wordpress 구현(Ubuntu 18.04 LTS)</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/16</guid>
      <comments>https://simroot.tistory.com/16#entry16comment</comments>
      <pubDate>Wed, 16 Jun 2021 17:22:51 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 18.04 Vagrant 설치 및 기본 사용법, 명령어</title>
      <link>https://simroot.tistory.com/15</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;VMware나 VirtualBox처럼 가상머신에 가상 컴퓨터가 많이 올라가있으면 부팅이 안 되는 현상이 발생할 수 있다. 그렇기 때문에 안 쓰는 가상 컴퓨터는 싹 정리해주는 과정이 사전에 필요하다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Kubernetes에 대해 들어가기 앞서 필요한 새로운 툴인 Vagrant를 설치해보려고 한다. Vagrant[베이그런트]는 요즘 핫한 HashiCorp[하쉬코프] 회사의 도구 중 하나이며, Terraform이라는 툴 또한 유명하다. 위키백과에 보면 Vagrant는 포터블 가상화 소프트웨어 개발환경이라고 정의하고 있다. 쉽게 말해서 VM을 코드로 만들어주는 도구이며 테스트 환경에서 주로 사용한다. 지금은 2버전인데, 3버전을 계획하고 있으며 2버전은 Ruby로 만들어졌지만 3버전은 Go lang으로 만들어 질 예정이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;도커처럼 이미지를 받아서 Vagrant를 사용할 수 있다. Vagrant 홈페이지에서 다운로드를 누르면 하단에 시스템 환경에 맞는 버전을 다운받을 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;vagrant 공식 홈페이지&amp;gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;Vagrant by HashiCorp&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Vagrant enables users to create and configure lightweight, reproducible, and portable development environments.&quot; data-og-host=&quot;www.vagrantup.com&quot; data-og-source-url=&quot;https://www.vagrantup.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/EoAvX/hyKyYhGACz/aeFo88DO7hFkIo5homhIQ0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot; data-og-url=&quot;https://www.vagrantup.com/&quot;&gt;&lt;a href=&quot;https://www.vagrantup.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.vagrantup.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/EoAvX/hyKyYhGACz/aeFo88DO7hFkIo5homhIQ0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Vagrant by HashiCorp&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Vagrant enables users to create and configure lightweight, reproducible, and portable development environments.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.vagrantup.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;653&quot; data-filename=&quot;Screenshot from 2021-06-15 09-16-26.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uRB0T/btq7fbBXMBZ/eBkWncwIeXEfPasBaVJBFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uRB0T/btq7fbBXMBZ/eBkWncwIeXEfPasBaVJBFK/img.png&quot; data-alt=&quot;HashiCorp 공식 홈페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uRB0T/btq7fbBXMBZ/eBkWncwIeXEfPasBaVJBFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuRB0T%2Fbtq7fbBXMBZ%2FeBkWncwIeXEfPasBaVJBFK%2Fimg.png&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;653&quot; data-filename=&quot;Screenshot from 2021-06-15 09-16-26.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HashiCorp 공식 홈페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;현재 호스트 Ubuntu가 18.04 LTS 버전이기 때문에 여기에 맞게 Debian 64로 받아주었다. Downloads파일에 저장이 되어 있어서 디렉토리 위치를 이동시켜준 뒤 아래 작업을 실행한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;cd Downloads
sudo dpkg -i vagrant_2.2.16_x86_64.deb
vgrant -v&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;vagrant로 시작하는 버전은 설치파일명을 작성해주면 되며, 세번째 명령어를 이용하여 현재 설치된 vagrant 의 version을 확인할 수 있다. 작업을 할 디렉토리를 지정해두는 게 편하기 때문에 임의의 폴더를 하나 생성한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;mkdir -p /vagrant/kubernetes
cd /vagrant/kubernetes/&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;실습폴더 생성 완료. 만들어준 디렉토리로 이동해준다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;앞서 Vagrant는 이미지를 다운받아 사용할 수 있다고 하였다. 아래의 Vagrant Cloud에서 도커허브처럼 이미지를 확인할 수 있다. 우리는 OS로 ubuntu환경에서 작업을 할 예정이므로 ubuntu/focal64를 다운받을 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;Vagrant Cloude&amp;gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;Vagrant Cloud by HashiCorp&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Vagrant Cloud by HashiCorp&quot; data-og-host=&quot;app.vagrantup.com&quot; data-og-source-url=&quot;https://app.vagrantup.com/boxes/search&quot; data-og-url=&quot;https://app.vagrantup.com&quot;&gt;&lt;a href=&quot;https://app.vagrantup.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://app.vagrantup.com/boxes/search&quot;&gt;
&lt;div class=&quot;og-image&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;Vagrant Cloud by HashiCorp&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Vagrant Cloud by HashiCorp&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;app.vagrantup.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;아래는 홈페이지 이미지 다운로드 화면이다. 다른 OS들도 올라와 있으며 명령어로 다운받을 예정이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1319&quot; data-origin-height=&quot;442&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp5I5f/btq7bCTADZD/k6Kjx0KCsOvnvyt9m3Gcy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp5I5f/btq7bCTADZD/k6Kjx0KCsOvnvyt9m3Gcy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp5I5f/btq7bCTADZD/k6Kjx0KCsOvnvyt9m3Gcy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp5I5f%2Fbtq7bCTADZD%2Fk6Kjx0KCsOvnvyt9m3Gcy1%2Fimg.png&quot; data-origin-width=&quot;1319&quot; data-origin-height=&quot;442&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu bash 쉘 창에서 아래의 명령어를 진행한다. init은 Vagrant를 초기화해주는 명령어이며 도커에서 Dockerfile을 사용하는 것 처럼 Vagrantfile이 생성되어 편집해서 사용할 수 있다. init을 해주면 현재 위치해있는 디렉토리에 vagrant가 만들어졌다고 안내메세지가 뜨는 게 정상이다. 이 상태에서 ls를 입력해보면 Vagrantfile이 정상적으로 생성된 것을 확인할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant init ubuntu/focal64
ls&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;vim을 이용해 Vagrantfile에 들어가보면 이런 내용을 확인할 수 있다. configure(&quot;2&quot;)는 2버전을 의미하며 vm.box는 아까 이미지를 다운로드 했던 버전을 확인해볼 수 있다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vim Vagrantfile &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;534&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GQeuU/btq66VzE7dr/KSa2doJe54K9EKSziXdjak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GQeuU/btq66VzE7dr/KSa2doJe54K9EKSziXdjak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GQeuU/btq66VzE7dr/KSa2doJe54K9EKSziXdjak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGQeuU%2Fbtq66VzE7dr%2FKSa2doJe54K9EKSziXdjak%2Fimg.png&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;534&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;:q! 를 입력하여 이 창을 나와준다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;생성 및 부팅&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이제 이 상태에서 vagrant up을 사용하면 가상환경이 시작된다. 부팅을 하는 것인데, 첫 부팅이면 다운로드도 같이 해주면서 생성된다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant up&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;537&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kLq7a/btq7iuNLjyo/9uLbpz7bAIlEmo4ODeBZYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kLq7a/btq7iuNLjyo/9uLbpz7bAIlEmo4ODeBZYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kLq7a/btq7iuNLjyo/9uLbpz7bAIlEmo4ODeBZYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkLq7a%2Fbtq7iuNLjyo%2F9uLbpz7bAIlEmo4ODeBZYk%2Fimg.png&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;537&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;다운로드를 완료하는 데 까지는 시간이 조금 걸린다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;상태확인&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;상태확인을 하면 현재 러닝중인지 생성만 되었는지 확인할 수 있다. 디폴트 상태로 러닝중이다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant status&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;165&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dquYaJ/btq7gWYlrjL/4IKX70xOKKlD1uylNOBQhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dquYaJ/btq7gWYlrjL/4IKX70xOKKlD1uylNOBQhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dquYaJ/btq7gWYlrjL/4IKX70xOKKlD1uylNOBQhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdquYaJ%2Fbtq7gWYlrjL%2F4IKX70xOKKlD1uylNOBQhK%2Fimg.png&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;165&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ssh 접속, 종료&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;가상머신이 생성되면 ssh로 들어갈 수 있으며 빠져나오려면 exit를 사용한다. Vagrantfile을 변경해준 게 없기 때문에 뒤에 가상머신 이름은 따로 넣지 않고 ssh를 사용해보았다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant ssh &amp;lt;가상머신 이름&amp;gt;
exit&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;413&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1Bogy/btq7bEjCUxS/pe8KRg0mUXfKl0VqrkhpVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1Bogy/btq7bEjCUxS/pe8KRg0mUXfKl0VqrkhpVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1Bogy/btq7bEjCUxS/pe8KRg0mUXfKl0VqrkhpVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1Bogy%2Fbtq7bEjCUxS%2Fpe8KRg0mUXfKl0VqrkhpVk%2Fimg.png&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;413&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;VM 종료&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;running중인 가상컴퓨터(가상머신)을 끄는 명령어다. VM이 셧다운됨을 알 수 있다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant halt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;46&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sLyI2/btq7jyWs5rW/sfIaKCqfNHnUGuAgh4NhV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sLyI2/btq7jyWs5rW/sfIaKCqfNHnUGuAgh4NhV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sLyI2/btq7jyWs5rW/sfIaKCqfNHnUGuAgh4NhV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsLyI2%2Fbtq7jyWs5rW%2FsfIaKCqfNHnUGuAgh4NhV0%2Fimg.png&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;46&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;VM 삭제&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;종료는 다시 시작할 수 있지만, 삭제는 아예 없앨 수 있는 명령어다. 그래서 rm 명령어처럼 삭제할 것인지 재 확인하는 문구가 뜨면 y를 입력해줘야 한다. 실습할 때는 눌러주기 귀찮으니 -f 옵션을 사용해서 한방에 삭제해줄 수도 있다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant destroy -f&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;버전 업데이트&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;추가로 vagrant 버전을 업데이트 해 주는 명령어다. 오늘기준으로 최신 버전으로 업데이트하였다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant box update&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;6월 10일버전이 현재 최신버전임. 아래 결과가 확인된다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;'ubuntu/focal64' (v20210610.0.0) is running the latest version.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Vagrant 작성&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;앞서 Dockerfile이나 Docker-Compose.yml 파일을 사용하는 것 처럼 Vagrant도 Vagrantfile을 사용한다고 했다. 현재 디렉토리에 생성되었던 파일을 참고하여서 작성하여 테스트 해보려고 한다. 먼저 네트워크는 100번대를 사용할 예정인데, 이 대역을 다른 가상머신에서 사용하고 있으면 에러가 나므로 사용하던 네트워크 대역을 삭제하거나 겹치지 않는 대역을 사용하는 것이 중요하다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vim Vagrantfile&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;파일을 아래와 같이 수정해서 테스트하였다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(&quot;2&quot;) do |config|
  # kube-control1 VM
  config.vm.define &quot;kube-control1&quot; do |config|
    config.vm.box = &quot;ubuntu/focal64&quot;
    config.vm.provider &quot;virtualbox&quot; do |vb|
       vb.name = &quot;kube-control1&quot;
       vb.cpus = 2
       vb.memory = 3000
    end
    config.vm.hostname = &quot;kube-control1&quot;
    config.vm.network &quot;private_network&quot;, ip: &quot;192.168.100.11&quot;
  end

  # kube-node1 VM
  config.vm.define &quot;kube-node1&quot; do |config|
    config.vm.box = &quot;ubuntu/focal64&quot;
    config.vm.provider &quot;virtualbox&quot; do |vb|
       vb.name = &quot;kube-node1&quot;
       vb.cpus = 2
       vb.memory = 3000
    end
    config.vm.hostname = &quot;kube-node1&quot;
    config.vm.network &quot;private_network&quot;, ip: &quot;192.168.100.21&quot;
  end

  # kube-node2 VM
  config.vm.define &quot;kube-node2&quot; do |config|
    config.vm.box = &quot;ubuntu/focal64&quot;
    config.vm.provider &quot;virtualbox&quot; do |vb|
       vb.name = &quot;kube-node2&quot;
       vb.cpus = 2
       vb.memory = 3000
    end
    config.vm.hostname = &quot;kube-node2&quot;
    config.vm.network &quot;private_network&quot;, ip: &quot;192.168.100.22&quot;
  end

  # Hostmanager Plugin
  config.hostmanager.enabled = true
  config.hostmanager.manage_guest = true

  # Provision
  config.vm.provision &quot;shell&quot;, inline: &amp;lt;&amp;lt;-SHELL
    sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config
    sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list
    sed -i 's/security.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list
    systemctl restart ssh
    apt update
    apt install -y chrony
  SHELL
end&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;다음은 위 파일에 대한 설명이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. VM 설정&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;3개의 VM을 만들기 위해 kube-로 시작하는 VM을 지정해주었다. 그 중에 설명을 돕기 위해 첫 번째 VM에 대한 설명이다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;config.vm.define &quot;kube-control1&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;VM 이름&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;config.vm.box = &quot;ubuntu/focal64&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;VM 이미지&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;config.vm.provider &quot;virtualbox&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;도구를 virtualbox를 이용하겠다&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vb.name = &quot;kube-control1&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;가상컴퓨터의 이름(ssh 뒤에 이 이름을 넣어 접속함)&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;config.vm.hostname = &quot;kube-control1&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;가상컴퓨터 내에 있는 hostname&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;config.vm.network &quot;private_network&quot;, ip: &quot;192.168.100.11&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;100번대 네트워크를 만들어줄 것인데 ip address를 지정해주었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Hostmanager Plugin&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;plugin에 대한 설정&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Provision&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt; config.vm.provision &quot;shell&quot;, inline:&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;AWS에서 인스턴스 생성 후 자동으로 스크립트를 실행할 수 있는 스크립트 입력란이 있다. 그것과 마찬가지로 쉘 스크립트를 의미하며, 최초 생성시 실행할 스크립트다. sed는 대화 형태의 명령어다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;AWS EC2 instance는 password 인증이 되지 않고 키 기반 인증만 가능하다. 그래서 .pem파일을 다운로드 받아서 사용하였다. 그렇지만 위 sed 뒤의 내용은 패스워드 기반 인증을 허용하게 해 주는 부분이다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sourcees.list
sed -i 's/security.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이 두 줄은 apt 저장소를 바꿔준다. Ubuntu.com으로 셋팅되어 있는데, 이게 한국에서 쓰기에는 꽤 느려서 daum으로 잡아주었다. 빠르게 패키지를 받을 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;사전 플러그인 설치&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Vagrant up을 하기 전 플러그인을 먼저 설치한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant plugin install vagrant-hostmanager
vagrant plugin list&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;vagrant-hostmanager (1.8.9, global) 라는 버전 결과창이 떴다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant up&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;up을 함으로 VM이 생성 및 실행된다. VM을 3개나 생성했기 때문에 시간이 조금 걸린다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 순서&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;네트워크 대역 중복 확인 &amp;ndash; Vagrantfile수정(스크립트 참고) - vagrant hostmanager install &amp;ndash; vagrant up - virtualbox에 가상머신 3대가 띄워져 있는 것을 확인할 수 있음&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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-origin-width=&quot;848&quot; data-origin-height=&quot;305&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Alz6j/btq7ivTvVUE/ZVwLK7uk36wxKkeameCBoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Alz6j/btq7ivTvVUE/ZVwLK7uk36wxKkeameCBoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Alz6j/btq7ivTvVUE/ZVwLK7uk36wxKkeameCBoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAlz6j%2Fbtq7ivTvVUE%2FZVwLK7uk36wxKkeameCBoK%2Fimg.png&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;305&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;확인&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;현재 상태를 확인해보니 VM 3개가 러닝중이다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant status&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;198&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rjc6E/btq69SpcxTj/hzUxyuZWoU22MLHT6K0jqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rjc6E/btq69SpcxTj/hzUxyuZWoU22MLHT6K0jqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rjc6E/btq69SpcxTj/hzUxyuZWoU22MLHT6K0jqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRjc6E%2Fbtq69SpcxTj%2FhzUxyuZWoU22MLHT6K0jqK%2Fimg.png&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;198&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;각 VM으로 접속하기 위해 ssh를 사용한다. 추가로 ip설정이 제대로 되었는지는 /etc/hosts에 가보면 알 수 있다. 처음에 만든 kube-control1으로 접속해서 테스트한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vagrant ssh kube-control1
cat /etc/hosts&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;406&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UtHH1/btq7fbhcTNj/ja10EJCaCpQw9zeIOz5LIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UtHH1/btq7fbhcTNj/ja10EJCaCpQw9zeIOz5LIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UtHH1/btq7fbhcTNj/ja10EJCaCpQw9zeIOz5LIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUtHH1%2Fbtq7fbhcTNj%2Fja10EJCaCpQw9zeIOz5LIK%2Fimg.png&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;406&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;지금까지 Vagrant 설치 및 기본적인 명령어에 대해서 살펴보았다. VM을 GUI가 아닌 CLI에서 사용한다는 점이 신기하기도 하고 생각보다 간단한 명령어라서 사용할 만 한 것 같다(아직까지는ㅎㅎ) HashiCorp사에서 나온 오픈소스 툴을 사용해본 것으로 좋은 경험이라고 생각한다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;다음 포스팅에서는 이 가상머신 안에 도커를 설치하고 wordpress를 구현해 볼 예정이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Kubernetes</category>
      <category>hashicorp</category>
      <category>Ubuntu 18.04 Vagrant 설치 및 기본 사용법</category>
      <category>Vagrant 기본 명령어</category>
      <category>vagrant 사용법</category>
      <category>vagrant 설치</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/15</guid>
      <comments>https://simroot.tistory.com/15#entry15comment</comments>
      <pubDate>Tue, 15 Jun 2021 09:20:02 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 컨테이너란? 가상머신과의 차이, Docker Daemon에 대하여</title>
      <link>https://simroot.tistory.com/13</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;앞서 컨테이너 가상화에 대해 언급을 했다. 리눅스 컨테이너는 컨테이너 가상화 기술을 사용한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이 리눅스 컨테이너에는 애플리케이션이나 그에 따라 필요한 라이브러리나 설정파일 등이 포함되어 있다. 가상머신과는 다르게 가상화 계층이 없고 커널이 별도로 존재하지 않기 때문에 가상머신에 비해서 가볍고 실행속도도 빠르다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;리눅스 컨테이너는 예전부터 사용되어졌지만 도커가 개발된 후로부터 최근 활발하게 사용되고 있다. 도커는 리눅스 컨테이너를 다루는 도구중의 하나이며 도커와 같은 다른 도구들도 있으나 대부분 도커를 사용한다. 컨테이너 런타임이라고도 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;972&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nnK0A/btq6l0T2XlW/kHYAQ7ywTLxULiUsA74Fuk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nnK0A/btq6l0T2XlW/kHYAQ7ywTLxULiUsA74Fuk/img.jpg&quot; data-alt=&quot;가상머신과 컨테이너 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nnK0A/btq6l0T2XlW/kHYAQ7ywTLxULiUsA74Fuk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnnK0A%2Fbtq6l0T2XlW%2FkHYAQ7ywTLxULiUsA74Fuk%2Fimg.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;972&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가상머신과 컨테이너 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;리눅스 컨테이너의 핵심 기술&lt;/span&gt;은 2가지가 있는데 cgroup과 namespace이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. cgroup (control group의 약자)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;프로세스나 쓰레드를 그룹화해서 관리하는 기능, 시스템의 CPU, 메모리, 디스크I/O 등 리소스의 사용을 제한하는 기술이다. 리눅스 컨테이너는 호스트의 리소스를 공유하여 사용하는데, 이 때 cgroup을 사용하여 컨테이너가 사용하는 리소스의 양을 제한할 수 있다. 또한 같은 호스트에서 동작하는 서로 다른 컨테이너에 영향을 주지 않도록 막아주는 역할도 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. namespace&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;space 공간 안에 다수의 오브젝트를 &lt;b&gt;격리(isolation)&lt;/b&gt;할 수 있다. 예를 들어서 동일한 호스트에서 동일한 PID(Process ID)를 가질 수 없지만 서로 다른 namespace에서는 동일한 PID 를 가질 수 있다. 격리되어 있다는 것이 포인트다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;추가로 윈도우 운영체제는 도커 컨테이너를 올릴 수 없으니 하이퍼바이저를 이용해서 도커를 사용한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;Docker Daemon&lt;/span&gt;과 Podman&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Docker 의 구성요소 중 하나로 Docker Daemon이 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;957&quot; width=&quot;629&quot; height=&quot;497&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KBoZu/btq6pU1cqso/QZuZFR64KfTNoABHdI1xZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KBoZu/btq6pU1cqso/QZuZFR64KfTNoABHdI1xZK/img.png&quot; data-alt=&quot;Docker 동작방식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KBoZu/btq6pU1cqso/QZuZFR64KfTNoABHdI1xZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKBoZu%2Fbtq6pU1cqso%2FQZuZFR64KfTNoABHdI1xZK%2Fimg.png&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;957&quot; width=&quot;629&quot; height=&quot;497&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Docker 동작방식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;위의 이미지와 같이 &lt;b&gt;도커는 데몬 위에서 동작한다.&lt;/b&gt; 또한 프로그램이 동작하려면 방식이 3가지가 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;* 데몬 : 부팅시 올라오는 프로그램들&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;* 프로그램 동작방식 3가지&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 부팅시 동작&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;runlevel 같이 부팅할 때 동작하는 개념이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 런레벨에 의존하지 않고 항시 동작시키는 방식&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어서 systemctl enable 설정처럼 부팅시 실행되도록 동작시킬 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) /etc/rc.local에 올려서 동작시키는 방식&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이 방식은 부팅시 부팅 스크립트의 끝자락에 읽어진다. 스크립트가 읽어지게 되면 항시 프로그램을 동작시킬 수 있다. 스크립트를 많이 추가하다보면 복잡해지기도 하고, 여기 올려서 동작시키려면 신뢰할 수 있고 믿을 수 있는 프로그램만 동작시킨다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;podman&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;docker를 사용하다보면 docker daemon이 죽을 가능성이 높다보니 데몬 없이 image, container, kernel에 그냥 던져주기 위해서 나온 것이 바로 podman이다. RHCSA시험이 8버전으로 바뀌면서 podman에 대한 내용이 추가되기도 했다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;docker의 또 한가지 문제는 클러스터링(쉽게 말해서 컨테이너들을 묶어주는 것)을 해주는 쿠버네티스(kubernetes)와는 연동이 잘 안된다. 이미지를 한 개만 올리는 것은 docker나 kubernetes나 어느것을 사용해도 상관이 없지만 보통 일반 회사에서는 컨테이너 이미지를 하나씩 올리는 경우는 거의 없다. docker는 가상화해서 올리는 것도 아니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;podman은 데몬이 아니라 일종의 커맨드처럼 쓰인다. docker는 가상머신에 올리는 것처럼 사용하는 것이 아니지만 podman은 가상머신처럼 사용한다. 운영체제가 올라가고 ssh로 접근해서 제어할 수도 있다. 서비스를 이용하기 위해서는 포트를 열어줘야 한다. 밖에있는 자원을 이용하기 위해서는 마운트도 시켜주는 등 동일하게 사용한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Virtualbox같은 가상머신은 HDD를 장치 디바이스에 인식할 수 있도록 계속 추가했었는데, podman은 외부 리소스를 컨테이너에서 사용하고 있는 tcp, port 관련 영역과 맵핑(연결) 시켜준다. 외부의 디스크를 사용하고 싶다면 관련 명령어도 사용할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;다시 &lt;b&gt;컨테이너&lt;/b&gt;로 돌아와서..&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;isolation(격리)적인 부분에서도 우수한 것은 가상머신이지만, 지금 컨테이너같은 경우에는 구조상 동작하는 프로세스가 직접 노출된다. 자원들도 isolation 되어있는 것이 아니라 밖에있는 외부 자원을 그대로 가져다 쓴다. 대표적으로 도커허브(docker hub) 같은 곳에서 image를 가져다가 쓴다. official하게 도커허브 자체에서 제공해주는 이미지들도 있지만 사용자가 수정 보완해서 만들어놓은 이미지 또한 pull 명령어를 이용해 다운받아서 사용할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;자원을 공유해 사용한다는 것이 편리하고 장점이 있지만 그에 따른 보안 이슈가 존재한다. 외부 자원을 그대로 가져다 쓰는것에 대한 접근 통제가 그만큼 중요시 되고 있다. 실제로 일부 사용자가 만들어놓은 이미지 안에 비트코인 채굴을 위해 다운받아 사용하는 사용자의 CPU를 사용하게 한다거나 랜섬웨어를 깔아놓는 등의 범죄에도 노출되어 있으며 실제 사례이다. 또한 잘못하면 불필요한 정보에 쉽게 노출된다는 단점이 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그럼에도 불구하고 컨테이너기술과 도커, 쿠버네티스는 여전히 핫한 기술이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;또한 쿠버네티스는 AWS, GCP를 지원해준다. 쿠버네티스를 접할 기회가 있었는데, 요즘에는 거의 컨테이너 오케스트레이션으로 쿠버네티스가 독보적이라고 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;위에서 언급한 Podman은 Pod Manager tool 의 약자로 OCI 표준 container와 런타임을 개발, 관리, 실행할 수 있게 해주는 container engine 이다. 레드햇에서 쿠버네티스에 올릴 수 있도록 만들어 놓은 것이다. 도커와 명령어가 완전히 똑같기 때문에 docker라는 이름 대신 podman으로 변경해서 사용하면 쉽게 익숙해질 수 있다. 요즘엔 또 podman으로 컨테이너를 관리해서 쿠버네티스와 연동한다는데 실제로 쓰는 사람은 아직 본 적이 없다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;글을 쓰면서 주제가 조금씩 바뀌기도 해서 내용이 들쑥날쑥이지만, 앞으로는 개념적인 부분도 쉽게 설명할 예정이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 추천 책&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;가장 빨리만나는 도커(Docker)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 출처 및 참고자료&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.weave.works/blog/a-practical-guide-to-choosing-between-docker-containers-and-vms&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://www.weave.works/blog/a-practical-guide-to-choosing-between-docker-containers-and-vms&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;A Practical Guide to Choosing between Docker Containers and VMs&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Docker, Kubernetes, and containers are indeed powerful technologies that can bring many benefits to a business. But they are not necessarily the right choice for every workload. In some cases, you&amp;rsquo;re better off sticking with simple virtual machines.&quot; data-og-host=&quot;www.weave.works&quot; data-og-source-url=&quot;https://www.weave.works/blog/a-practical-guide-to-choosing-between-docker-containers-and-vms&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3xK8V/hyKqVmjOix/Kk5o8RmKTT0qDXLDB8Anjk/img.jpg?width=1152&amp;amp;height=583&amp;amp;face=0_0_1152_583&quot; data-og-url=&quot;https://www.weave.works/blog/a-practical-guide-to-choosing-between-docker-containers-and-vms&quot;&gt;&lt;a href=&quot;https://www.weave.works/blog/a-practical-guide-to-choosing-between-docker-containers-and-vms&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.weave.works/blog/a-practical-guide-to-choosing-between-docker-containers-and-vms&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3xK8V/hyKqVmjOix/Kk5o8RmKTT0qDXLDB8Anjk/img.jpg?width=1152&amp;amp;height=583&amp;amp;face=0_0_1152_583');&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;A Practical Guide to Choosing between Docker Containers and VMs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Docker, Kubernetes, and containers are indeed powerful technologies that can bring many benefits to a business. But they are not necessarily the right choice for every workload. In some cases, you&amp;rsquo;re better off sticking with simple virtual machines.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.weave.works&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.lesstif.com/container/podman-98926748.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://www.lesstif.com/container/podman-98926748.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;podman 소개 및 설치&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.lesstif.com&quot; data-og-source-url=&quot;https://www.lesstif.com/container/podman-98926748.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9gyRA/hyKqRjpWcM/9aKjxuwes6QRrKZ8wk3fU1/img.png?width=3017&amp;amp;height=1208&amp;amp;face=0_0_3017_1208&quot; data-og-url=&quot;https://www.lesstif.com/container/podman-98926748.html&quot;&gt;&lt;a href=&quot;https://www.lesstif.com/container/podman-98926748.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.lesstif.com/container/podman-98926748.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9gyRA/hyKqRjpWcM/9aKjxuwes6QRrKZ8wk3fU1/img.png?width=3017&amp;amp;height=1208&amp;amp;face=0_0_3017_1208');&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;podman 소개 및 설치&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;www.lesstif.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Docker</category>
      <category>Docker daemon</category>
      <category>podman</category>
      <category>리눅스 컨테이너란</category>
      <category>리눅스 컨테이너와 가상머신의 차이</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/13</guid>
      <comments>https://simroot.tistory.com/13#entry13comment</comments>
      <pubDate>Thu, 3 Jun 2021 10:08:50 +0900</pubDate>
    </item>
    <item>
      <title>도커 입문 : 가상화의 배경과 종류</title>
      <link>https://simroot.tistory.com/12</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;요즘 컨테이너 기술이 발전하면서 도커와 쿠버네티스를 공부하는 사람들이 많아졌다. 도커 입문자들을 위해 기초적인 가상화 개념과 리눅스 컨테이너의 개념들에 대해서 정리해보려고 한다. 리눅스 기초지식이 있는 사람들 대상으로 실습을 하는게 맞다고 생각은 하지만, 비전공자 중 IT회사에서 살아남아야 하는 직장인들을 위해서도 쉽게 설명해보려고 한다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 배경&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어 산업이 엄청나게 성장하면서 성능이 좋은 하드웨어들을 구하기가 쉬워졌다. 그래서 2000년도부터 가상화 기술이 떠오르고 있다. 활용하지 않는 자원을 낭비하지 않고 잘 쓰기 위해서 현재까지 오게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 종류&lt;/b&gt;&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;&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;span style=&quot;background-color: #ffc9af;&quot;&gt;1. 서버 가상화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하이퍼바이저(windows의 hyper V, VMware, Xen, VirtualBox, KVM 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 프로그램을 이용하기도 하며 흔히 아는 일반적인 가상화 기술이다. CPU나 메모리 등을 논리적으로 나눠서 사용할 수 있게 해주는 기술이다. 가상 머신을 생성하려면 CPU나 메모리와 같은 시스템 자원을 나눠주는 파티셔닝 기술이 필요하다. 이 파티셔닝 기술은 하드웨어 파티셔닝과 소프트웨어 파티셔닝이 있지만, 현재 소프트웨어 파티셔닝 기술이 주로 사용되고 있다. 소프트웨어 파티셔닝은 소프트웨어를 사용하여 가상 머신에게 시스템 자원을 할당하게 되는데, 이때 사용하는 소프트웨어를 하이퍼바이저라고 한다. 필수도구이며 쉽게 접할 수 있을 것이다.&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;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;2. 네트워크 가상화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NFV(Network Function Virtualization), SDN(Software Defined Network)&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;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;3. 스토리지 가상화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SDS(Software Defined Storage)기술이 주목받고 있으며, 대표적인 오픈소스 SDS 스토리지로 Ceph와 Glusterfs가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAID처럼 물리적인 드라이브를 논리적으로 나눠서 사용하는 기술이다.&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: #ffc9af;&quot;&gt;4. 컨테이너 가상화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker가 대표적이다.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;1208&quot; width=&quot;568&quot; height=&quot;507&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k6x7e/btq6heGev1y/Z0aaiT7Ohr7uoi90HfVNb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k6x7e/btq6heGev1y/Z0aaiT7Ohr7uoi90HfVNb0/img.png&quot; data-alt=&quot;docker logo (귀요미 도커 고래)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k6x7e/btq6heGev1y/Z0aaiT7Ohr7uoi90HfVNb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk6x7e%2Fbtq6heGev1y%2FZ0aaiT7Ohr7uoi90HfVNb0%2Fimg.png&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;1208&quot; width=&quot;568&quot; height=&quot;507&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker logo (귀요미 도커 고래)&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;&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;gt; 컨테이너 -&amp;gt; 도커(컨테이너를 다루는 종류 중 하나임) -&amp;gt; 쿠버네티스 순으로 확장되어 나갈 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Docker</category>
      <category>가상화의 배경과 종류</category>
      <category>도커입문</category>
      <category>서버가상화</category>
      <category>컨테이너가상화</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/12</guid>
      <comments>https://simroot.tistory.com/12#entry12comment</comments>
      <pubDate>Tue, 1 Jun 2021 17:56:44 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 기본 명령어</title>
      <link>https://simroot.tistory.com/11</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;* 리눅스 기본 명령어&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. 복사 : cp&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;복사를 하기 위한 명령어. 내가 사용하는 CentOS 7 기준으로 alias에는 cp 명령어 입력 시 -i 옵션이 기본으로 적용되어 있다. bash shell 창에 alias 입력할 경우 다음과 같이 뜬다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;alias cp = 'cp -i'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기본적으로 대화형으로 동작을 하겠다는 뜻. 혹시 실수로 눌렀을 수 있고 덮어쓰기를 방지하기 위한 확인 작업으로 yes / no를 입력해줘야 복사가 된다. 파일 복사를 할 경우 cp를 사용하면 되며, 디렉토리 복사를 하기 위해서는 -r옵션을 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. 이동 : mv&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;파일을 다른 디렉토리로 옮길 수 있다. 복사 붙여넣기는 파일 용량이 많을 경우 오래 걸리는 데 비해 잘라내기 후 붙여넣기는 시간이 오래 걸리지 않는다. 그 원리는 바로 저장되어 있는 파일에 위치만 바뀌기 때문이다. 그렇기에 속도가 빠르고, ls -l로 조회했을 경우 수정시간 등의 졍보도 그대로 조회된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. 파일 생성 : touch&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;파일을 생성할 때 쓰는 명령어.&lt;/p&gt;
&lt;p&gt;쉘에서 man touch를 입력하면 touch의 매뉴얼을 볼 수 있다. 매뉴얼상에 설명된 touch의 기능은 change file timestamp이다. 파일의 수정 시간을 변경해주는 명령어라고도 할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4. 디렉토리 생성 : mkdir&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;디렉토리를 생성할 때 쓰는 명령어.&lt;/p&gt;
&lt;p&gt;여러개의 디렉토리를 한줄로 만들고싶을 때&lt;span style=&quot;color: #333333;&quot;&gt;(정확하게는 계층적으로 만들기)&lt;/span&gt; mkdir을 사용하면 에러가 뜬다. 각 디렉토리를 순차적으로 하나씩 만드는 것이 원칙이기 때문이다. 그렇지만 -p 옵션 하나만 사용해주면 디렉토리를 동시에 여러개 생성할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5. 파일 삭제 : rm&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;파일을 삭제해주는 명령어.&lt;/p&gt;
&lt;p&gt;1번의 cp나 mv 명령어와 마찬가지로 alias rm을 입력해보면 -i옵션이 기본적으로 적용되어 있음을 알 수 있다. 화면의 yes / no 를 매번 입력해 주는 것이 귀찮다면 -f 옵션을 사용하면 된다. 디렉토리를 생성할때나 옮길 때는 상관 없겠지만, rm 명령어에서는 특별히 주의해야한다. 실수로 루트 디렉토리를 rm 해버린다면 어마무시한 일이 일어날 지도 모름&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;6. 디렉토리 삭제 : rmdir&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;디렉토리를 삭제해주는 명령어.&lt;/p&gt;
&lt;p&gt;사용이 빈번하지는 않다. 지우려고 하는 디렉토리가 텅 비어있어야 지워지는 명령어이기 때문이다. 그렇기 때문에 뭔가 들어있는 디렉토리를 지우고 싶다면 -r 옵션을 함께 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;7. 링크 : ln&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;파일이나 디렉토리에 접근을 쉽게 할 수 있도록 하는 방법이다.&lt;/p&gt;
&lt;p&gt;복사랑은 다르게 영어 뜻대로 연결되어있다. C언어를 배운 사람이라면 포인터 개념에 대해 들어봤을 것이다. 포인터와 비슷하다. 링크도 2가지가 있다. 자세한 차이에 대한 내용은 추후 포스팅해볼 예정이다. 마찬가지로 지울 땐 rm 명령어를 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;-하드링크&lt;/b&gt; : ln&lt;/p&gt;
&lt;p&gt;&lt;b&gt;-심볼릭 링크&lt;/b&gt; : ln -s&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;8. 파일 내용 검색 : grep, egrep, fgrep&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;- grep : global regular expression print&lt;/p&gt;
&lt;p&gt;특정 문자나 패턴들을 검색하는 명령어. 여기서 기능이 추가되어 egrep, fgrep이 나왔다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;- egrep : extended &lt;span style=&quot;color: #333333;&quot;&gt;global regular expression print&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;grep에서 확장된 명령어. 추가적인 기능이 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;- fgrep : fixed &lt;span style=&quot;color: #333333;&quot;&gt;global regular expression print&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위 명령어와 같으나 쉽게 생각해서 특수문자를 escape처리해주는 기능이 있는 명령어다. 귀찮게 백슬래시(\) 사용을 하지 않아도 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;11. 파일 및 디렉토리 검색 : find&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;특정 파일이나 디렉토리를 검색하기 위해 사용하는 명령어.&lt;/p&gt;
&lt;p&gt;파일 이름이나 크기, 시간 등 조건을 다양하게 주어서 검색할 수 있다. 옵션도 엄청 많다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux</category>
      <category>리눅스 기본 명령어</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/11</guid>
      <comments>https://simroot.tistory.com/11#entry11comment</comments>
      <pubDate>Tue, 4 May 2021 18:01:13 +0900</pubDate>
    </item>
    <item>
      <title>CLI, TUI, GUI 특징과 리눅스 배포판에 대하여</title>
      <link>https://simroot.tistory.com/10</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;리눅스를 사용하다보면 다양한 명령어를 접할 수 있다. 한 가지 예로 네트워크가 잘 안될 때 명령어가 아래와 같이 3가지가 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;nmcli&lt;/b&gt; connection up &lt;u&gt;enp0s34&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;nmtui&lt;/b&gt; ~&lt;/p&gt;
&lt;p&gt;&lt;b&gt;nm-connection-editor&lt;/b&gt; ~&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 enp0s34는 이더넷 이름을 말한다. 중요하게 봐야 할 부분은 nm으로 시작하는 명령어다. cli, tui, 그리고 에디터가 나오는데, 세가지의 특징에 대해 살펴보려고 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- CLI : Command Line Interface&lt;/p&gt;
&lt;p&gt;- TUI : Text User Interface&lt;/p&gt;
&lt;p&gt;- GUI : Graphical User Interface&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;CLI &lt;span style=&quot;color: #333333;&quot;&gt;: Command Line Interface&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;리눅스 쉘이나 윈도우의 cmd창에서 볼 수 있는 까만색 배경의 글씨를 입력하는 상자를 본 적이 있을 것이다. 이런 텍스트 기반의 형태를 CLI라고 한다. 커맨드 라인 인터페이스인데, interface라는 이름 자체도 무언가 접속할 수 있도록 접근을 도와주는 장치이기 때문에 라인별로 명령어를 입력해서 시스템에 접근할 수 있게 해주는게 CLI이다. 우리는 윈도우의 이미지(그래픽) 형태가 익숙하지만, 엔지니어로 일하기 위해서는 리눅스의 CLI방식에 익숙해져야한다. 명령어를 라인별로, 또는 세미콜론(;)을 사용해서 한 줄로 입력하여 시스템을 동작시킬 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;TUI : &lt;span style=&quot;color: #333333;&quot;&gt;Text User Interface&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;TUI는 Text User Interface인데 텍스트라는 이름만 보고 글씨를 입력하는건가 싶겠지만, 텍스트 기반의 대화형 인터페이스이다. 리눅스의 기본 쉘인 Bash Shell 창 안에서 nmtui 명령어를 입력하면 아래와 같은 화면을 확인할 수 있다. 키보드 화살표 키랑 엔터키 이용해서 선택할 수 있다. 아래의 화면은 리눅스 쉘 안에서 텍스트형태로 표시되는 것이다. 밑에 있는 모든 문자나 도형스타일도 다 ASCII text로 만든 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-05-03 17-04-02.png&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;451&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkDc6I/btq36ZpwDow/7hKtd2roGv4IQnbC1bVxmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkDc6I/btq36ZpwDow/7hKtd2roGv4IQnbC1bVxmk/img.png&quot; data-alt=&quot;TUI :&amp;amp;amp;nbsp;Text User Interface&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkDc6I/btq36ZpwDow/7hKtd2roGv4IQnbC1bVxmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkDc6I%2Fbtq36ZpwDow%2F7hKtd2roGv4IQnbC1bVxmk%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-05-03 17-04-02.png&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;451&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;TUI :&amp;nbsp;Text User Interface&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;GUI : Graphical User Interface&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막 nm-connection-editor 명령어를 입력하면 그래픽 형태로 네트워크 팝업이 뜨면서 인터넷을 클릭, 엔터 등의 방법으로 선택할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-05-03 17-04-21.png&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;352&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rqpHj/btq31ar4sXG/wKgca9Rmotyn8STiBFMEL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rqpHj/btq31ar4sXG/wKgca9Rmotyn8STiBFMEL1/img.png&quot; data-alt=&quot;GUI : Graphical User Interface&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rqpHj/btq31ar4sXG/wKgca9Rmotyn8STiBFMEL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrqpHj%2Fbtq31ar4sXG%2FwKgca9Rmotyn8STiBFMEL1%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-05-03 17-04-21.png&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;352&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GUI : Graphical User Interface&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;리눅스 배포판&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ubuntu나 CentOS같은 차이를 의미하는 것을 리눅스 배포판(Distribution)이라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- Debian 계열 : Ubuntu&lt;/p&gt;
&lt;p&gt;- Redhat 계열 : Redhat Enterprise Linux(RHEL), CentOS, Fedora&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앞서 포스팅한 글에서 언급했듯이 리눅스의 계보에 대해서는 구글링 한 번만 하면 이미지로도 확인할 수 있다. 오픈소스라는 개념이 무색하게 레드햇 계열의 리눅스 배포판은 제대로 사용하려면 비용을 지불해야 한다. CentOS나 Fedora같은 경우에는 무료로 사용할 수 있고, RHEL에서 테스트해볼 수 없는 기능들도 들어와있기도 하다. 돈내고 사용하는 사람들한테 새로운 기능을 테스트해보라고 할 수는 없으니 무료 사용자들이 테스트해보고 오류도 보내고 하면서 RHEL버전에 참고하여 업데이트하고 있는 것 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 많은 가지들을 다 공부하려면 평생이 걸릴 것 같지만, 우선은 리눅스 하나만 제대로 파보는 것이 중요할 것 같다. 마치 C언어를 다 깨우쳤을 때 다른 언어도 쉽게 배울 수 있는 것 처럼?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;* 리눅스를 공부하기 전 찾아볼만 한 인물들&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1620030050357&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;리누스 토르발스 - 나무위키&quot; data-og-description=&quot;그의 종특은 맘에 안 드는 것은 뭐든지 까는 것으로, 거친 언사도 서슴지 않으며, 일반인들과도 뉴스그룹, 이메일 등지에서 키배를 자주 뜨는 현장을 목격할 수 있다. 특히 리눅스 개발 커뮤니티&quot; data-og-host=&quot;namu.wiki&quot; data-og-source-url=&quot;https://namu.wiki/w/%EB%A6%AC%EB%88%84%EC%8A%A4%20%ED%86%A0%EB%A5%B4%EB%B0%9C%EC%8A%A4&quot; data-og-url=&quot;https://namu.wiki/w/%EB%A6%AC%EB%88%84%EC%8A%A4%20%ED%86%A0%EB%A5%B4%EB%B0%9C%EC%8A%A4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bGQPXF/hyJ4Wd17XO/JTeGSIT1VhKGsc3AZ5wjE0/img.jpg?width=582&amp;amp;height=415&amp;amp;face=297_42_390_143,https://scrap.kakaocdn.net/dn/b5E4bQ/hyJ48MiRiq/eK7ClVyi7YtpVKLBO7jqHk/img.jpg?width=550&amp;amp;height=278&amp;amp;face=156_23_392_182,https://scrap.kakaocdn.net/dn/ci270E/hyJ4XD1iXo/QSq1y4bmbVodNKCptWktnK/img.jpg?width=250&amp;amp;height=372&amp;amp;face=106_68_181_150&quot;&gt;&lt;a href=&quot;https://namu.wiki/w/%EB%A6%AC%EB%88%84%EC%8A%A4%20%ED%86%A0%EB%A5%B4%EB%B0%9C%EC%8A%A4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://namu.wiki/w/%EB%A6%AC%EB%88%84%EC%8A%A4%20%ED%86%A0%EB%A5%B4%EB%B0%9C%EC%8A%A4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bGQPXF/hyJ4Wd17XO/JTeGSIT1VhKGsc3AZ5wjE0/img.jpg?width=582&amp;amp;height=415&amp;amp;face=297_42_390_143,https://scrap.kakaocdn.net/dn/b5E4bQ/hyJ48MiRiq/eK7ClVyi7YtpVKLBO7jqHk/img.jpg?width=550&amp;amp;height=278&amp;amp;face=156_23_392_182,https://scrap.kakaocdn.net/dn/ci270E/hyJ4XD1iXo/QSq1y4bmbVodNKCptWktnK/img.jpg?width=250&amp;amp;height=372&amp;amp;face=106_68_181_150');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;리누스 토르발스 - 나무위키&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;그의 종특은 맘에 안 드는 것은 뭐든지 까는 것으로, 거친 언사도 서슴지 않으며, 일반인들과도 뉴스그룹, 이메일 등지에서 키배를 자주 뜨는 현장을 목격할 수 있다. 특히 리눅스 개발 커뮤니티&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;namu.wiki&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1620030071657&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;리처드 스톨먼 - 나무위키&quot; data-og-description=&quot;이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권&quot; data-og-host=&quot;namu.wiki&quot; data-og-source-url=&quot;https://namu.wiki/w/%EB%A6%AC%EC%B2%98%EB%93%9C%20%EC%8A%A4%ED%86%A8%EB%A8%BC&quot; data-og-url=&quot;https://namu.wiki/w/%EB%A6%AC%EC%B2%98%EB%93%9C%20%EC%8A%A4%ED%86%A8%EB%A8%BC&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/r2baz/hyJ45hJw2Z/HeTxyDh6ikkhWvpJQYtrmk/img.jpg?width=576&amp;amp;height=383&amp;amp;face=210_132_295_225,https://scrap.kakaocdn.net/dn/oshpu/hyJ4ZBN24O/BaZtjIsm1VWsKh5pAxT3S0/img.jpg?width=432&amp;amp;height=324&amp;amp;face=190_102_303_225,https://scrap.kakaocdn.net/dn/8nH9B/hyJ4Wyki30/h8XPRkqEYikq6KmsIEHIL1/img.jpg?width=250&amp;amp;height=375&amp;amp;face=71_63_158_158&quot;&gt;&lt;a href=&quot;https://namu.wiki/w/%EB%A6%AC%EC%B2%98%EB%93%9C%20%EC%8A%A4%ED%86%A8%EB%A8%BC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://namu.wiki/w/%EB%A6%AC%EC%B2%98%EB%93%9C%20%EC%8A%A4%ED%86%A8%EB%A8%BC&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/r2baz/hyJ45hJw2Z/HeTxyDh6ikkhWvpJQYtrmk/img.jpg?width=576&amp;amp;height=383&amp;amp;face=210_132_295_225,https://scrap.kakaocdn.net/dn/oshpu/hyJ4ZBN24O/BaZtjIsm1VWsKh5pAxT3S0/img.jpg?width=432&amp;amp;height=324&amp;amp;face=190_102_303_225,https://scrap.kakaocdn.net/dn/8nH9B/hyJ4Wyki30/h8XPRkqEYikq6KmsIEHIL1/img.jpg?width=250&amp;amp;height=375&amp;amp;face=71_63_158_158');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;리처드 스톨먼 - 나무위키&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;namu.wiki&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux</category>
      <category>CLI TUI GUI 차이</category>
      <category>CLI TUI GUI 특징</category>
      <category>리눅스 배포판</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/10</guid>
      <comments>https://simroot.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 3 May 2021 17:22:53 +0900</pubDate>
    </item>
    <item>
      <title>유닉스의 탄생, 기초 및 특징</title>
      <link>https://simroot.tistory.com/9</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;유닉스, 리눅스, 윈도우 등 우리가 흔히 부르고 있는 이 개념은 크게 &quot;운영체제&quot;라고 불린다. 영어로 하면 Operating System. 줄여서 OS라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;과거의 컴퓨터인 애니악, 애드박도 많이 들어봤을텐데, 지금 쓰는 컴퓨터와는 달리 빨리 계산하는 측면에서 했던 것들이다. 군사적인 목적, 전쟁 때 사용하던 컴퓨터다. 물론 사람이 할 수도 있겠지만 사람이 계산하기 끝날때 쯤이면 그 암호는 끝나게 된다. 이런 것들을 빨리 해주기 위해 나타난 것이 컴퓨터다. 지금 우리가 사용하는 컴퓨터는 이 때의 컴퓨터의 용도와 다르다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;과거에는 트랜지스터라는 것도 사용하고 칩 같은것들도 발전했다. 이것들은 하드웨어적인 부분에 가깝다. 앞으로 정리해볼 유닉스와 리눅스에 대해서 기초부터 정리를 해 보면서 공부할 예정이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;유닉스의 탄생&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;유닉스는 1960년대 중반, 70년대 초반쯤에 켄 톰슨과 데니스 리치라는 사람에 의해 개발되었다. 컴퓨터 공학도라면 꼭 배워보는 C언어를 만든 사람이 바로 아래의 데니스 리치다. C언어든 유닉스든 배우기도 어려운데 만든 사람은 얼마나 똑똑할지?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1620007605063&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;데니스 리치 - 위키백과, 우리 모두의 백과사전&quot; data-og-description=&quot;위키백과, 우리 모두의 백과사전. 데니스 매캘리스테어 리치(영어: Dennis Ritchie, 1941년 9월 9일 ~ 2011년 10월 12일)는 미국의 저명한 전산학자이자 현대 컴퓨터의 선구자이다. C와 유닉스의 개발자로 &quot; data-og-host=&quot;ko.wikipedia.org&quot; data-og-source-url=&quot;https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%8B%88%EC%8A%A4_%EB%A6%AC%EC%B9%98&quot; data-og-url=&quot;https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%8B%88%EC%8A%A4_%EB%A6%AC%EC%B9%98&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bvyfmV/hyJ3jVTs7d/jYAJ3n1i71eQlUZAjDFCIk/img.jpg?width=558&amp;amp;height=717&amp;amp;face=101_188_289_393,https://scrap.kakaocdn.net/dn/64gyC/hyJ3sZDdVp/t3LMx5DlyoJKStryw4Aq8k/img.jpg?width=249&amp;amp;height=320&amp;amp;face=44_80_132_176&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%8B%88%EC%8A%A4_%EB%A6%AC%EC%B9%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%8B%88%EC%8A%A4_%EB%A6%AC%EC%B9%98&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bvyfmV/hyJ3jVTs7d/jYAJ3n1i71eQlUZAjDFCIk/img.jpg?width=558&amp;amp;height=717&amp;amp;face=101_188_289_393,https://scrap.kakaocdn.net/dn/64gyC/hyJ3sZDdVp/t3LMx5DlyoJKStryw4Aq8k/img.jpg?width=249&amp;amp;height=320&amp;amp;face=44_80_132_176');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;데니스 리치 - 위키백과, 우리 모두의 백과사전&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;위키백과, 우리 모두의 백과사전. 데니스 매캘리스테어 리치(영어: Dennis Ritchie, 1941년 9월 9일 ~ 2011년 10월 12일)는 미국의 저명한 전산학자이자 현대 컴퓨터의 선구자이다. C와 유닉스의 개발자로&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;ko.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;한 운영체제 안에서 멀티로 작업을 수행할 수 있도록 멀틱스(Multics)프로젝트가 시작되었는데, 이 프로젝트가 종료되고 이후 유닉스(Unics)가 등장했다. 유니캐스트는 1:1작업을 할 수 있게 해주는 용어로도 사용되는데, 그런 용어에서도 알 수 있듯 유닉스는 1개의 작업에 집중하자, 멀틱스는 다수의(Multi) 프로세스 기반의 프로그램을 만들자라고 쉽게 생각할 수 있다. 그렇지만 또 막상 이렇게 단순하게 나누기란 쉽지 않으며 유닉스 또한 다중 사용자를 지원하도록 되어있어서 이런 역사를 거쳐서 유닉스라는 용어가 등장했다는 점만 알고 있으면 될 것 같다. 유닉스(Unics)라는 용어에서 우리가 알고있는 유닉스(UNIX)라는 용어가 등장하게 되었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;유닉스의 종류&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;유닉스라는 운영체제는 무료로 사용 가능한, 지금 말로 하면 오픈소스이다. 그렇다보니 유닉스에서 착안해내 다양한 OS들이 파생되어져왔다. 지금 제일 많이 사용하는 리눅스(linux) 또한 유닉스 계열의 운영체제이며, Debian 계열의 Ubuntu와 Redhat 계열의 CentOS 등이 유명하다. &quot;유닉스 계보&quot; 및 &quot;linux distribution timeline&quot;을 구글링해보면 엄청나게 파생된 유닉스, 리눅스 계보에 대해 확인해볼 수 있다. 아래 사진은 너무 길어서 확대하지 않으면 보이지도 않는다. 오픈소스라는 점이 집단지성과 맞물려서 엄청난 발전을 이뤄낸 것 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;1373&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LMjz7/btq3Woc0Ggs/VXR3FqEG2je9XLYXlx3Jk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LMjz7/btq3Woc0Ggs/VXR3FqEG2je9XLYXlx3Jk1/img.png&quot; data-alt=&quot;https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC:Linux_Distribution_Timeline.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LMjz7/btq3Woc0Ggs/VXR3FqEG2je9XLYXlx3Jk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLMjz7%2Fbtq3Woc0Ggs%2FVXR3FqEG2je9XLYXlx3Jk1%2Fimg.png&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;1373&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC:Linux_Distribution_Timeline.svg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;유닉스는 IBM, HP, ORACLE, APPLE 등의 기업에서 다양한 이름의 유닉스들을 만들어냈다. 이렇게 제조사도 다 다르고 이름들도 다르지만 유닉스 계열의 운영체제들은 비슷한 명령어를 가지고 있기 때문에 기본적인 개념만 알고 있다면 다른 OS도 쉽게 적응하여 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;유닉스의 특징&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;특히 서버를 만들 때 유닉스와 리눅스를 많이 사용한다. 윈도우 서버도 있지만 가격적인 부분이 너무 비싸다. 유닉스와 리눅스는 오픈소스이기 때문에 가격적인 면에도(물론 서버는 다 비싸다) 부담이 덜 하고, 특히 오랜 기간동안 발전되었기 때문에 안정성이 높아서 보안적인 측면에서도 괜찮다. 그리고 pc를 쓸 때 윈도우 같은 경우 C드라이브나 D드라이브처럼 디스크를 나누는데, 유닉스계열의 운영체제는 이렇게 나누기만 하는 것이 아니라 계층적으로 개발을 했기 때문에 트리구조를 띈다. root라는 시스템은 오직 1개만 존재한다. 더 많은 개념들은 공부를 하면서 누적해나갈 예정이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux</category>
      <category>유닉스 기초</category>
      <category>유닉스의 종류</category>
      <category>유닉스의 탄생</category>
      <category>유닉스의 특징</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/9</guid>
      <comments>https://simroot.tistory.com/9#entry9comment</comments>
      <pubDate>Mon, 3 May 2021 11:35:53 +0900</pubDate>
    </item>
    <item>
      <title>MTU(Maximun Transmission Unit)과 fragmentation(단편화)</title>
      <link>https://simroot.tistory.com/8</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위키백과에서는 전송할 수 있는 최대 프로토콜 데이터 단위의 크기를 &lt;b&gt;MTU&lt;/b&gt;라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다른 말로는 패킷 또는 프레임 기반의 네트워크 전송될 수 있는 최대 크기의 패킷 또는 프레임입니다. Ethernet 프레임을 제외한 IP datagram(OSI 7 Layer 3계층에서 쓰이는 용어)의 최대 크기를 의미합니다. 또한 Maximun Transmission Unit이라는 이름 그대로 최대 전송 단위를 의미합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;* Linux Ubunt 환경에서 쉘 창에 ifconfig를 입력하면 MTU를 찾아볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-04-22 16-53-56.png&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;22&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9gAFH/btq3hm626l5/Udos2idhmsKwYfW4GjerSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9gAFH/btq3hm626l5/Udos2idhmsKwYfW4GjerSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9gAFH/btq3hm626l5/Udos2idhmsKwYfW4GjerSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9gAFH%2Fbtq3hm626l5%2FUdos2idhmsKwYfW4GjerSK%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-04-22 16-53-56.png&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;22&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 같이 오른쪽에 mtu 1500이라는 내용을 찾아볼 수 있습니다. Ethernet 환경에서는 MTU의 기본값을 1500으로 고정해서 사용합니다. 임의로 사용자가 2000이나 다른 숫자로 변경해서 사용할 수도 있습니다. 한 때 이 MTU값을 크게 늘리면 속도가 더 빨라진다는 루머가 있었는데, 사실 여기서 MTU값을 아무리 늘린다 해도 다른곳으로 패킷이나 프레임을 전송,전송,전송 되어질 때 결국 다른 전송층에서 작게 쪼개야 하는건 변함이 없기 때문에 속도에는 변함이 없습니다. 그래서 기본값 1500을 그대로 사용하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;크기는 byte를 사용하고 있고(위에서는 1500byte네요), 이 MTU지표는 쉽게 말해서 통신을 할 때 데이터의 양이 많을 경우, 그것을 쪼개서 보낼 수 있는데 1500byte로 자르겠다는 의미입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MTU가 1500이면 IP header 20byte를 기본적으로 가져가기 때문에 실제 사용할 수 있는 데이터는 1480byte가 됩니다. 그래서 4000byte인 데이터그램이 있다고 한다면 IP header 20byte를 쓰기 때문에 실제 사용할 수 있는 데이터그램은 3980byte가 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 용어정리&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ID : 각 패킷의 ID값(sender)&lt;/p&gt;
&lt;p&gt;Flag : fragmentation이 됐는지 안 됐는지 나타내주는 값&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 1 : 뒤에 단편화 된 패킷이 존재한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 0 : 뒤에 단편화 된 패킷이 존재하지 않는다.&lt;/p&gt;
&lt;p&gt;Offset : 전체 패킷에서의 위치&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 첫번째 flag의 offset값은 0이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 두번째부터는 flag 전체 패킷값을 8로 나눈다. 이렇게 하는 이유는 양이 너무 많아서 줄이기 위함이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이제 MTU에 대한 이해가 어느정도 되었다면, 예시를 통해서 계산해보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* IP fragmentation 예제&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ex. 3980byte의 데이터그램을&amp;nbsp; 1500MTU로 분할해보기.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;DATA가 3980byte이면 ip header값은 20byte이므로 전체 길이(lenth)는 4000이 된다.&lt;/p&gt;
&lt;p&gt;ID는 sender의 id값인데 임의로 777이라고 설정할 수 있다.&lt;/p&gt;
&lt;p&gt;Flag는 아직 fragmentation(분할해주는 작업)이 안 되었기 때문에 뒤에 단편화 된 패킷이 존재하지 않아 0이다.&lt;/p&gt;
&lt;p&gt;Offset은 전체 패킷에서 첫번째에 위치해있기 때문에 0이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;보기 쉽게 아래와 같이 적을 수 있다.&lt;/p&gt;
&lt;p&gt;-&amp;gt; DATA&amp;nbsp;&amp;nbsp;3980byte + ip | length = 4000 | ID=777 | flag = 0 | offset = 0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-04-22 17-32-26.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;303&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mQxqt/btq3at8bB7x/ObRHjU9mBDrRK6MMjzNMh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mQxqt/btq3at8bB7x/ObRHjU9mBDrRK6MMjzNMh1/img.png&quot; data-alt=&quot;https://wogh8732.tistory.com/29&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mQxqt/btq3at8bB7x/ObRHjU9mBDrRK6MMjzNMh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmQxqt%2Fbtq3at8bB7x%2FObRHjU9mBDrRK6MMjzNMh1%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-04-22 17-32-26.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;303&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://wogh8732.tistory.com/29&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 1500 MTU로 분할하게 되면 아래와 같이 3개로 분할할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;DATA1&amp;nbsp;1480byte&amp;nbsp;+&amp;nbsp;ip&amp;nbsp;|&amp;nbsp;length&amp;nbsp;=&amp;nbsp;1500&amp;nbsp;|&amp;nbsp;ID=777&amp;nbsp;|&amp;nbsp;flag&amp;nbsp;=&amp;nbsp;1&amp;nbsp;|&amp;nbsp;offset&amp;nbsp;=&amp;nbsp;0&lt;br /&gt;&lt;br /&gt;DATA2&amp;nbsp;1480byte&amp;nbsp;+&amp;nbsp;ip&amp;nbsp;|&amp;nbsp;length&amp;nbsp;=&amp;nbsp;1500&amp;nbsp;|&amp;nbsp;ID=777&amp;nbsp;|&amp;nbsp;flag&amp;nbsp;=&amp;nbsp;1&amp;nbsp;|&amp;nbsp;offset&amp;nbsp;=&amp;nbsp;185(1480/8)&lt;br /&gt;&lt;br /&gt;DATA3 1020byte + ip | length = 1040 | ID=777 | flag = 0 | offset = 370(1480+1480=2960)/8. 전체패킷이기 때문에 누적)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;쉽게 생각해서 1500이 넘어서 분할을 해줘야 할 경우 flag가 1이며, 마지막이 0이 되는 것입니다. 더이상 분할할 것이 없기 때문. 그리고 offset은 전체 byte를 8로 나눠줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Network</category>
      <category>fragmentation</category>
      <category>Maximun Transmission Unit</category>
      <category>MTU</category>
      <category>단편화</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/8</guid>
      <comments>https://simroot.tistory.com/8#entry8comment</comments>
      <pubDate>Thu, 22 Apr 2021 17:35:09 +0900</pubDate>
    </item>
    <item>
      <title>서브넷 마스크 : 서브넷팅(Subnetting)과 VLSM(Variable Length Subnet Mask)</title>
      <link>https://simroot.tistory.com/7</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서브넷 마스크(Subnet Mask)에 대하여 알기 위해서 먼저는 논리적으로 AND(그리고)에 대한 개념을 알아야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;컴퓨터 전공자라면 한번 쯤 배웠을 법한 이 개념.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* AND&lt;/p&gt;
&lt;p&gt;0 and 0 = 0&lt;/p&gt;
&lt;p&gt;0 and 1 = 0&lt;/p&gt;
&lt;p&gt;1 and 0 = 0&lt;/p&gt;
&lt;p&gt;1 and 1 = 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1은 True, 0은 False이다. 이렇게 전자적인 컴퓨터 언어 0과 1을 놓고 보았을 때(bit라 한다) True와 True가 만나야 True가 된다. 비슷한 개념으로 OR(또는)가 있는데, 이것은 한 비트만 True(1)여도 True(1)라는 결과가 출력된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;한글로 번역하면 AND는 그리고, OR은 또는 으로 볼 수 있다. 말 그대로 그리고는 앞뒤가 같아야 하고 또는은 둘 중에 하나라도 맞으면 맞다라는 의미이다. 이렇게 해서 외우면 쉽게 외울 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 개념을 가지고 서브넷 마스크에 대해 알아보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서브넷 마스크는 지난번 포스팅에 클래스 A,B,C에서 호스트 부분을 다시 서브넷과 호스트로 구분하는 역할을 한다고 했다.(참고)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저 이 서브넷 마스크를 나누는 가장 큰 이유에 대해서 살펴보려고 한다. IP주소는 한정되어 있다고 지난 포스팅에 작성을 해 두었다. 그렇기 때문에 이 주소를 잘 분배해서 사용하는 것이 중요하고 버려지는 주소가 없도록 아껴야 하기 때문에 서브넷 마스크를 나눈다. 서브넷 마스크는 주어진 IP주소를 네트워크 환경에 맞게 나누어 주기 위해서 씌워주는 이진수의 조합이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;모든 IP 주소에는 서브넷 마스크가 따라다닌다. 지난시간 포스팅에 적어둔 것 같이 A클래스부터 B, C까지 디폴트 서브넷 마스크는 255.0.0.0 / 255.255.0.0 / 255.255.255.0 으로 정해두었다. 디폴트값은 서브넷을 나누지 않은 상태로, 0~255까지의 ip주소를 다 사용할 경우에는 디폴트 값을 이용해도 상관이 없다. 그러나 그렇지 않은 경우가 대부분이기 때문에 공간의 낭비를 줄이기 위해서 서브넷을 2의 n승만큼 나눌 수 있다. 이렇게 서브넷 마스크를 나누는 것을 서브넷팅(Subnetting)이라고 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저, 네트워크 아이디를 얻는 방법에 대하여 한 가지 예시를 들어서 이해해보려고 한다.&lt;/p&gt;
&lt;p&gt;ex.&lt;/p&gt;
&lt;p&gt;-IP주소 : &lt;b&gt;192.168.100.10&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;-서브넷 마스크 : &lt;b&gt;255.255.255.0&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;위와같은 전제가 있다고 할 때, 먼저 IP주소가 192로 시작하기 때문에 이 주소는 C클래스에 해당한다.&lt;/p&gt;
&lt;p&gt;(192~223으로 시작하는 경우 C 클래스다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;IP주소와 서브넷마스크 주소를 2진수 비트 형태로 표현해서 AND연산을 하게되면 네트워크 주소(네트워크 아이디)가 나온다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;-IP주소 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;192.168.100.10 -&amp;gt; &lt;/span&gt;1100 0000.1010 1000.0110 0100.0000 1010&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;-서브넷 마스크 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;255.255.255.0 -&amp;gt; &lt;/span&gt;&lt;/span&gt;1111 1111.1111 1111.1111 1111.0000 0000&lt;/p&gt;
&lt;p&gt;----------------------------------------AND 연산 결과-----------------------------------------&lt;/p&gt;
&lt;p&gt;AND&lt;span&gt;연산 작업을 하고 나면,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;11000000.10101000.01100100.00000000라는 값을 얻을 수 있고, 이 2진수를 10진수로 표현하면&amp;nbsp;&lt;b&gt;192.168.100.0&lt;/b&gt; 이라는 네트워크 주소(아이디)를 얻을 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앞으로 ip주소와 서브넷마스크만 알고있으면, 네트워크 아이디를 계산해볼 수 있다. 여기서 서브넷 마스크를 변경할 수 있다. 나머지 조건은 동일하고, 서브넷마스크만 255.255.255.128일 경우 네트워크 아이디는 무엇일까? 바로 위의 연산에서 서브넷마스크 부분의 마지막 8비트를 10000000(2진수) 으로 바꿔서 계산하면 된다. 그 결과 네트워크 아이디는 &lt;b&gt;192.168.100.128&lt;/b&gt;이 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 처음 문제와 두번째 문제에서 네트워크 아이디가 달라진다. 그렇지만 둘 다 C클래스임에는 변함이 없다. 또한 네트워크 아이디 부분을 알고있다고 한다면 호스트 부분의 범위도 알 수 있다. &lt;span style=&quot;color: #333333;&quot;&gt;네트워크부에서 사용하고 남는 비트를 호스트부에서 사용하기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-04-21 18-08-04.png&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;233&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm0Cfe/btq27Zrv1To/6H5hYrIJ46KhM05MBPv6Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm0Cfe/btq27Zrv1To/6H5hYrIJ46KhM05MBPv6Fk/img.png&quot; data-alt=&quot;출처 : https://m.blog.naver.com/PostView.nhn?blogId=pasudo123&amp;amp;amp;amp;logNo=221144305071&amp;amp;amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm0Cfe/btq27Zrv1To/6H5hYrIJ46KhM05MBPv6Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm0Cfe%2Fbtq27Zrv1To%2F6H5hYrIJ46KhM05MBPv6Fk%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-04-21 18-08-04.png&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;233&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://m.blog.naver.com/PostView.nhn?blogId=pasudo123&amp;amp;logNo=221144305071&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 서브넷 마스크의 변경을 VLSM(Variable Length Subnet Mask, &lt;span style=&quot;color: #333333;&quot;&gt;가변길이 서브넷 마스크&lt;/span&gt;) 라고 한다.&lt;/p&gt;
&lt;p&gt;문제풀이를 할 때 아래와 같이 개념을 잡아두는 것이 도움이 될 것 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;11111111.11111111.11111111.00000000 : 0~255 전체 다 사용함&lt;/p&gt;
&lt;p&gt;11111111.11111111.11111111.10000000 : &lt;span&gt;서브넷 &lt;/span&gt;: 2&lt;span&gt;개&lt;/span&gt;(2&lt;span&gt;의&lt;/span&gt;n&lt;span&gt;승&lt;/span&gt;), &lt;span&gt;서브넷당 &lt;/span&gt;ip(*1/2) : 128&lt;span&gt;개씩&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;11111111.11111111.11111111.11000000 : &lt;span&gt;서브넷 &lt;/span&gt;: 4&lt;span&gt;개&lt;/span&gt;, &lt;span&gt;서브넷당&lt;/span&gt;ip : 64&lt;span&gt;개&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;11111111.11111111.11111111.11100000 : &lt;span&gt;서브넷 &lt;/span&gt;: 8&lt;span&gt;개&lt;/span&gt;, &lt;span&gt;서브넷당&lt;/span&gt;ip : 32&lt;span&gt;개&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;11111111.11111111.11111111.11110000&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서브넷&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;: 16&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;개&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서브넷당&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ip : 16&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;개&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;11111111.11111111.11111111.11111000 : &lt;span&gt;서브넷 &lt;/span&gt;: 32&lt;span&gt;개&lt;/span&gt;, &lt;span&gt;서브넷당&lt;/span&gt;ip : 8&lt;span&gt;개&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;11111111.11111111.11111111.11111100 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서브넷&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;: 64&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;개&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서브넷당&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ip : 4&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;개&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이해가 안가면 그냥 서브넷은 2의 n승(1이 있는만큼), 서브넷당 ip는 2의 n분의 1을 곱한다고 생각하자.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실제 계산을 해보면 점점 이해가 잘 되는 것 같다. 사실 이런 서브넷을 하나하나 다 계산하는게 실무에 필요할까 싶은데, 실제로 서브넷을 나누는 사람은 '네트워크 설비'쪽이다. 그래도 개념을 이해하기 위해서나 전공수업에서는 이런 조건들을 주고 서브넷마스크, 네트워크 주소, 호스트 범위, 브로드캐스트 주소, 서브넷 수, 호스트 수에 대한 문제를 접할 수 있을 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가로 이 부분에 대한 문제풀이는 후니의 쉽게 쓴 시스코 네트워킹 책을 참고하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Network</category>
      <category>Subnet Mask</category>
      <category>subnetting</category>
      <category>Variable Length Subnet Mask</category>
      <category>VLSM</category>
      <category>서브넷마스크</category>
      <category>서브넷팅</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/7</guid>
      <comments>https://simroot.tistory.com/7#entry7comment</comments>
      <pubDate>Wed, 21 Apr 2021 18:23:05 +0900</pubDate>
    </item>
    <item>
      <title>IP 주소체계 : IPv4와 IPv6의 차이, 공인ip와 사설ip, 클래스, 특수ip 주소 목록, 서브넷 마스크</title>
      <link>https://simroot.tistory.com/6</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;안녕하세요. 오늘은 IP 주소체계와 클래스에 대해 알아보려고 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저&lt;b&gt; IP주소란?&lt;/b&gt; 흔히 알고있는 ip주소의 정의는 인터넷상에 있는 컴퓨터의 고유한 주소로, 이 주소를 바탕으로 인터넷상의 한 컴퓨터에서 다른 컴퓨터로 데이터를 주고받을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 IP 주소는 크게 IPv4(IP버전4), IPv6(IPv6)로 나뉩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;IPv4는 X.X.X.X의 형태입니다. 각 X에는 0부터 255까지의 숫자가 올 수 있기 때문에 총 IP주소의 개수는 256를 네번 곱한 약 43억개로 이용할 수 있습니다. 현 시점 전 세계 인구가 70억정도인 점을 감안해볼 때, IPv4의 주소체계는 수량적으로 한계가 있습니다. 그렇기 때문에 미리 대비를 하여 새롭게 만든 주소체계가 바로 IPv6입니다. 이미 오래 전부터 대비가 되어 있었지만 아직도 우리는 IPv4를 사용하고 있습니다. 기술이 발달해서 제한적인 버전4의 주소체계 내에서도 IP를 구분할 수 있는 방법들이 생겨서, 기존의 주소체계를 유지할 수 있게 되었습니다. 버전6으로 넘어가지 않는 이유는 여러이유가 있겠지만, 이미 만들어진 전 세계의 주소체계를 전부 다 옮기기에 가장 큰 문제는 바로 '돈'입니다. 새로운 체계를 사용하기 위해선 장비도 새로 바꿔야 하고 시간적으로나 경제적으로 많은 자원이 필요하기 때문에 기존의 방식을 사용하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;어쨋거나 IPv4를 사용함에 있어서 약 43억개나 되는 IP주소를 체계없이 사용하게 된다면 많은 혼란이 올 것입니다. 그렇기 때문에 클래스 주소 체계의 필요성이 대두됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;IP주소의 클래스는 총 A~E클래스로 나뉩니다. 각 클래스는 네트워크 구분자와 호스트 구분자로 구성되어 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;* 네트워크 구분자&lt;/b&gt; : 처음 비트를 구분자로 사용(X.X.X.0)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 클래스A(X.0.0.0) : 8비트, 클래스B(X.X.0.0) : 16비트, 클래스C : 24비트&lt;span style=&quot;color: #333333;&quot;&gt;(X.X.X.0)&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;* 호스트 구분자&lt;/b&gt; : 네트워크 구분자로 할당되지 않은 나머지 부분&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 각 네트워크에 연결된 단말기를 구분하는 역할을 함.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-04-20 17-09-34.png&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;174&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLbN1f/btq25ZYSmVP/3ThKaPNro3mfnFqz9gIhkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLbN1f/btq25ZYSmVP/3ThKaPNro3mfnFqz9gIhkK/img.png&quot; data-alt=&quot;https://wogh8732.tistory.com/30&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLbN1f/btq25ZYSmVP/3ThKaPNro3mfnFqz9gIhkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLbN1f%2Fbtq25ZYSmVP%2F3ThKaPNro3mfnFqz9gIhkK%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-04-20 17-09-34.png&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;174&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://wogh8732.tistory.com/30&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;인터넷 주소체계는 인터넷 망에서 컴퓨터간의 통신을 위한 유일한 논리적인 주소를 의미합니다. 숫자를 이용해서 32비트의 주소 체계를 사용합니다. 위의 표에서 범위를 보면서 이해할 수 있습니다. X.X.X.X라는 ip 주소가 있다고 했을 때 하나의 X는 1byte, 즉 8bit입니다. 그렇기 때문에 이진수 표현들을 각각 계산해놓은 범위가 0~126, 128~191과 같은 범위로 정리되어 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;전공자들이나 시험을 보는 사람들은 이걸 다 외어야 하나, 실무에서 쓸 때가 있을까? 하는데, 처음 시작하는 8비트에 따라서 무슨 클래스인지 구분이 가능합니다. 이 구분은 실무에 들어가서 고객사에 방문하거나 IP주소를 확인할 때 무슨 클래스에 있는지 확인정도는 할 수 있어야한다고 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;연구실에서 무작정 우분투를 써야만 했을 때 ifconfig를 쳤을 경우 ip주소가 공인IP인지 사설IP인지 헷갈리고 개념이 안 잡히는 적이 너무 많았는데, 이번에 공부를 하면서 그 차이점도 알게 되었습니다. 10으로 시작하는 경우, 192로 시작하는 경우에 따라서 공인/사설 ip로 구분하는 줄만 알았는데 그게 아니어서 정리해봤습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 공인IP&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;공인ip는 전 세계에서 유일하게 쓸 수 있는 ip입니다. 그렇지만 ip주소체계에서 모든 기기에 할당하기에는 개수가 부족하죠. 한 사람당 컴퓨터를 2대이상 가지고 있는 경우도 있으니까요. 한 사람당 하나의 ip주소로 할당하기에는 컴퓨터, 태블릿pc, 노트북, 핸드폰 등 인터넷이 가능한 모든 기기에 ip주소가 사용되기에 문제가 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 ip주소 부족 문제를 해결하기 위해서 등장한 것이 바로 사설ip입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 사설IP&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;한 네트워크에 속한 사용자들끼리만 인식할 수 있는 임시ip주소를 사설ip라고 합니다. 같은 네트워크 내에서 홈페이지를 만들어 서비스 또는 파일 주고받기도 가능하지만 이 네트워크망을 벗어나면 사설 ip주소를 그대로 사용할 수가 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를들어 한 회사에서 사용하고 있던 192.168.100.3이라는 주소의 ip가 외부에 나가게 되면 그대로 사용할 수 없게됩니다. 그 대신 회사 공인 ip주소 일련번호를 붙여서 사용할 수 있습니다. (ex. 192.168.100.3:34001) 이런 식으로 뒤에 일련번호를 붙입니다. 여기서 34001은 사용중이던 컴퓨터에 대한 고유번호로, 회사에 설치된 장비에 기억됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;반대로 외부 네트워크에서 내부 네트워크로 들어오게 될 경우도 있는데, 위에서 언급한 회사에 설치된 장비를 통해 다시 사설 ip로 변환하는 작업이 필요합니다. 공인ip로 탈바꿈하는 과정에 NAT(Network Address Translation)라는 기술을 쓰게되는데 이 부분도 함께 공부해보면 좋을 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사설ip의 장점은 같은 네트워크를 사용하는 수십, 수백명의 사람들이 하나의 공인 ip로 인터넷을 쓸 수 있게되는 점입니다. 현재 우리는 흔히 쓰고있는 공유기라는 장치를 통해서 이 방법을 이용하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 특수 IP 주소 목록&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;다음으로는 특수IP주소 목록에 대한 설명입니다. 이걸 진작 인식하고 있었더라면 회사에서 ip설정할 때 고생을 덜 했을 것 같다는 생각이 드네요. A부터 E까지의 클래스가 있는데, 거의 A~C까지의 클래스를 주로 사용하기는 합니다. 그 클래스 안에서도 사설ip주소로 사용하거나 특수한 목적으로 사용하는 ip주소에 대한 범위가 정해져있는데, 이 부분을 알고있으면 나중에 내가 이용하고 있는 이 ip주소가 사설주소인지 공인 주소인지 쉽게 알아볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 0.0.0.0~0.255.255.255&lt;/p&gt;
&lt;p&gt;어떠한 클래스에도 소속되어 있지 않고 특정 ip주소 대역을 지정하는 데 사용합니다. 0으로 시작하는 주소는 아예 안 쓴다고 보면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 10.0.0.0~10.255.255.255&lt;/p&gt;
&lt;p&gt;위의 표에서 보시면 1~127까지는 클래스 A에 속한다는 것을 알 수 있습니다. 그런데 10으로 시작하는 ip주소는 그 안에 속하기는 하나, 사설ip주소로만 사용하는 주소입니다. 저는 처음에 이 10으로 시작하는 주소가 공인ip주소인 줄 알고 우리 회사에서 B클래스 ip주소를 사용하는건가? 돈이 많나? 라고 생각했었습니다. 여러분들은 이런 착오는 하지 않으시길 ㅎㅎ..&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 127.0.0.0~127.255.255.255&lt;/p&gt;
&lt;p&gt;마찬가지로 127로 시작하는 ip주소는 클래스 A에 속하지만 자신의 컴퓨터와 관련된 목적으로만 사용하는 주소입니다. 이 중에서도 127.0.0.1이라는 주소는 항상 자기 자신의 컴퓨터를 가리키는 역할을 하며, 이것을 loopback이라고 말합니다. 리눅스에서 ifconfig 입력 후 확인되는 lo:로 시작하는 정보에 보면 항상 127.0.0.1이라고 적혀있는 것을 볼 수 있었는데, 이 lo가 '로'가 아닌 'loopback'이라는 것에 대해 처음 알게 되었습니다 ㅠㅠ..유레카&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 169.254.0.0~169.254.255.255&lt;/p&gt;
&lt;p&gt;ip를 따로 지정하지 않은 상태에서 ip 자동 구성이 실패했을 때 사용한다고 합니다. 이것은 일하면서 접해본 적은 없네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 172.16.0.0~172.31.255.255&lt;/p&gt;
&lt;p&gt;클래스 B에 속하지만 사설 ip주소로만 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 192.168.0.0~192.168.255.255&lt;/p&gt;
&lt;p&gt;클래스 C에 속하지만 사설 ip주소로만 사용합니다. 192.168.~는 자주 봤던 ip주소 유형인데, 거의 왠만한 곳에 다 있는 공유기에서 이 주소형태를 주로 띈다고 들었던 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사실 처음에는 클래스별로 공인ip와 사설ip가 나뉘는 것인가? 하는 생각이 있었는데, 각각의 개념을 정리하고 나서 보니 각 클래스 내에서도 사설ip 대역으로 사용하는 주소가 있다는 사실을 새롭게 정립하게 되었습니다. 특수형태의 ip주소 목록에는 또 아래와 같은 주소들이 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-255.255.255.255&lt;/p&gt;
&lt;p&gt;이 주소는 제한된 브로드캐스트라는 의미를 갖는 ip주소입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;-클래스D와 클래스E에 해당하는 주소&lt;/p&gt;
&lt;p&gt;공인ip 주소로 사용되지 않고, 표에서 알 수 있듯 각각의 용도가 따로 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* 모든 클래스 내의 ip주소 범위 중 공인ip주소로 &lt;u&gt;사용이 불가능&lt;/u&gt;한 ip주소 3가지&lt;/p&gt;
&lt;p&gt;아래의 주소는 이미 fix된 주소이기 때문에 공인ip주소로 사용할 수 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 가장 첫 번째 ip주소 : 네트워크 주소&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 가장 마지막 ip주소 : 브로드캐스트 주소&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- gateway 주소&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 서브넷 마스크&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;서브넷 마스크도, 고정ip설정을 할 일이 있어서 공부를 했었다가 개념이 잘 안잡혔던 기억이 납니다. ip주소 뒤에 /26이라는 게 적혀있어서 뭔지 하나도 몰랐는데 이번에 알게되었네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A~E까지 총 5개의 클래스로 구분되는 이 IP주소 체계만으로는 IP주소를 세분화하여 관리하기 불가능합니다. 그렇기 때문에 IP의 낭비를 줄이기 위해 등장한 개념이 바로 서브넷 마스크입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서브넷 마스크는 클래스 A, B, C에서 호스트 부분을 다시 서브넷과 호스트로 구분하는 역할을 합니다. 클래스 C로 예를 들어보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-04-20 17-48-12.png&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;614&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rmwfC/btq22bTkPn4/Oh6ttKxOJ6EmKoaPObTmN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rmwfC/btq22bTkPn4/Oh6ttKxOJ6EmKoaPObTmN0/img.png&quot; data-alt=&quot;출처 : CCCR&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rmwfC/btq22bTkPn4/Oh6ttKxOJ6EmKoaPObTmN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrmwfC%2Fbtq22bTkPn4%2FOh6ttKxOJ6EmKoaPObTmN0%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-04-20 17-48-12.png&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;614&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : CCCR&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;클래스 C에서 마지막 8비트의 호스트 부분을 2비트, 6비트로 구분하였습니다. 제가 지난번에 헷갈렸던 /26 의 의미는 무엇일까? 맨 위에있는 첫번째 사진에서 보면 이러한 것을 '블록'이라고 표현합니다. 의미가 궁금하여 알아보았는데, ip주소 뒤에 그렇게 적혀있는 건 바로 0과 1로 구성된 부분을 1비트라고 봤을 때, 맨 왼쪽부터 서브넷마스크가 있는 부분까지가 26비트로 구성되어있기 때문이었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서브넷 마스크의 ip주소를 오로지 숫자로 적으면 netmask, /26이나 /18과 같은 형태로 적으면 prefix라고 표현할 수 있습니다. 서브넷 마스크에 대한 개념은 실제 문제를 풀어보거나 깊게 이해하기 위해 더 공부해야 할 개념인 것 같아 기회가 되면 다시한 번 정리해서 개념을 잡아봐야겠네요. 마지막으로 아래의 디폴트 서브넷 마스크도 참고로 알아두시면 좋을 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 디폴트 서브넷 마스크&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;- 클래스A : 255.0.0.0&lt;/p&gt;
&lt;p&gt;- 클래스B : 255.255.0.0&lt;/p&gt;
&lt;p&gt;- 클래스C : 255.255.255.0&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이건 고정ip 설정할 때 써봤던 기억이 있는데, 그 때는 감으로 255.255.255.0 이런 식으로 표현해서 때려 맞췄지만 다음에 설정할 일이 있다면 클래스에 맞게 설정할 수 있을 것 같습니다^^&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Network</category>
      <category>IP 주소체계</category>
      <category>IPv4와 IPv6의 차이</category>
      <category>공인ip와 사설ip</category>
      <category>디폴트 서브넷 마스크</category>
      <category>서브넷 마스크</category>
      <category>클래스</category>
      <category>특수ip 주소 목록</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/6</guid>
      <comments>https://simroot.tistory.com/6#entry6comment</comments>
      <pubDate>Tue, 20 Apr 2021 18:03:05 +0900</pubDate>
    </item>
    <item>
      <title>OSI 7계층 : OSI 7 Layer Model</title>
      <link>https://simroot.tistory.com/5</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;전공수업을 들으며, 또는 일을 하면서 네트워크에 대한 내용이 나올 때마다 OSI 7 Layer라는 개념을 많이 들어보고 시험도 봤는데 항상 날아가는 지식이 되는 것 같아 이번기회에 다시한 번 개념을 잡아보려고 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;OSI 7계층이란?&lt;/b&gt; 네트워크에서 통신이 일어나는 과정을 7단계로 분류해놓은 것을 말한다. 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;OSI 7계층과 함께 TCP/IP 프로토콜도 함께 알아두면 외우기가 쉽다. 그러기 위해서는 프로토콜이라는 용어도 정리가 필요하다. 프로토콜이란? 복수의 컴퓨터 사이나 중앙 컴퓨터와 단말기 사이에서 데이터 통신을 원활하게 하기 위해 필요한 통신규약이다. 쉽게 말해서 컴퓨터가 사용하는 언어라고 개념을 잡아볼 수 있다. 정확하게는 언어가 아니라 통신규약이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-04-19 17-45-57.png&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;341&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0R3K7/btq2P23Sk3P/q7A4DQX11m6AOgOX75kvU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0R3K7/btq2P23Sk3P/q7A4DQX11m6AOgOX75kvU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0R3K7/btq2P23Sk3P/q7A4DQX11m6AOgOX75kvU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0R3K7%2Fbtq2P23Sk3P%2Fq7A4DQX11m6AOgOX75kvU0%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-04-19 17-45-57.png&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;341&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;인터넷에 OSI 7 Layer라고 치면 쉽게 이러한 표 이미지를 얻을 수 있다. 데이터통신 수업 때 하향식 접근으로 해서 Application Layer(응용 계층)부터 배웠던 기억이 났다. 이번에 다시한 번 공부하게 되면서 제대로 개념을 이해하고, 나중에도 필요하다고 하니 암기까지 할 수 있었다. 이전에는 그냥 막 외우고 다 날아가는 지식이었는데, 역시 한국인은 앞글자만 따서 외우는 요행도 필요한 것 같다. 1계층부터 7계층까지 순서로 &quot;물데네 전세표응&quot; 이라고 앞글자를 따서 외우니까 금방 외워지는 것 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;통신에 필요한 기능을 7개의 계층으로 분할해서 꼭 외우도록 하자. 이 계층들은 프로토콜을 단순화하기위한 목적을 가지고 있다. 1977년 OSI계층 모델은 모든 시스템에 통신이 가능하기 위해 개발된 네트워크 아키텍처이다. 실제 네트워크에서는 구현되지 않지만 참조 모델로서 의미를 가졌다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;하향식 접근으로 각 계층별로 알아보자.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;* 7계층 : Application Layer(응용계층)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;유저가 가장 접근하기 빠른 계층이다. 각종 응용프로그램간의 정보를 전달하기 위한 계층이다. 응용 프로세스간의 정보 교환을 담당하며 FTAM(File Transfer, Access and Manipulation), VT(Virtual Terminal)을 담당한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;*&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;6계층 : Presentation &lt;span style=&quot;color: #333333;&quot;&gt;Layer(&lt;/span&gt;표현계층)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;응용계층(Application Layer)에 의해 생성된 데이터나 payload가 네트워크 상에 전송하기 위해 생산되고 소비되는 데이터 형식이나 형태를 번역하는 방법 등을 정의하는 계층이다.&lt;/p&gt;
&lt;p&gt;Encode, Encryption, Decode, Decryption 같이 인코딩, 디코딩, 암호화, 해독을 하는 일을 수행하는 계층이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;*&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;5계층 : Session &lt;span style=&quot;color: #333333;&quot;&gt;Layer(&lt;/span&gt;세션계층)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;6계층인 표현계층에서 4계층인 전송계층으로 진입하기 위해 개념적이고 추상적인 인터페이스를 제공하는 계층이다. 헤더에서 세션정보를 담고있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;*&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;4계층 : Transport &lt;span style=&quot;color: #333333;&quot;&gt;Layer(&lt;/span&gt;전송계층)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;네트워크 상에서 송수신 시스템간의 물리적 위치를 논리적인 주소와 이름을 이용하여 연결하는 방식 및 종료하는 방식 등이 정의되어지는 계층이다.&lt;/p&gt;
&lt;p&gt;중요! TCP/UDP, 헤더에 Port정보를 담고있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;*&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;3계층 : Network &lt;span style=&quot;color: #333333;&quot;&gt;Layer(&lt;/span&gt;네트워크 계층)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;패킷들이 어떻게 네트워크상에서 라우팅되는지를 정의하고 노드에 전송되는 패킷의 흐름을 통제하고 상태 메세지를 전송하는 계층이다. 데이터를 수신처까지 보내는 역할을 하며 경로 선택의 역할을 한다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;중요! 헤더에 IP주소를 담고있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;*&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;2계층 : Data Link &lt;span style=&quot;color: #333333;&quot;&gt;Layer(&lt;/span&gt;데이터링크 계층)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;데이터 링크 계층은 데이터 전송 신호를 규정하고 송수신 시스템간의 데이터에 대한 전기적 신호를 어떻게 처리할 것인지를 규정하는 계층이다.&lt;/p&gt;
&lt;p&gt;중요! 헤더에 MAC주소를 담고있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;*&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;1계층 : Physical &lt;span style=&quot;color: #333333;&quot;&gt;Layer(&lt;/span&gt;물리계층)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;실제 네트워크의 물리적 형태인 Topology를 규정하여 Data의 전기적 흐름에 따라 전송하는 계층이다.&lt;/p&gt;
&lt;p&gt;컴퓨터가 알아들을 수 있는 전기적 신호인 비트(0100101 형태)로 변환하여 전송한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;각각의 계층별로 특징도 중요하지만 전체적인 흐름과 overview를 먼저 인지하고 있으면 도움이 될 것 같다. TCP/IP주소는 이 계층과 다른게 아니라 비슷한 개념으로, 4개의 계층으로 분류가 된다. 다음에 기회가 되면 TCP/IP 계층에 대해서도 정리를 해 볼 예정이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Network</category>
      <category>OSI 7 layer</category>
      <category>OSI 7 계층</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/5</guid>
      <comments>https://simroot.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 19 Apr 2021 21:00:46 +0900</pubDate>
    </item>
    <item>
      <title>네트워크 접속장치 : 라우터, 스위치, 허브, LAN카드, MAC(Media Access Address)</title>
      <link>https://simroot.tistory.com/4</link>
      <description>&lt;p&gt;네트워크에 접속 장치는 통신망을 사용하기 위한 가장 기본이 되는 하드웨어이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;네트워크를 구축하고 접속하기 위해 필요한 장치인 라우터, 스위치, 허브, LAN카드에 대한 정리와, MAC이 무엇인지 한 번 정리해보려고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;라우터(router)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;라우터는 패킷의 위치를 추출하며, 그 위치에 대한 최적의 경로를 지정하며, 이 경로를 따라 데이터 패킷을 다음 장치로 전향시키는 장치이다. 위키님이 알려 주신 정의인데, 오히려 정의를 보고 나서 더 어려운 말들이 많이 나와 어려운 느낌이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s58lc/btq2RkiRAP4/fg9wGdyTU7vqL1WMkeE0Bk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s58lc/btq2RkiRAP4/fg9wGdyTU7vqL1WMkeE0Bk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s58lc/btq2RkiRAP4/fg9wGdyTU7vqL1WMkeE0Bk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs58lc%2Fbtq2RkiRAP4%2Ffg9wGdyTU7vqL1WMkeE0Bk%2Fimg.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;스위치(Switch)&lt;/b&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&gt;&lt;b&gt;허브(Hub)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;말 그대로 컴퓨터와 컴퓨터를 이어주는 역할을 한다. 허브와 허브 사이를 연결해주는 브릿지의 개념도 있다. 앞서 설명한 것과 같이 스위치와 허브는 생긴게 거의 비슷하다. 구글링해서 두개가 어떻게 생겼는지 비교해보는 것도 좋을 것 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;LAN 카드(LAN Card)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;네트워크에 연결하는 물리적 장치에는 반드시 하나 이상의 LAN카드가 있어야 한다. LAN카드는 전송매체에 접속하는 역할과 데이터의 입출력 및 송수신, 프로토콜의 처리 기능 등을 담당한다. 랜카드의 형태는 노트북이나 PC를 분해해보면 확인해볼 수 있는데, WiFi 기능이 되는 USB 포트 형식의 랜카드도 있다. 이전에 초소형 컴퓨터로 프로젝트를 진행할 때 와이파이 랜카드를 사용해서 인터넷을 끌어 써본 적이 있어 기억이 난다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;MAC(Media Access Address)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;각 LAN카드에는 주민등록번호처럼 고유의 식별코드가 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MAC 주소(물리적 주소) 중 앞의 24비트는 LAN 칩셋 제조사를 의미하는 고유 코드고, 뒤의 24비트는 제품의 일련번호와 같이 부여되는 것이므로 전 세계에서 유일한 내 컴퓨터만의 LAN카드 고유번호가 된다. 쉽게 말하면 &lt;span style=&quot;color: #333333;&quot;&gt;이 MAC코드를 반으로 나눠서 왼쪽은 자사양식으로 구성된 시리얼 넘버(삼성,엘지 등)이며, 오른쪽은 고유번호라고 생각하면 된다. 비슷한 제조 공정을 거친 노트북이나 휴대폰 등을 보면 앞의 넘버는 비슷하고 끝에만 다른 경우를 찾아볼 수 있다. 예를들어&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;92-E0-3F. 이런 식으로 적혀있다. 16진수로 표현이 되어 있는 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실제로 네트워크 통신을 할 때 하드웨어가 사용하는 주소는 LAN 카드에 할당된 MAC 주소를 이용한다. 통신이 되는 장비는 다 MAC주소가 있다고 보면 된다. 실제로 테스트를 해봤는데 Ubuntu 쉘에서 ifconfig를 입력하고 나서 연결되어 있는 맥주소를 확인해볼 수 있었다. ether 옆에 적혀있는 16진수로 이루어진 숫자가 바로 맥주소고, Window에서도 다른 방법으로 확인이 가능하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 사이트에서 찾은 휴대폰이나 PC의 MAC주소를 검색해보면 어느 나라에서, 어느 회사에서 제조되었는지 확인할 수 있다. 안드로이드 폰을 사용하고 있어서 휴대폰은 삼성전자 구미 사업장에서 만들어졌고 노트북은 대만인지 태국에서 만든 것 같다. 국가명이 영어로 적혀있어서 궁금하면 찾아보면 좋을듯하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* 맥주소 검색해보기 :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://uic.win/ko/mac/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;uic.win/ko/mac/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1618821370843&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MAC 주소 검색&quot; data-og-description=&quot;MAC 주소에서 업체 정보를 표시 할 수 있습니다. 업체 정보는 매일 업데이트하고 있습니다.&quot; data-og-host=&quot;uic.win&quot; data-og-source-url=&quot;https://uic.win/ko/mac/&quot; data-og-url=&quot;https://uic.win/ko/mac/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bycgxb/hyJWF36YTt/NWJSojLr27fzaws5A4j8E0/img.png?width=630&amp;amp;height=315&amp;amp;face=0_0_630_315&quot;&gt;&lt;a href=&quot;https://uic.win/ko/mac/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://uic.win/ko/mac/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bycgxb/hyJWF36YTt/NWJSojLr27fzaws5A4j8E0/img.png?width=630&amp;amp;height=315&amp;amp;face=0_0_630_315');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;MAC 주소 검색&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;MAC 주소에서 업체 정보를 표시 할 수 있습니다. 업체 정보는 매일 업데이트하고 있습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;uic.win&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Network</category>
      <category>LAN카드</category>
      <category>MAC(Media Access Address)</category>
      <category>네트워크접속장치</category>
      <category>라우터</category>
      <category>맥주소</category>
      <category>스위치</category>
      <category>허브</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/4</guid>
      <comments>https://simroot.tistory.com/4#entry4comment</comments>
      <pubDate>Mon, 19 Apr 2021 17:39:32 +0900</pubDate>
    </item>
    <item>
      <title>네트워크 형태 : LAN, WAN, PAN, MAN, Intranet(인트라넷)</title>
      <link>https://simroot.tistory.com/3</link>
      <description>&lt;p&gt;라우팅&amp;amp;스위칭 관리에 대해 하나하나 공부했던 것들을 기록해보려고 처음으로 글을 작성해본다. 가장 기초적인 네트워크 개요에 대한 내용이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;네트워크의 형태는 노드와 노드가 그물망처럼 연결되어있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;네트워크의 규모에 따라 형태 분류를 해볼 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. LAN(Local Area Network) : 근거리 영역 네트워크&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;가까운 거리에 위치한 컴퓨터의 네트워크를 말하며, 유선 케이블, 적외선 링크, 무선 송수신기 등을 이용하여 통신한다. 더 쉽게 설명을 하면 관리자가 직접 관리가 가능한 영역을 LAN 영역이라 한다. 보통 가정이나 학교에서 볼 수 있는 형태이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 그림을 참고하면서 이미지화 시켜보면 좋다. 사실 가정에서 이용할 수 있다고 한정짓기에는 모든 곳의 거리가 다 다르기 때문에 규모로 보기엔 사실 어렵다. LAN의 경우 10km의 거리 제한이 있으며, 가정에서만 쓸 수 있다고 하는 부분은 이해를 돕기 위한 것이므로 분류를 딱딱 하는 게 아니라 거리로 분류하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-04-19 16-48-34.png&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;424&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qwZKT/btq22EzLndh/6zMk4FumSMDQD0NkAOhBVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qwZKT/btq22EzLndh/6zMk4FumSMDQD0NkAOhBVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qwZKT/btq22EzLndh/6zMk4FumSMDQD0NkAOhBVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqwZKT%2Fbtq22EzLndh%2F6zMk4FumSMDQD0NkAOhBVk%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-04-19 16-48-34.png&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;424&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. WAN(Wide Area Network) : 광대역 네트워크&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;두 개 이상의 LAN 영역을 연결한 영역. LAN 영역에 포함되어 있지 않은 멀리 떨어진 컴퓨터 사이에서도 WAN을 통하여 서로 통신이 가능하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-04-19 16-48-59.png&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;463&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beAyBR/btq2RkC7I8s/sP9N7aATNbpEAyYU5k7HTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beAyBR/btq2RkC7I8s/sP9N7aATNbpEAyYU5k7HTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beAyBR/btq2RkC7I8s/sP9N7aATNbpEAyYU5k7HTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeAyBR%2Fbtq2RkC7I8s%2FsP9N7aATNbpEAyYU5k7HTK%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-04-19 16-48-59.png&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;463&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. PAN(Personal Area Network) : 개인 영역 네트워크&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Personal에서 알 수 있듯 블루투스나 UWB 등의 기술을 이용해서 개인 휴대기기 사이에서 구성된 무선 연결망을 의미한다.&lt;/p&gt;
&lt;p&gt;그 외에도 MAN과 인트라넷의 개념이 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. MAN(Metropolitan Area Network) : 대도시 영역 네트워크&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;여기서 등장하는 M은 도시를 의미하는 Metropolitan의 약자이다. 여기서 범위는 LAN보다 넓고 50km 거리 내에서 이용할 수 있다. 큰 학교나 건물, 쇼핑센터같은 곳을 예로 들 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2021-04-19 17-05-25.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;614&quot; width=&quot;589&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6GNvp/btq2ZpwH8HJ/GKmp4pCSHqQvQKZ7e68oS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6GNvp/btq2ZpwH8HJ/GKmp4pCSHqQvQKZ7e68oS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6GNvp/btq2ZpwH8HJ/GKmp4pCSHqQvQKZ7e68oS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6GNvp%2Fbtq2ZpwH8HJ%2FGKmp4pCSHqQvQKZ7e68oS1%2Fimg.png&quot; data-filename=&quot;Screenshot from 2021-04-19 17-05-25.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;614&quot; width=&quot;589&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;5. 인트라넷(Intranet)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;인터넷에 사용하는 회선 및 기술을 이용하여 구축한 사설 네트워크. 흔히 군대에서 이용하는 외부 사이트에 접속 제한이 걸려있는 인터넷을 인트라넷이라고 생각하면 될 것 같다. ISP까지 연결이 되면 적은 비용으로 사설 네트워크를 이용할 수 있다.&lt;/p&gt;
&lt;p&gt;그리고 기업에서 내부망, 외부망을 따로 관리하는 경우가 있는데 이러한 경우 내부망이 바로 인트라넷이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* 이미지 출처&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pediaa.com/difference-between-lan-man-and-wan/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;pediaa.com/difference-between-lan-man-and-wan/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1618819501450&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Difference Between LAN MAN and WAN - Pediaa.Com&quot; data-og-description=&quot;The main difference between LAN MAN and WAN is that the LAN is a network that covers a small geographical area such as residence, school or an office building while the MAN is a network that covers an area larger than LAN but smaller than WAN such as a cit&quot; data-og-host=&quot;pediaa.com&quot; data-og-source-url=&quot;https://pediaa.com/difference-between-lan-man-and-wan/&quot; data-og-url=&quot;https://pediaa.com/difference-between-lan-man-and-wan/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fqrYK/hyJWr5PuLy/6fmcafhY87GavJvcGa2km0/img.jpg?width=524&amp;amp;height=376&amp;amp;face=0_0_524_376,https://scrap.kakaocdn.net/dn/bBq7xK/hyJWvApI8O/AmX1lOTJfrJC2K07FaV5c1/img.jpg?width=799&amp;amp;height=1223&amp;amp;face=0_0_799_1223,https://scrap.kakaocdn.net/dn/IwadA/hyJU09RXeQ/aHbKhF76DnYsY00BSXRImk/img.png?width=800&amp;amp;height=527&amp;amp;face=0_0_800_527&quot;&gt;&lt;a href=&quot;https://pediaa.com/difference-between-lan-man-and-wan/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://pediaa.com/difference-between-lan-man-and-wan/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fqrYK/hyJWr5PuLy/6fmcafhY87GavJvcGa2km0/img.jpg?width=524&amp;amp;height=376&amp;amp;face=0_0_524_376,https://scrap.kakaocdn.net/dn/bBq7xK/hyJWvApI8O/AmX1lOTJfrJC2K07FaV5c1/img.jpg?width=799&amp;amp;height=1223&amp;amp;face=0_0_799_1223,https://scrap.kakaocdn.net/dn/IwadA/hyJU09RXeQ/aHbKhF76DnYsY00BSXRImk/img.png?width=800&amp;amp;height=527&amp;amp;face=0_0_800_527');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Difference Between LAN MAN and WAN - Pediaa.Com&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;The main difference between LAN MAN and WAN is that the LAN is a network that covers a small geographical area such as residence, school or an office building while the MAN is a network that covers an area larger than LAN but smaller than WAN such as a cit&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;pediaa.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://velog.io/@dnstlr2933/42netWhat&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;velog.io/@dnstlr2933/42netWhat&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1618819510073&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;IP address와 network&quot; data-og-description=&quot;두 대 이상의 컴퓨터가 논리적 또는 물리적텍스트으로 연결되어 통신이 가능한 상태일방적으로 규모에 따른 네트워크 종류PAN ( Personal Area Network )&amp;nbsp;: 가장 작은 규모의 네트워크LAN ( Local Area Networ&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@dnstlr2933/42netWhat&quot; data-og-url=&quot;https://velog.io/@dnstlr2933/42netWhat&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmdo88/hyJU20UFns/jrNIPc4jXKBOJXXexg5TCk/img.png?width=683&amp;amp;height=566&amp;amp;face=0_0_683_566,https://scrap.kakaocdn.net/dn/bzw2sz/hyJU6I0zpr/5fdWhMkK58ehMdUxm5kwZk/img.png?width=683&amp;amp;height=566&amp;amp;face=0_0_683_566,https://scrap.kakaocdn.net/dn/bEJqxT/hyJUWTVUMX/Lb3TZTkfpGGw7932YZpNDk/img.png?width=683&amp;amp;height=566&amp;amp;face=0_0_683_566&quot;&gt;&lt;a href=&quot;https://velog.io/@dnstlr2933/42netWhat&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@dnstlr2933/42netWhat&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmdo88/hyJU20UFns/jrNIPc4jXKBOJXXexg5TCk/img.png?width=683&amp;amp;height=566&amp;amp;face=0_0_683_566,https://scrap.kakaocdn.net/dn/bzw2sz/hyJU6I0zpr/5fdWhMkK58ehMdUxm5kwZk/img.png?width=683&amp;amp;height=566&amp;amp;face=0_0_683_566,https://scrap.kakaocdn.net/dn/bEJqxT/hyJUWTVUMX/Lb3TZTkfpGGw7932YZpNDk/img.png?width=683&amp;amp;height=566&amp;amp;face=0_0_683_566');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;IP address와 network&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;두 대 이상의 컴퓨터가 논리적 또는 물리적텍스트으로 연결되어 통신이 가능한 상태일방적으로 규모에 따른 네트워크 종류PAN ( Personal Area Network )&amp;nbsp;: 가장 작은 규모의 네트워크LAN ( Local Area Networ&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Network</category>
      <category>intranet</category>
      <category>LAN</category>
      <category>man</category>
      <category>pan</category>
      <category>wan</category>
      <category>네트워크형태</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/3</guid>
      <comments>https://simroot.tistory.com/3#entry3comment</comments>
      <pubDate>Mon, 19 Apr 2021 17:07:53 +0900</pubDate>
    </item>
    <item>
      <title>연구실 안전교육 스킵하는 두 가지 방법 (소스코드 포함,업데이트)</title>
      <link>https://simroot.tistory.com/2</link>
      <description>&lt;p&gt;안녕하세요 :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또 다시 2021년도 1분기, 연구실 안전교육을 들어야 하는 시기가 찾아왔어요. 이 안전교육은 &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;연구안전법&lt;/span&gt;에 따라 매년, 분기별, 반기별로 비슷한 내용의 안전보건교육을 들어야해요. 그렇기 때문에 처음에만 열심히 듣고 이제는 업무를 해야하니 꽤나 번거로운 작업입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;* 관련근거&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;연구안전-38호(2021.02.01: 2020년도 산업안전보건 및 소방안전 운영계획(안) 승인의 건)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;나&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;산업안전보건법 제&lt;/span&gt;&amp;nbsp;&lt;span&gt;29&lt;/span&gt;&amp;nbsp;&lt;span&gt;조&lt;/span&gt;&amp;nbsp;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;안전보건교육&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;다&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;연구실 안전환경 조성에 관한 법률 제&lt;/span&gt;&amp;nbsp;&lt;span&gt;18&lt;/span&gt;&amp;nbsp;&lt;span&gt;조&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;교육&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;․&lt;/span&gt;&amp;nbsp;&lt;span&gt;훈련 등&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;라&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;안전보건관리요령 제&lt;/span&gt;&amp;nbsp;&lt;span&gt;39&lt;/span&gt;&amp;nbsp;&lt;span&gt;조&lt;/span&gt;&amp;nbsp;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;교육계획&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 연구실이 직장이라서 매년 들어야하는데, 대학원생이나 학부생들도 이수증을 가져와야 해서 많은 사람들이 들어야 하는 교육이더라고요. 저희는 해당 시기에 듣지 않으면 개인이 10만원이라는 과태료를 내야하는 부담이 있기 때문에 시기를 놓치지 않고 꼭 듣고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;교육의 퀄리티라도 조금 좋았으면 열심히 들었을텐데, 사실 매년 비슷비슷하고 상식적인 내용 위주라서 간단하게 스킵할 수 있는 소스코드를 사용하곤 합니다. 자주 쓰는 코드는 막히기도 하고 또 다음분기 교육 때는 잘 되기도 해서 2021년 1분기 기준으로 작성을 해봤습니다. 추가로 막히면 올려드린 다른 코드도 사용해보시고, 이번에 막힌 코드가 다음에 잘 적용되기도 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;최근에는 링크를 복사해서 수정하는 방법도 사용이 가능한 것 같으니 아래의 &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;두가지 방법&lt;/span&gt; 중에 잘 되는것이나 편하신 걸로 선택하시면 될 것 같습니다 :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&quot;연구실 안전교육 스킵하는 방법&quot;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;[첫 번째 방법] 소스코드를 입력하여 스킵&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 먼저 &lt;b&gt;구글크롬&lt;/b&gt;을 사용하여 안전보건교육 사이트에 로그인하여 수강하기를 눌러줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 동영상이 재생되고 있는 상태에서 키보드의 &lt;b&gt;F12 &lt;/b&gt;버튼을 눌러 툴을 띄웁니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. &lt;b&gt;콘솔(Console) 탭&lt;/b&gt;을 눌러줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/190Go/btq0nOtcslC/6eDAbvMew4LQYh1qHOkl71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/190Go/btq0nOtcslC/6eDAbvMew4LQYh1qHOkl71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/190Go/btq0nOtcslC/6eDAbvMew4LQYh1qHOkl71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F190Go%2Fbtq0nOtcslC%2F6eDAbvMew4LQYh1qHOkl71%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. 프롬프트 모양(&amp;gt;) 안에 있는 빈 화면을 클릭해주고 아래의 &lt;b&gt;소스코드를 입력&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;* 한 페이지씩 스킵하는 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1616055269236&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;location.href = chapterInfo[nowPageNum].fileName + &quot;.html?passedPage=&quot; + vPassedPage + &quot;&amp;amp;checkurl=&quot; + nextPageNum + &quot;&amp;amp;smProgressNo=&quot; + smProgressNo;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 소스코드를 입력하면 다음 페이지로 넘어가지며, 최종 페이지에서 기다렸다가 종료하시면 수강 완료처리가 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;* 한 번에 스킵하는 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1616055280685&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var currentPage = nowPageNum;

function goNextPage() {

if (currentPage &amp;lt;= totalPageNum) {

console.log(`${currentPage} 페이지를 수강완료했습니다.`);

currentPage += 1;

setTimeout(function() {

goNextPage();

}, 2000);

} else {

alert('강의 수강이 완료되었습니다!');

}

}

function runKmuMacro() {

console.log(`현재 ${currentPage} 페이지를 수강중입니다.`);

setTimeout(function () {

goNextPage();

}, 1000)

}

runKmuMacro();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 코드를 입력하고 기다리면 마지막에 최종 페이지를 수강완료하였습니다 라는 안내와 함께 수강이 완료됩니다. 이게 제일 간편한 방법인 것 같은데 자주 막힐 때가 있으니 막히면 위에 코드를 사용하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;[두 번째 방법] 링크를 수정하여 스킵&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. &lt;span style=&quot;color: #333333;&quot;&gt;안전보건교육 사이트에 로그인하여 수강하기를 눌러줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. 우측 하단의 총 페이지 수를 확인합니다. 해당 강의는 총 15개의 강의로 이루어져 있는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 숫자를 기억하고 상단의 링크를 복사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5mOUv/btq0oKKGPzT/anNHzh0DCS5kmKQ9LwNLsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5mOUv/btq0oKKGPzT/anNHzh0DCS5kmKQ9LwNLsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5mOUv/btq0oKKGPzT/anNHzh0DCS5kmKQ9LwNLsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5mOUv%2Fbtq0oKKGPzT%2FanNHzh0DCS5kmKQ9LwNLsK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;4. &lt;span style=&quot;color: #333333;&quot;&gt;상단 링크에 노란색 형광펜으로 표시한 숫자를 기억합니다. 01과 1으로 이루어져 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;5. 새로운 인터넷 창을 열어 링크를 붙여넣기 한 후 위의 두 위치에 최종 페이지인 15를 넣어줍니다. 페이지에 따라 숫자가 달라질 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;5. 마지막 페이지가 나오는데, 10초정도 기다렸다가 강의가 완료되면 다시 본 페이지에서 수강여부에 &quot;수강&quot;이라고 표시되어있는 것을 볼 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;화면결과&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jb1fe/btq0oa3XJBW/xRZORMWpfCZn0BMwz9t4o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jb1fe/btq0oa3XJBW/xRZORMWpfCZn0BMwz9t4o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jb1fe/btq0oa3XJBW/xRZORMWpfCZn0BMwz9t4o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJb1fe%2Fbtq0oa3XJBW%2FxRZORMWpfCZn0BMwz9t4o0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xCf7E/btq0ulQlW1R/qe7hYIZsuRlqWJs7wLUIGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xCf7E/btq0ulQlW1R/qe7hYIZsuRlqWJs7wLUIGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xCf7E/btq0ulQlW1R/qe7hYIZsuRlqWJs7wLUIGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxCf7E%2Fbtq0ulQlW1R%2Fqe7hYIZsuRlqWJs7wLUIGk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이수 완료!!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Information</category>
      <category>2021연구실안전교육</category>
      <category>교육페이지스킵</category>
      <category>사이버안전교육넘기기</category>
      <category>사이버안전교육코드</category>
      <category>실험실안전교육</category>
      <category>안전보건교육</category>
      <category>연구실안전교육</category>
      <category>연구실안전교육넘기는법</category>
      <category>연구실안전교육스킵</category>
      <category>정기안전보건교육</category>
      <author>심루트</author>
      <guid isPermaLink="true">https://simroot.tistory.com/2</guid>
      <comments>https://simroot.tistory.com/2#entry2comment</comments>
      <pubDate>Thu, 18 Mar 2021 17:18:46 +0900</pubDate>
    </item>
  </channel>
</rss>