<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>tryinto_gmlt</title>
    <link>https://tryintogmlt.tistory.com/</link>
    <description>⸜(* ॑꒳&amp;circ;* )⋆*☆</description>
    <language>ko</language>
    <pubDate>Sun, 21 Jun 2026 12:33:36 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>tryinto_gmlt</managingEditor>
    <image>
      <title>tryinto_gmlt</title>
      <url>https://tistory1.daumcdn.net/tistory/8608106/attach/d64abba8858341459b2af7cd994fc071</url>
      <link>https://tryintogmlt.tistory.com</link>
    </image>
    <item>
      <title>13~14주차 테크블로그 포스팅</title>
      <link>https://tryintogmlt.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;[Cloud]&amp;nbsp;13주차.&amp;nbsp;Azure&amp;nbsp;CLI와&amp;nbsp;ACR을&amp;nbsp;활용한&amp;nbsp;Docker&amp;nbsp;컨테이너&amp;nbsp;웹앱&amp;nbsp;배포&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/40&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tryintogmlt.tistory.com/40&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780529177852&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;[Cloud] 13주차. Azure CLI와 ACR을 활용한 Docker 컨테이너 웹앱 배포&quot; data-og-description=&quot;⭐ 핵심 개념 정리AKS(Azure Kubernetes Service)AKS는 Azure에서 제공하는 관리형 Kubernetes 서비스다. Kubernetes를 직접 구성하고 운영하려면 상당한 전문 지식이 필요하지만, AKS를 사용하면 클러스터 관리의&quot; data-og-host=&quot;tryintogmlt.tistory.com&quot; data-og-source-url=&quot;https://tryintogmlt.tistory.com/40&quot; data-og-url=&quot;https://tryintogmlt.tistory.com/40&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cJQlFH/dJMb9fZCFYX/mWoYiL6Z8vbXo0oguqQBp0/img.png?width=800&amp;amp;height=496&amp;amp;face=0_0_800_496,https://scrap.kakaocdn.net/dn/9BEWY/dJMb9bv9CMW/zK0gRKQibWtguzOLlEtxn0/img.png?width=800&amp;amp;height=496&amp;amp;face=0_0_800_496,https://scrap.kakaocdn.net/dn/dD5HVq/dJMb9lMiPnk/ibvvzIC5ascac0oZcfTrcK/img.png?width=1050&amp;amp;height=651&amp;amp;face=0_0_1050_651&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/40&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tryintogmlt.tistory.com/40&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cJQlFH/dJMb9fZCFYX/mWoYiL6Z8vbXo0oguqQBp0/img.png?width=800&amp;amp;height=496&amp;amp;face=0_0_800_496,https://scrap.kakaocdn.net/dn/9BEWY/dJMb9bv9CMW/zK0gRKQibWtguzOLlEtxn0/img.png?width=800&amp;amp;height=496&amp;amp;face=0_0_800_496,https://scrap.kakaocdn.net/dn/dD5HVq/dJMb9lMiPnk/ibvvzIC5ascac0oZcfTrcK/img.png?width=1050&amp;amp;height=651&amp;amp;face=0_0_1050_651');&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;[Cloud] 13주차. Azure CLI와 ACR을 활용한 Docker 컨테이너 웹앱 배포&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⭐ 핵심 개념 정리AKS(Azure Kubernetes Service)AKS는 Azure에서 제공하는 관리형 Kubernetes 서비스다. Kubernetes를 직접 구성하고 운영하려면 상당한 전문 지식이 필요하지만, AKS를 사용하면 클러스터 관리의&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tryintogmlt.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;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;[Cloud] 14주차. Azure AI 서비스, Azure Language Service 실습&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/41&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tryintogmlt.tistory.com/41&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1781538143531&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;[Cloud] 14주차. Azure AI 서비스, Azure Language Service 실습&quot; data-og-description=&quot;⭐ Azure AI 서비스의 종류Azure에서는 다양한 분야에 특화된 AI 서비스를 제공한다. 개발자와 조직이 AI 기술을 쉽게 도입하고 혁신적인 솔루션을 개발할 수 있도록 지속적으로 발전하는 AI 생태계&quot; data-og-host=&quot;tryintogmlt.tistory.com&quot; data-og-source-url=&quot;https://tryintogmlt.tistory.com/41&quot; data-og-url=&quot;https://tryintogmlt.tistory.com/41&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Z6NGU/dJMb89ymqW5/gpmjvWfVfIQdw1PAsCzQ1K/img.png?width=800&amp;amp;height=740&amp;amp;face=0_0_800_740,https://scrap.kakaocdn.net/dn/N6UPQ/dJMb89ymqW4/Kuk6FbsLC2orizJuZzA2j0/img.png?width=800&amp;amp;height=740&amp;amp;face=0_0_800_740,https://scrap.kakaocdn.net/dn/dvI2pw/dJMb83SrNxL/4mJ7LwHlcB3CZ8I3dgCQk0/img.png?width=2144&amp;amp;height=658&amp;amp;face=0_0_2144_658&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/41&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tryintogmlt.tistory.com/41&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Z6NGU/dJMb89ymqW5/gpmjvWfVfIQdw1PAsCzQ1K/img.png?width=800&amp;amp;height=740&amp;amp;face=0_0_800_740,https://scrap.kakaocdn.net/dn/N6UPQ/dJMb89ymqW4/Kuk6FbsLC2orizJuZzA2j0/img.png?width=800&amp;amp;height=740&amp;amp;face=0_0_800_740,https://scrap.kakaocdn.net/dn/dvI2pw/dJMb83SrNxL/4mJ7LwHlcB3CZ8I3dgCQk0/img.png?width=2144&amp;amp;height=658&amp;amp;face=0_0_2144_658');&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;[Cloud] 14주차. Azure AI 서비스, Azure Language Service 실습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⭐ Azure AI 서비스의 종류Azure에서는 다양한 분야에 특화된 AI 서비스를 제공한다. 개발자와 조직이 AI 기술을 쉽게 도입하고 혁신적인 솔루션을 개발할 수 있도록 지속적으로 발전하는 AI 생태계&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tryintogmlt.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;</description>
      <category>과제 제출</category>
      <author>tryinto_gmlt</author>
      <guid isPermaLink="true">https://tryintogmlt.tistory.com/42</guid>
      <comments>https://tryintogmlt.tistory.com/42#entry42comment</comments>
      <pubDate>Thu, 4 Jun 2026 08:27:45 +0900</pubDate>
    </item>
    <item>
      <title>[Cloud] 14주차. Azure AI 서비스, Azure Language Service 실습</title>
      <link>https://tryintogmlt.tistory.com/41</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Azure AI 서비스의 종류&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Azure에서는 다양한 분야에 특화된 AI 서비스를 제공한다. 개발자와 조직이 AI 기술을 쉽게 도입하고 혁신적인 솔루션을 개발할 수 있도록 지속적으로 발전하는 AI 생태계를 제공한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure AI Foundry Service&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;OpenAI의 강력한 언어 모델에 접근할 수 있는 서비스&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;언어 모델 접근:&lt;/b&gt; GPT-4, GPT-3.5-Turbo 등 OpenAI 언어 모델 사용 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자연어 처리:&lt;/b&gt; 콘텐츠 생성, 요약, 코드 변환 등 다양한 작업 수행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;멀티모달 기능:&lt;/b&gt; 이미지 해석 및 의미론적 검색 기능 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure AI Language&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;텍스트를 분석하고 자연어를 이해하는 서비스&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;감정 분석:&lt;/b&gt; 텍스트에서 긍정/부정/중립 감정 감지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키워드 추출:&lt;/b&gt; 텍스트에서 핵심 단어 자동 추출&lt;/li&gt;
&lt;li&gt;&lt;b&gt;언어 감지:&lt;/b&gt; 입력된 텍스트의 언어 자동 식별&lt;/li&gt;
&lt;li&gt;&lt;b&gt;질문 답변:&lt;/b&gt; 대화형 언어 이해 및 질문 답변 기능 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure AI Translator&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;텍스트와 음성을 실시간으로 번역하는 서비스&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;텍스트 번역:&lt;/b&gt; 100개 이상의 언어 및 방언 번역 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실시간 음성 번역:&lt;/b&gt; 음성을 실시간으로 다른 언어로 번역&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure AI Speech&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;음성과 텍스트를 상호 변환하는 서비스&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Speech-to-Text:&lt;/b&gt; 음성을 텍스트로 변환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Text-to-Speech:&lt;/b&gt; 텍스트를 음성으로 변환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실시간 음성 번역:&lt;/b&gt; 음성을 실시간으로 다른 언어로 번역&lt;/li&gt;
&lt;li&gt;&lt;b&gt;화자 인식:&lt;/b&gt; 말하는 사람이 누구인지 구별&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure AI Vision&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;이미지와 비디오를 분석하는 서비스&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Custom Vision 기능은 customvision.ai 사이트에서 사용할 수 있으며, 만들기 옵션에는 &lt;b&gt;모두, 예측, 학습&lt;/b&gt;이 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;이미지&amp;middot;비디오 분석:&lt;/b&gt; 이미지 및 비디오의 내용 자동 분석&lt;/li&gt;
&lt;li&gt;&lt;b&gt;객체 감지:&lt;/b&gt; 이미지 내 사물의 위치와 종류 감지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;얼굴 인식:&lt;/b&gt; 이미지에서 사람의 얼굴 감지 및 분석&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OCR(광학 문자 인식):&lt;/b&gt; 이미지 속 텍스트 추출&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Custom Vision:&lt;/b&gt; 사용자가 직접 이미지 인식 모델 생성 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;873&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XG7bR/dJMcajvGRG5/wVVN4a2OiXDb5PKvLRi4oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XG7bR/dJMcajvGRG5/wVVN4a2OiXDb5PKvLRi4oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XG7bR/dJMcajvGRG5/wVVN4a2OiXDb5PKvLRi4oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXG7bR%2FdJMcajvGRG5%2FwVVN4a2OiXDb5PKvLRi4oK%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;320&quot; height=&quot;873&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;873&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure AI Document Intelligence&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;문서에서 데이터를 자동으로 추출하고 처리하는 서비스&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;텍스트&amp;middot;구조 추출:&lt;/b&gt; 문서에서 텍스트 및 레이아웃 구조 자동 추출&lt;/li&gt;
&lt;li&gt;&lt;b&gt;양식 인식:&lt;/b&gt; 영수증, 계약서, 청구서 등 양식의 데이터 추출 자동화&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure Bot Service&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;지능형 챗봇을 개발하고 배포할 수 있는 서비스&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;챗봇 개발&amp;middot;배포:&lt;/b&gt; 대화형 AI 챗봇 개발 및 배포 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;멀티채널 통합:&lt;/b&gt; 웹, 모바일, Teams 등 다양한 채널에 봇 통합 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure AI Content Safety&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;콘텐츠의 유해성을 자동으로 감지하는 서비스&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;유해 콘텐츠 감지:&lt;/b&gt; 텍스트, 이미지, 비디오에서 부적절하거나 유해한 콘텐츠 감지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;안전성 검사:&lt;/b&gt; 사용자 생성 콘텐츠 및 AI 생성 콘텐츠의 안전성 검사&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure Machine Learning&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;머신러닝 모델의 개발부터 배포까지 전 과정을 지원하는 엔드투엔드 플랫폼&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;통합 환경:&lt;/b&gt; 모델 개발, 훈련, 배포, 관리를 위한 통합 환경 제공&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컨테이너 연동:&lt;/b&gt; Docker 컨테이너 및 ACR과 연동하여 모델 패키징 및 배포 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Azure 서비스 통합:&lt;/b&gt; Azure Storage, Azure Container Registry 등과 통합 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure AI Search&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;AI 기술을 결합한 클라우드 검색 서비스&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;고급 검색:&lt;/b&gt; 자연어 처리와 결합된 의미 기반 검색 기능 제공&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다양한 데이터 소스:&lt;/b&gt; 문서, 이미지 등 다양한 형식의 데이터에서 검색 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;⭐ Azure Language Service를 이용한 FAQ 기반 챗봇 서비스 제작&lt;/h2&gt;
&lt;h4 data-end=&quot;443&quot; data-start=&quot;422&quot; data-ke-size=&quot;size20&quot;&gt;전체 흐름&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;923&quot; data-start=&quot;445&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;528&quot; data-start=&quot;445&quot; data-section-id=&quot;xben3d&quot;&gt;&lt;b&gt;Azure AI 언어 리소스 생성&lt;/b&gt;&lt;br /&gt;Azure에서 Language Service를 사용할 수 있도록 AI 언어 리소스를 생성한다.&lt;/li&gt;
&lt;li data-end=&quot;619&quot; data-start=&quot;530&quot; data-section-id=&quot;1emy45&quot;&gt;&lt;b&gt;Language Studio에서 프로젝트 생성&lt;/b&gt;&lt;br /&gt;Azure Language Studio에 접속하여 질문 응답 기능을 위한 프로젝트를 만든다.&lt;/li&gt;
&lt;li data-end=&quot;691&quot; data-start=&quot;621&quot; data-section-id=&quot;1p8x2f4&quot;&gt;&lt;b&gt;Knowledge base 구축&lt;/b&gt;&lt;br /&gt;FAQ 데이터를 활용하여 질문과 답변으로 구성된 지식 베이스를 생성한다.&lt;/li&gt;
&lt;li data-end=&quot;774&quot; data-start=&quot;693&quot; data-section-id=&quot;1o1gjcg&quot;&gt;&lt;b&gt;모델 학습 및 테스트&lt;/b&gt;&lt;br /&gt;등록한 질문과 답변을 바탕으로 모델을 학습시키고, 사용자가 입력한 질문에 적절히 응답하는지 테스트한다.&lt;/li&gt;
&lt;li data-end=&quot;834&quot; data-start=&quot;776&quot; data-section-id=&quot;1io2k0m&quot;&gt;&lt;b&gt;모델 배포&lt;/b&gt;&lt;br /&gt;테스트가 완료된 모델을 실제 애플리케이션에서 사용할 수 있도록 배포한다.&lt;/li&gt;
&lt;li data-end=&quot;923&quot; data-start=&quot;836&quot; data-section-id=&quot;10l0bfb&quot;&gt;&lt;b&gt;애플리케이션에 통합&lt;/b&gt;&lt;br /&gt;고객 웹 사이트와 연결하여 사용자가 질문을 입력하면 Knowledge base 기반으로 답변을 제공하도록 구성한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;학습시킬 데이터&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://korean.visitseoul.net/faq&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;서울 관광 자주 묻는 질문&lt;/a&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; text-align: start;&quot;&gt;1) Azure 마켓플레이스에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000; text-align: start;&quot;&gt;언어 서비스&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;를 검색하여 리소스를 생성한다.&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;1854&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chHZBg/dJMcadvoHOW/ZYPBTIuXN8Q5paUdKaiuH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chHZBg/dJMcadvoHOW/ZYPBTIuXN8Q5paUdKaiuH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chHZBg/dJMcadvoHOW/ZYPBTIuXN8Q5paUdKaiuH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchHZBg%2FdJMcadvoHOW%2FZYPBTIuXN8Q5paUdKaiuH0%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;767&quot; height=&quot;314&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 추가 기능 선택에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;사용자 지정 질문 답변&lt;/span&gt;을 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;885&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PpUMR/dJMcahdAOo9/KGoE0s7bWds4PcqwyUYBLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PpUMR/dJMcahdAOo9/KGoE0s7bWds4PcqwyUYBLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PpUMR/dJMcahdAOo9/KGoE0s7bWds4PcqwyUYBLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPpUMR%2FdJMcahdAOo9%2FKGoE0s7bWds4PcqwyUYBLK%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;514&quot; height=&quot;360&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;885&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;3)&amp;nbsp;리소스&amp;nbsp;이름,&amp;nbsp;구독,&amp;nbsp;지역&amp;nbsp;등&amp;nbsp;기본&amp;nbsp;사항을&amp;nbsp;설정하고&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;리소스를&amp;nbsp;생성&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;900&quot; data-origin-height=&quot;1290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wplo4/dJMcacQQyoM/KC9C0dgBVVZPtOMp8DbtLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wplo4/dJMcacQQyoM/KC9C0dgBVVZPtOMp8DbtLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wplo4/dJMcacQQyoM/KC9C0dgBVVZPtOMp8DbtLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwplo4%2FdJMcacQQyoM%2FKC9C0dgBVVZPtOMp8DbtLk%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;409&quot; height=&quot;586&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;1290&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; text-align: start;&quot;&gt;4) 생성된 리소스 개요 페이지에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000; text-align: start;&quot;&gt;Language Studio 시작하기&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;를 통해 이동한 후, 로그인한다.&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;2144&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkGQVm/dJMcafUonwm/xGoRnaRfni0mXg6EFz2HyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkGQVm/dJMcafUonwm/xGoRnaRfni0mXg6EFz2HyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkGQVm/dJMcafUonwm/xGoRnaRfni0mXg6EFz2HyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkGQVm%2FdJMcafUonwm%2FxGoRnaRfni0mXg6EFz2HyK%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;2144&quot; height=&quot;658&quot; data-origin-width=&quot;2144&quot; data-origin-height=&quot;658&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; text-align: start;&quot;&gt;5) Language Studio 사이트에서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;방금 생성한 리소스를 선택&lt;/span&gt;한다.&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;892&quot; data-origin-height=&quot;1090&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oOLK2/dJMcaa6CU1O/5UJ6pQSGSCpwDJ3EFLYXg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oOLK2/dJMcaa6CU1O/5UJ6pQSGSCpwDJ3EFLYXg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oOLK2/dJMcaa6CU1O/5UJ6pQSGSCpwDJ3EFLYXg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoOLK2%2FdJMcaa6CU1O%2F5UJ6pQSGSCpwDJ3EFLYXg0%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;392&quot; height=&quot;479&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;1090&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; text-align: start;&quot;&gt;6)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000; text-align: start;&quot;&gt;Create new - Custom question answering&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;을 선택해 새 프로젝트를 생성한다.&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;2101&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfMZeW/dJMcaaFzsx5/JlM4M2jp6akF4KtpityGs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfMZeW/dJMcaaFzsx5/JlM4M2jp6akF4KtpityGs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfMZeW/dJMcaaFzsx5/JlM4M2jp6akF4KtpityGs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfMZeW%2FdJMcaaFzsx5%2FJlM4M2jp6akF4KtpityGs0%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;2101&quot; height=&quot;1060&quot; data-origin-width=&quot;2101&quot; data-origin-height=&quot;1060&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; text-align: start;&quot;&gt;7) 언어 설정에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000; text-align: start;&quot;&gt;한국어&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;를 선택한다.&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;1267&quot; data-origin-height=&quot;988&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRfTAO/dJMcagyW5h6/5kgwSP9SKmnkK1ik0OJp70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRfTAO/dJMcagyW5h6/5kgwSP9SKmnkK1ik0OJp70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRfTAO/dJMcagyW5h6/5kgwSP9SKmnkK1ik0OJp70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRfTAO%2FdJMcagyW5h6%2F5kgwSP9SKmnkK1ik0OJp70%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;550&quot; height=&quot;429&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;988&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; text-align: start;&quot;&gt;8) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;프로젝트 이름과 디폴트 답변을 입력&lt;/span&gt;한 뒤&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Next - Create project&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;를 클릭해 프로젝트를 생성한다.&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;1266&quot; data-origin-height=&quot;990&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F9kuI/dJMcaccgtPO/ayfV6jaZfYKNvaagKasFEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F9kuI/dJMcaccgtPO/ayfV6jaZfYKNvaagKasFEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F9kuI/dJMcaccgtPO/ayfV6jaZfYKNvaagKasFEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF9kuI%2FdJMcaccgtPO%2FayfV6jaZfYKNvaagKasFEK%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;550&quot; height=&quot;430&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;990&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; text-align: start;&quot;&gt;9)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000; text-align: start;&quot;&gt;Add source - URLs&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;에서 서울 관광 FAQ 페이지 링크를 추가하여 Knowledge base를 구축한다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boXoZP/dJMcaaetJlD/aK6HvnbBK0gnnlXdAWuiX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boXoZP/dJMcaaetJlD/aK6HvnbBK0gnnlXdAWuiX1/img.png&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1231&quot; data-is-animation=&quot;false&quot; width=&quot;627&quot; height=&quot;302&quot; style=&quot;width: 53.6278%; margin-right: 10px;&quot; data-widthpercent=&quot;54.26&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boXoZP/dJMcaaetJlD/aK6HvnbBK0gnnlXdAWuiX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboXoZP%2FdJMcaaetJlD%2FaK6HvnbBK0gnnlXdAWuiX1%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;2559&quot; height=&quot;1231&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/da2Qkm/dJMcaciZpNx/29aw2delKRFxCLZkMNQ0Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/da2Qkm/dJMcaciZpNx/29aw2delKRFxCLZkMNQ0Tk/img.png&quot; data-origin-width=&quot;1416&quot; data-origin-height=&quot;808&quot; data-is-animation=&quot;false&quot; width=&quot;667&quot; height=&quot;381&quot; style=&quot;width: 45.2095%;&quot; data-widthpercent=&quot;45.74&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/da2Qkm/dJMcaciZpNx/29aw2delKRFxCLZkMNQ0Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fda2Qkm%2FdJMcaciZpNx%2F29aw2delKRFxCLZkMNQ0Tk%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;1416&quot; height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;❕&lt;b&gt;Failed to extract QnAs from the source&lt;/b&gt;❕&lt;br /&gt;추출기가 입력된 URL에 정상적으로 접근하지 못하면 에러가 발생할 수 있다. &lt;br /&gt;이 경우에는 FAQ 내용을&lt;b&gt; .txt 파일 또는 Excel 파일 형태로 정리&lt;/b&gt;하여&lt;br /&gt;&lt;b&gt;질문과 답변을 직접 수동으로 입력&lt;/b&gt;하는 것도 가능하다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignLeft&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciM7BA/dJMcahYVPj9/rvkZzfqol1x590XM0SQPhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciM7BA/dJMcahYVPj9/rvkZzfqol1x590XM0SQPhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciM7BA/dJMcahYVPj9/rvkZzfqol1x590XM0SQPhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciM7BA%2FdJMcahYVPj9%2FrvkZzfqol1x590XM0SQPhK%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;366&quot; height=&quot;331&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;612&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;10) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;입력된 데이터를 확인&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;1690&quot; data-origin-height=&quot;770&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfF52D/dJMcafUpk8K/7XUgCoS5WRcTY05ZyIZu9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfF52D/dJMcafUpk8K/7XUgCoS5WRcTY05ZyIZu9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfF52D/dJMcafUpk8K/7XUgCoS5WRcTY05ZyIZu9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfF52D%2FdJMcafUpk8K%2F7XUgCoS5WRcTY05ZyIZu9K%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;754&quot; height=&quot;344&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;770&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;11) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Deploy&lt;/span&gt;를 완료한 후 Prediction URL을 확인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZWFfT/dJMcadIWaxq/x0F9S5O1ObgM92AdPZw0Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZWFfT/dJMcadIWaxq/x0F9S5O1ObgM92AdPZw0Rk/img.png&quot; width=&quot;551&quot; height=&quot;386&quot; data-widthpercent=&quot;58.12&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;682&quot; data-origin-width=&quot;974&quot; style=&quot;width: 57.4423%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZWFfT/dJMcadIWaxq/x0F9S5O1ObgM92AdPZw0Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZWFfT%2FdJMcadIWaxq%2Fx0F9S5O1ObgM92AdPZw0Rk%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;974&quot; height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rMDe2/dJMcacchnoy/N43qnZo4xaqytKfnjZ706K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rMDe2/dJMcacchnoy/N43qnZo4xaqytKfnjZ706K/img.png&quot; data-widthpercent=&quot;41.88&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;754&quot; data-origin-width=&quot;776&quot; style=&quot;width: 41.3949%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rMDe2/dJMcacchnoy/N43qnZo4xaqytKfnjZ706K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrMDe2%2FdJMcacchnoy%2FN43qnZo4xaqytKfnjZ706K%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;776&quot; height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;/div&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;12) VSCode에서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;seoulfaq.py&lt;/span&gt; 파일을 생성하고 아래 코드를 작성한다. &lt;code&gt;api_url&lt;/code&gt;에는 Prediction URL을, &lt;code&gt;api_key&lt;/code&gt;에는 Sample request의 &lt;code&gt;Ocp-Apim-Subscription-Key&lt;/code&gt; 값을 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import streamlit as st
import requests

# Azure Language Studio에서 제공하는 Prediction URL과 API Key 입력
api_url = &quot;&amp;lt;Prediction URL&amp;gt;&quot;
api_key = &quot;&amp;lt;Ocp-Apim-Subscription-Key 값&amp;gt;&quot;

# API 요청에 필요한 인증 정보와 데이터 형식 설정
headers = {
    &quot;Ocp-Apim-Subscription-Key&quot;: api_key,
    &quot;Content-Type&quot;: &quot;application/json&quot;
}

# 사용자의 질문을 API로 보내고 답변을 받아오는 함수
def ask_question(question):
    payload = {
        &quot;question&quot;: question
    }
    # API에 POST 방식으로 질문 전송
    response = requests.post(api_url, headers=headers, json=payload)

    # 요청이 성공하면 답변 반환, 실패하면 에러 메시지 반환
    if response.status_code == 200:
        return response.json()[&quot;answers&quot;][0][&quot;answer&quot;]
    else:
        return &quot;Error: Unable to get a response&quot;

# Streamlit 화면 제목과 안내 문구 출력
st.title(&quot;SEOUL FAQ Question &amp;amp; Answer&quot;)
st.write(&quot;서울시 관광과 관련된 궁금한 사항을 물어보세요&quot;)

# 사용자 질문 입력창과 버튼 생성
question = st.text_input(&quot;Ask a question about SEOUL!&quot;)
button_click = st.button(&quot;Query&quot;)

# 버튼을 누르면 로딩 표시 후 답변 출력
if button_click:
    with st.spinner(&quot;Wait for it...&quot;):
        answer = ask_question(question)
        st.write(f&quot;Answer: {answer}&quot;)
        st.success(&quot;Done!&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 아래 명령어로 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_2&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;streamlit run seoulfaq.py&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;13) 실행 후 출력되는 링크로 이동하면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;서울 관광 FAQ 챗봇 결과를 확인&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;1270&quot; data-origin-height=&quot;660&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHD4jp/dJMcabRV7X1/R1HKT5FKYoyNSRaiwHhOD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHD4jp/dJMcabRV7X1/R1HKT5FKYoyNSRaiwHhOD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHD4jp/dJMcabRV7X1/R1HKT5FKYoyNSRaiwHhOD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHD4jp%2FdJMcabRV7X1%2FR1HKT5FKYoyNSRaiwHhOD1%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;625&quot; height=&quot;325&quot; data-origin-width=&quot;1270&quot; data-origin-height=&quot;660&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>클라우드응용SW개발</category>
      <author>tryinto_gmlt</author>
      <guid isPermaLink="true">https://tryintogmlt.tistory.com/41</guid>
      <comments>https://tryintogmlt.tistory.com/41#entry41comment</comments>
      <pubDate>Thu, 4 Jun 2026 07:22:41 +0900</pubDate>
    </item>
    <item>
      <title>[Cloud] 13주차. Azure CLI와 ACR을 활용한 Docker 컨테이너 웹앱 배포</title>
      <link>https://tryintogmlt.tistory.com/40</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;⭐ 핵심 개념 정리&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;AKS(Azure Kubernetes Service)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AKS는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Azure에서 제공하는 관리형 Kubernetes 서비스&lt;/span&gt;다. Kubernetes를 직접 구성하고 운영하려면 상당한 전문 지식이 필요하지만, AKS를 사용하면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;클러스터 관리의 복잡성과 운영 부담 대부분을 Azure가 대신 처리&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고가용성, 확장성, 이식성이 필요한 컨테이너 애플리케이션을 배포&amp;middot;관리할 때&lt;/li&gt;
&lt;li&gt;오픈 소스 도구를 활용하거나 기존 DevOps 도구와 통합해야 할 때&lt;/li&gt;
&lt;li&gt;여러 지역에 걸쳐 애플리케이션을 배포해야 할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MVikj/dJMcaaS4kbX/9UcogYg99Fwar0ywRyK6Mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MVikj/dJMcaaS4kbX/9UcogYg99Fwar0ywRyK6Mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MVikj/dJMcaaS4kbX/9UcogYg99Fwar0ywRyK6Mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMVikj%2FdJMcaaS4kbX%2F9UcogYg99Fwar0ywRyK6Mk%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;490&quot; height=&quot;326&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;712&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;h4 data-ke-size=&quot;size20&quot;&gt;ACR(Azure Container Registry)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ACR은 오픈 소스 Docker Registry 2.0을 기반으로 하는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Azure의 관리형 프라이빗 Docker 레지스트리 서비스&lt;/span&gt;다. Docker Hub가 퍼블릭 이미지 저장소라면, ACR은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Azure에 호스팅된 프라이빗 저장소로 이해&lt;/span&gt;하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ACR을 사용하면 모든 유형의 컨테이너 배포에 필요한 이미지를 빌드하고 저장하며 관리할 수 있다. AKS와 함께 사용하면 프라이빗 이미지를 안전하게 클러스터에 배포하는 구성을 만들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure CLI&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Azure CLI(명령줄 인터페이스)는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Azure 리소스를 터미널에서 직접 관리할 수 있는 플랫폼 간 명령줄 도구&lt;/span&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Azure Portal에 매번 접속하지 않고도 대부분의 관리 작업을 빠르고 정확하게 처리할 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows(&lt;code&gt;cmd.exe&lt;/code&gt;), Linux/macOS(&lt;code&gt;Bash&lt;/code&gt;) 등 다양한 환경에서 사용 가능하다&lt;/li&gt;
&lt;li&gt;반복 작업은 셸 스크립트로 자동화할 수 있다&lt;/li&gt;
&lt;li&gt;로컬 설치 외에도 브라우저의 Azure Cloud Shell이나 Docker 컨테이너 내에서도 실행할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Azure Web App for Containers&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Azure Web App for Containers는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;컨테이너화된 웹 애플리케이션을 쉽게 배포하고 실행할 수 있는 관리형 호스팅 플랫폼&lt;/span&gt;이다. Azure App 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;/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; Docker Hub 또는 ACR에서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;컨테이너 이미지를 가져와 몇 초 안에 프로덕션 환경에 배포&lt;/span&gt;할 수 있다. OS 패치, 용량 프로비저닝, 로드 밸런싱은 플랫폼이 자동으로 처리한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CI/CD 통합:&lt;/b&gt; Docker Hub, ACR, GitHub와의 통합을 통해 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;소스 코드가 변경될 때마다 자동으로 앱을 업데이트하는 CI/CD 파이프라인을 구성&lt;/span&gt;할 수 있다. 배포 슬롯을 활용하면 가동 중단 없이 스테이징에서 프로덕션으로 전환하거나 이전 버전으로 롤백할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자동 스케일링:&lt;/b&gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;애플리케이션 요구에 따라 수평&amp;middot;수직으로 자동 스케일링이 가능&lt;/span&gt;하다. 트래픽이 몰리는 피크 시간에는 자동으로 확장하고, 사용량이 적은 시간에는 비용을 최소화한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안 및 규정 준수:&lt;/b&gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Microsoft의 엔터프라이즈급 보안 기준&lt;/span&gt;을 따르며, ISO, SOC2, PCI 등 다양한 보안 표준을 충족한다.&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;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Azure CLI 설치하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1)&lt;span style=&quot;background-color: #f6e199;&quot;&gt; 패키지 목록을 업데이트하고 업그레이드&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;sudo apt update
sudo apt-get upgrade&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;2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Azure CLI를 설치&lt;/span&gt;한다. 방법 1은 스크립트 한 줄로 한 번에 설치하는 가장 간단한 방법이고, 방법 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;&lt;b&gt;방법 1 : 한 줄 명령어로 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;curl -fsSL 'https://azurecliprod.blob.core.windows.net/$root/deb_install.sh' | sudo bash&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;방법 2 : 단계별 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;# 필요한 패키지 설치
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

# Microsoft 서명 키 등록
sudo mkdir -p /etc/apt/keyrings
curl -sLS https://packages.microsoft.com/keys/microsoft.asc | \
  gpg --dearmor | sudo tee /etc/apt/keyrings/microsoft.gpg &amp;gt; /dev/null
sudo chmod go+r /etc/apt/keyrings/microsoft.gpg

# Azure CLI 저장소 추가
AZ_DIST=$(lsb_release -cs)
echo &quot;Types: deb
URIs: https://packages.microsoft.com/repos/azure-cli/
Suites: ${AZ_DIST}
Components: main
Architectures: $(dpkg --print-architecture)
Signed-by: /etc/apt/keyrings/microsoft.gpg&quot; | sudo tee /etc/apt/sources.list.d/azure-cli.sources

# Azure CLI 설치
sudo apt-get update
sudo apt-get install azure-cli&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;3) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;설치가 완료되었는지 확인&lt;/span&gt;한다. 명령어 목록이나 도움말이 출력되면 정상이다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;az&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;4) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Azure 계정으로 로그인&lt;/span&gt;한다. 명령어 실행 후 출력되는 링크에 접속해 코드를 입력하고 로그인한 뒤, 사용할 구독을 선택한다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;az login&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;리소스 그룹 목록을 조회하여 로그인과 구독 설정이 정상인지 확인&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;az group list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Docker 샘플 프로젝트 준비하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Docker와 Git이 설치되어 있는지 확인&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;docker --version
git --version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Azure 샘플 Django 프로젝트를 클론하고 프로젝트 폴더로 이동&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;git clone https://github.com/Azure-Samples/docker-django-webapp-linux --config core.autocrlf=input
cd docker-django-webapp-linux&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;3) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Dockerfile을 열어 내용을 확인&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;vi Dockerfile&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;code&gt;tiangolo/uwsgi-nginx-flask:python3.6&lt;/code&gt;)가 너무 오래된 환경을 기반으로 하여, 내부에서 참조하는 Debian buster 저장소가 현재 일반 저장소에서 더 이상 정상 조회되지 않는 문제가 있다. 아래와 같이 Dockerfile 상단에 저장소 주소를 archive 서버로 교체하는 코드를 추가한다.&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;FROM tiangolo/uwsgi-nginx-flask:python3.6

RUN sed -i 's|deb.debian.org/debian|archive.debian.org/debian|g' /etc/apt/sources.list &amp;amp;&amp;amp; \
    sed -i 's|security.debian.org/debian-security|archive.debian.org/debian-security|g' /etc/apt/sources.list &amp;amp;&amp;amp; \
    sed -i '/buster-updates/d' /etc/apt/sources.list &amp;amp;&amp;amp; \
    echo 'Acquire::Check-Valid-Until &quot;false&quot;;' &amp;gt; /etc/apt/apt.conf.d/99no-check-valid-until

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt --no-cache-dir
ADD . /code/

# ssh
ENV SSH_PASSWD=&quot;root:Docker!&quot;
RUN apt-get update \
    &amp;amp;&amp;amp; apt-get install -y --no-install-recommends dialog \
    &amp;amp;&amp;amp; apt-get update \
    &amp;amp;&amp;amp; apt-get install -y --no-install-recommends openssh-server \
    &amp;amp;&amp;amp; echo &quot;$SSH_PASSWD&quot; | chpasswd

COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/
RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222
ENTRYPOINT [&quot;init.sh&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정 후 &lt;code&gt;Esc&lt;/code&gt; &amp;rarr; &lt;code&gt;:wq&lt;/code&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;4) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Docker 이미지를 빌드하고 목록을 확인&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;docker build --tag appsvc-tutorial-custom-image .
docker images&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpzvrn/dJMcabdjexf/9Y1MRWtnKDcAmLxrstzUK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpzvrn/dJMcabdjexf/9Y1MRWtnKDcAmLxrstzUK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpzvrn/dJMcabdjexf/9Y1MRWtnKDcAmLxrstzUK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcpzvrn%2FdJMcabdjexf%2F9Y1MRWtnKDcAmLxrstzUK0%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;1050&quot; height=&quot;117&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;컨테이너를 실행&lt;/span&gt;한다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Azure Portal에서 8000 포트의 인바운드&amp;middot;아웃바운드 보안 규칙을 추가&lt;/span&gt;한 뒤, 브라우저에서 &lt;code&gt;가상머신IP:8000&lt;/code&gt;으로 접속하면 앱이 정상 실행되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;docker run -it -p 8000:8000 appsvc-tutorial-custom-image&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RjKCR/dJMcafmyVsG/YptprMhUDUgTSObKqYy70k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RjKCR/dJMcafmyVsG/YptprMhUDUgTSObKqYy70k/img.png&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;745&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4441%; margin-right: 10px;&quot; data-widthpercent=&quot;50.03&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RjKCR/dJMcafmyVsG/YptprMhUDUgTSObKqYy70k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRjKCR%2FdJMcafmyVsG%2FYptprMhUDUgTSObKqYy70k%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;458&quot; height=&quot;745&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N3SYL/dJMb997F4An/ljHPIAgeMKFKG7YTd0yyE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N3SYL/dJMb997F4An/ljHPIAgeMKFKG7YTd0yyE0/img.png&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;736&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.3931%;&quot; data-widthpercent=&quot;49.97&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N3SYL/dJMb997F4An/ljHPIAgeMKFKG7YTd0yyE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN3SYL%2FdJMb997F4An%2FljHPIAgeMKFKG7YTd0yyE0%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;452&quot; height=&quot;736&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ ACR에 이미지 푸시하기&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;실습에서 사용한 변수 값&lt;/h4&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;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; 항목 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;사용한 값 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;리소스 그룹&lt;/td&gt;
&lt;td&gt;AppDev&lt;/td&gt;
&lt;td&gt;Azure 리소스를 묶어서 관리하는 그룹 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;위치&lt;/td&gt;
&lt;td&gt;japaneast&lt;/td&gt;
&lt;td&gt;리소스를 생성할 Azure 데이터센터 위치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ACR 이름&lt;/td&gt;
&lt;td&gt;tanacr123&lt;/td&gt;
&lt;td&gt;컨테이너 이미지를 저장할 레지스트리 이름 (전 세계에서 중복 불가)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker 이미지 이름&lt;/td&gt;
&lt;td&gt;appsvc-tutorial-custom-image&lt;/td&gt;
&lt;td&gt;빌드한 Docker 이미지에 붙인 태그 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;관리 ID 이름&lt;/td&gt;
&lt;td&gt;myID&lt;/td&gt;
&lt;td&gt;웹앱이 ACR에 접근할 때 사용할 관리 ID 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App Service 요금제&lt;/td&gt;
&lt;td&gt;tan-webplan&lt;/td&gt;
&lt;td&gt;웹앱이 사용할 App Service 요금제 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;웹앱 이름&lt;/td&gt;
&lt;td&gt;tan-web&lt;/td&gt;
&lt;td&gt;생성할 Azure Web App 이름 (도메인 주소에 사용됨)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;리소스 그룹을 생성&lt;/span&gt;하고, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;ACR(컨테이너 레지스트리)을 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* ACR 이름은 전 세계에서 중복되면 안 된다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;az group create --name AppDev --location japaneast
az acr create --name tanacr123 --resource-group AppDev --sku Basic --admin-enabled true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p3vkJ/dJMcaiwMHEG/rKudT4sNbmvcQwgil91fWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p3vkJ/dJMcaiwMHEG/rKudT4sNbmvcQwgil91fWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p3vkJ/dJMcaiwMHEG/rKudT4sNbmvcQwgil91fWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp3vkJ%2FdJMcaiwMHEG%2FrKudT4sNbmvcQwgil91fWk%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;678&quot; height=&quot;142&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;220&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;2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;ACR에 로그인하고, 로컬 이미지에 ACR 주소를 태그로 붙인 뒤 푸시&lt;/span&gt;한다. 로그인 비밀번호는 위 &lt;code&gt;az acr create&lt;/code&gt; 결과에서 출력된 password 값을 복붙한다.&lt;/p&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;docker login tanacr123.azurecr.io --username tanacr123

docker tag appsvc-tutorial-custom-image tanacr123.azurecr.io/appsvc-tutorial-custom-image
docker push tanacr123.azurecr.io/appsvc-tutorial-custom-image:latest&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Azure Web App 생성 및 배포하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;관리 ID에 ACR에서 이미지를 가져올 수 있는 권한(AcrPull)을 부여&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;principalId=$(az identity show --resource-group AppDev --name myID --query principalId --output tsv)
registryId=$(az acr show --resource-group AppDev --name tanacr123 --query id --output tsv)
az role assignment create --assignee $principalId --scope $registryId --role &quot;AcrPull&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;App Service 요금제와 웹앱을 생성&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;sqf&quot;&gt;&lt;code&gt;az appservice plan create --name tan-webplan --resource-group AppDev --is-linux
az webapp create --resource-group AppDev --plan tan-webplan --name tan-web \
  --deployment-container-image-name tanacr123.azurecr.io/appsvc-tutorial-custom-image:latest&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;3) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;웹앱을 구성&lt;/span&gt;한다. 포트 설정, 관리 ID 연결, CI/CD 활성화 순서로 진행한다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 포트 설정
az webapp config appsettings set --resource-group AppDev --name tan-web --settings WEBSITES_PORT=8000

# 관리 ID 연결
id=$(az identity show --resource-group AppDev --name myID --query id --output tsv)
az webapp identity assign --resource-group AppDev --name tan-web --identities $id

# ACR 관리 ID 인증 활성화
appConfig=$(az webapp config show --resource-group AppDev --name tan-web --query id --output tsv)
az resource update --ids $appConfig --set properties.acrUseManagedIdentityCreds=True

clientId=$(az identity show --resource-group AppDev --name myID --query clientId --output tsv)
az resource update --ids $appConfig --set properties.AcrUserManagedIdentityID=$clientId

# CI/CD 활성화
cicdUrl=$(az webapp deployment container config --enable-cd true \
  --name tan-web --resource-group AppDev --query CI_CD_URL --output tsv)&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;위 설정이 완료되면 ACR에 새 이미지를 푸시할 때마다 웹앱이 자동으로 최신 이미지를 가져와 배포된다. CI/CD를 설정하지 않으면 웹앱을 수동으로 재시작해야 이미지가 반영된다.&lt;/p&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)&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;모든&amp;nbsp;설정이&amp;nbsp;완료되면&amp;nbsp;Azure&amp;nbsp;Portal에서&amp;nbsp;웹앱의&amp;nbsp;기본&amp;nbsp;도메인을&amp;nbsp;확인&lt;/span&gt;한다. Portal에서 &lt;b&gt;App Service &amp;rarr; App Service &amp;rarr; 개요&lt;/b&gt;로 이동하면 기본 도메인이 표시된다. 해당 주소로 접속하면 배포한 Django 앱이 정상적으로 실행되는 것을 확인할 수 있다.&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;1050&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t8UKf/dJMcadIVepl/PBqWnRZmUyTL3NDKl56BHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t8UKf/dJMcadIVepl/PBqWnRZmUyTL3NDKl56BHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t8UKf/dJMcadIVepl/PBqWnRZmUyTL3NDKl56BHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft8UKf%2FdJMcadIVepl%2FPBqWnRZmUyTL3NDKl56BHK%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;589&quot; height=&quot;209&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;372&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;1050&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zvSWl/dJMcaiKgXDj/jqyznPHuOT8IgFdZftxuw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zvSWl/dJMcaiKgXDj/jqyznPHuOT8IgFdZftxuw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zvSWl/dJMcaiKgXDj/jqyznPHuOT8IgFdZftxuw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzvSWl%2FdJMcaiKgXDj%2FjqyznPHuOT8IgFdZftxuw0%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;1050&quot; height=&quot;651&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>클라우드응용SW개발</category>
      <author>tryinto_gmlt</author>
      <guid isPermaLink="true">https://tryintogmlt.tistory.com/40</guid>
      <comments>https://tryintogmlt.tistory.com/40#entry40comment</comments>
      <pubDate>Thu, 4 Jun 2026 06:39:32 +0900</pubDate>
    </item>
    <item>
      <title>11~12주차 테크블로그 포스팅</title>
      <link>https://tryintogmlt.tistory.com/39</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;[Cloud] 11주차-1. 컨테이너 기술과 Docker의 이해&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/34&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tryintogmlt.tistory.com/34&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780511780300&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;[Cloud] 11주차-1. 컨테이너 기술과 Docker의 이해&quot; data-og-description=&quot;⭐ Docker란?개발을 하다 보면 이런 상황을 겪게 된다. 내 컴퓨터에서는 잘 돌아가던 코드가 서버에 올리면 갑자기 오류가 난다. 원인을 보면 대부분 실행 환경 차이다. OS 환경이 다르거나, 설치된&quot; data-og-host=&quot;tryintogmlt.tistory.com&quot; data-og-source-url=&quot;https://tryintogmlt.tistory.com/34&quot; data-og-url=&quot;https://tryintogmlt.tistory.com/34&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bsedA8/dJMb9hC8ydy/wqlDiG3YQpbZzoKkLWLeZK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ckq27X/dJMb9kmjYC7/byZYshLMJEeIPXCIHLQqP1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b4wbpU/dJMb9eTWTKM/misKWXekouhCZjKak8AVJ1/img.png?width=1152&amp;amp;height=1152&amp;amp;face=0_0_1152_1152&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/34&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tryintogmlt.tistory.com/34&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bsedA8/dJMb9hC8ydy/wqlDiG3YQpbZzoKkLWLeZK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ckq27X/dJMb9kmjYC7/byZYshLMJEeIPXCIHLQqP1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b4wbpU/dJMb9eTWTKM/misKWXekouhCZjKak8AVJ1/img.png?width=1152&amp;amp;height=1152&amp;amp;face=0_0_1152_1152');&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;[Cloud] 11주차-1. 컨테이너 기술과 Docker의 이해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⭐ Docker란?개발을 하다 보면 이런 상황을 겪게 된다. 내 컴퓨터에서는 잘 돌아가던 코드가 서버에 올리면 갑자기 오류가 난다. 원인을 보면 대부분 실행 환경 차이다. OS 환경이 다르거나, 설치된&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tryintogmlt.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;[Cloud]&amp;nbsp;11주차-2.&amp;nbsp;Docker&amp;nbsp;설치&amp;nbsp;및&amp;nbsp;이미지&amp;nbsp;빌드&amp;nbsp;실습&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/35&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tryintogmlt.tistory.com/35&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780511788153&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;[Cloud] 11주차-2. Docker 설치 및 이미지 빌드 실습&quot; data-og-description=&quot;⭐ Docker 설치Azure에서 생성한 Ubuntu 22.04 VM에 SSH로 접속한 후, 터미널 환경에서 Docker 설치를 진행하였다.Docker 설치 과정은 Docker 공식 문서에서 제공하는 Ubuntu용 설치 명령어를 참고하여 순서대로 &quot; data-og-host=&quot;tryintogmlt.tistory.com&quot; data-og-source-url=&quot;https://tryintogmlt.tistory.com/35&quot; data-og-url=&quot;https://tryintogmlt.tistory.com/35&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LLQjQ/dJMb9eTWTKO/Kntfv43kKQZ4ebpKlZCkL0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/c6pQcW/dJMb9efllPU/mX2kjWM423Vc7aa80BZCzk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/p088g/dJMb9lMiOHk/gJfPzz3geF83K33Kb0eVI1/img.png?width=1152&amp;amp;height=1152&amp;amp;face=0_0_1152_1152&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/35&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tryintogmlt.tistory.com/35&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LLQjQ/dJMb9eTWTKO/Kntfv43kKQZ4ebpKlZCkL0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/c6pQcW/dJMb9efllPU/mX2kjWM423Vc7aa80BZCzk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/p088g/dJMb9lMiOHk/gJfPzz3geF83K33Kb0eVI1/img.png?width=1152&amp;amp;height=1152&amp;amp;face=0_0_1152_1152');&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;[Cloud] 11주차-2. Docker 설치 및 이미지 빌드 실습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⭐ Docker 설치Azure에서 생성한 Ubuntu 22.04 VM에 SSH로 접속한 후, 터미널 환경에서 Docker 설치를 진행하였다.Docker 설치 과정은 Docker 공식 문서에서 제공하는 Ubuntu용 설치 명령어를 참고하여 순서대로&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tryintogmlt.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;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt; [Cloud]&amp;nbsp;12주차-1.&amp;nbsp;쿠버네티스와&amp;nbsp;Minikube&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/36&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tryintogmlt.tistory.com/36&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780511793088&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;[Cloud] 12주차-1. 쿠버네티스와 Minikube&quot; data-og-description=&quot;⭐ 쿠버네티스(Kubernetes)란?쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼이다. Docker와 같은 컨테이너 기술을 &quot; data-og-host=&quot;tryintogmlt.tistory.com&quot; data-og-source-url=&quot;https://tryintogmlt.tistory.com/36&quot; data-og-url=&quot;https://tryintogmlt.tistory.com/36&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dDbO5n/dJMb82MKxcr/RAKXPlrkNeL5Dpb8ytYCwK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/mUVdn/dJMb87gdUKn/5UkKkzo0B5fVOUKXYoNos1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/0BR3A/dJMb82eUogs/jHussoK7kLFvlgDUg7C5Hk/img.png?width=1152&amp;amp;height=1152&amp;amp;face=0_0_1152_1152&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/36&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tryintogmlt.tistory.com/36&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dDbO5n/dJMb82MKxcr/RAKXPlrkNeL5Dpb8ytYCwK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/mUVdn/dJMb87gdUKn/5UkKkzo0B5fVOUKXYoNos1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/0BR3A/dJMb82eUogs/jHussoK7kLFvlgDUg7C5Hk/img.png?width=1152&amp;amp;height=1152&amp;amp;face=0_0_1152_1152');&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;[Cloud] 12주차-1. 쿠버네티스와 Minikube&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⭐ 쿠버네티스(Kubernetes)란?쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼이다. Docker와 같은 컨테이너 기술을&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tryintogmlt.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;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt; [Cloud]&amp;nbsp;12주차-2.&amp;nbsp;Minikube&amp;nbsp;+&amp;nbsp;kubectl&amp;nbsp;실습&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/37&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tryintogmlt.tistory.com/37&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780511797258&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;[Cloud] 12주차-2. Minikube + kubectl 실습&quot; data-og-description=&quot;⭐ 핵심 개념 정리YAML서비스 간에 데이터를 주고받을 때 사용하는 데이터 직렬화 포맷 중 하나다. JSON, XML과 동일한 역할을 하지만 사람이 읽기 더 쉬운 구조로 되어 있다. Kubernetes에서 리소스를 &quot; data-og-host=&quot;tryintogmlt.tistory.com&quot; data-og-source-url=&quot;https://tryintogmlt.tistory.com/37&quot; data-og-url=&quot;https://tryintogmlt.tistory.com/37&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hb0br/dJMb9hC8ydD/mIsOIn8p8juT410LxkqoW1/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/h4YFP/dJMb9kUahEx/lL7rbAlIKbcCpbnCXVXLck/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/WntXK/dJMb9frMKYN/lpTi4tZqfjkmd6tnP3Z3Pk/img.png?width=1065&amp;amp;height=348&amp;amp;face=0_0_1065_348&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/37&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tryintogmlt.tistory.com/37&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hb0br/dJMb9hC8ydD/mIsOIn8p8juT410LxkqoW1/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/h4YFP/dJMb9kUahEx/lL7rbAlIKbcCpbnCXVXLck/img.png?width=800&amp;amp;height=390&amp;amp;face=0_0_800_390,https://scrap.kakaocdn.net/dn/WntXK/dJMb9frMKYN/lpTi4tZqfjkmd6tnP3Z3Pk/img.png?width=1065&amp;amp;height=348&amp;amp;face=0_0_1065_348');&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;[Cloud] 12주차-2. Minikube + kubectl 실습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⭐ 핵심 개념 정리YAML서비스 간에 데이터를 주고받을 때 사용하는 데이터 직렬화 포맷 중 하나다. JSON, XML과 동일한 역할을 하지만 사람이 읽기 더 쉬운 구조로 되어 있다. Kubernetes에서 리소스를&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tryintogmlt.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;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt; [Cloud]&amp;nbsp;12주차-3.&amp;nbsp;Kubernetes&amp;nbsp;Deployment&amp;nbsp;실습&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/38&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tryintogmlt.tistory.com/38&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780511802120&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;[Cloud] 12주차-3. Kubernetes Deployment 실습&quot; data-og-description=&quot;⭐ 핵심 개념 정리DeploymentPod와 ReplicaSet에 대한 관리를 제공하는 단위다. 단순히 Pod를 실행하는 것을 넘어, 아래와 같은 기능을 포함한다.Self-healing : Pod가 삭제되거나 죽으면 자동으로 다시 생성&quot; data-og-host=&quot;tryintogmlt.tistory.com&quot; data-og-source-url=&quot;https://tryintogmlt.tistory.com/38&quot; data-og-url=&quot;https://tryintogmlt.tistory.com/38&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mQlJf/dJMb9lletbc/PrCOKzZ3VkTAqCj3lj4l71/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/xNbga/dJMb9hC8ydG/e1JgfsxB5qJVieLggVt2FK/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/bdI6Ak/dJMb9c9Fckn/u1k2g4KR9I3Uf4qcQ0N5R1/img.png?width=1152&amp;amp;height=1152&amp;amp;face=0_0_1152_1152&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/38&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tryintogmlt.tistory.com/38&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mQlJf/dJMb9lletbc/PrCOKzZ3VkTAqCj3lj4l71/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/xNbga/dJMb9hC8ydG/e1JgfsxB5qJVieLggVt2FK/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/bdI6Ak/dJMb9c9Fckn/u1k2g4KR9I3Uf4qcQ0N5R1/img.png?width=1152&amp;amp;height=1152&amp;amp;face=0_0_1152_1152');&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;[Cloud] 12주차-3. Kubernetes Deployment 실습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⭐ 핵심 개념 정리DeploymentPod와 ReplicaSet에 대한 관리를 제공하는 단위다. 단순히 Pod를 실행하는 것을 넘어, 아래와 같은 기능을 포함한다.Self-healing : Pod가 삭제되거나 죽으면 자동으로 다시 생성&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tryintogmlt.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;</description>
      <category>과제 제출</category>
      <author>tryinto_gmlt</author>
      <guid isPermaLink="true">https://tryintogmlt.tistory.com/39</guid>
      <comments>https://tryintogmlt.tistory.com/39#entry39comment</comments>
      <pubDate>Thu, 4 Jun 2026 03:38:05 +0900</pubDate>
    </item>
    <item>
      <title>[Cloud] 12주차-3. Kubernetes Deployment 실습</title>
      <link>https://tryintogmlt.tistory.com/38</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ 핵심 개념 정리&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Deployment&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;Pod와 ReplicaSet에 대한 관리를 제공하는 단위&lt;/span&gt;다. 단순히 Pod를 실행하는 것을 넘어, 아래와 같은 기능을 포함한다.&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;Self-healing&lt;/b&gt; : Pod가 삭제되거나 죽으면 자동으로 다시 생성한다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Scaling&lt;/b&gt; : replica 수를 조정해 Pod 개수를 동적으로 늘리거나 줄인다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Rollout&lt;/b&gt; : 서비스 중단 없이 새로운 버전으로 업데이트한다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Service&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;쿠버네티스에 배포한 Pod를 외부에서 접근하기 쉽게 추상화한 리소스&lt;/span&gt;다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Pod는 생성될 때 IP를 할당받지만, 죽었다가 다시 살아나는 과정에서 IP가 재할당되기 때문에 고정된 IP로 접근할 수 없다&lt;/li&gt;
&lt;li&gt;따라서 클러스터 외부 또는 내부에서 Pod에 접근할 때는 Pod IP가 아닌 &lt;b&gt;Service&lt;/b&gt;를 통해 접근한다&lt;/li&gt;
&lt;li&gt;Service는 고정된 IP를 가지며, 하나 또는 여러 개의 Pod와 매칭된다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Deployment YAML 파일 작성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Deployment를 정의할 YAML 파일을 작성&lt;/span&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;vi deployment.yaml&lt;/code&gt;을 실행해 vi 편집기를 열고, &lt;code&gt;i&lt;/code&gt;를 눌러 입력 모드로 들어간 뒤 아래 내용을 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;nginx 컨테이너를 실행하는 Pod를 3개 생성하도록 설정&lt;/span&gt;한 코드이다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;vi deployment.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80&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;code&gt;Esc&lt;/code&gt; &amp;rarr; &lt;code&gt;:wq&lt;/code&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;2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;작성한 deployment.yaml 파일 내용이 제대로 저장되었는지 확인&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;cat deployment.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ 클러스터 시작 및 Deployment 생성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) Docker 드라이버를 사용하여 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;minikube 클러스터를 시작&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;minikube start --driver=docker&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;2) deployment.yaml 파일을 클러스터에 적용하여 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Deployment를 생성&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;coq&quot;&gt;&lt;code&gt;kubectl apply -f deployment.yaml&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;3) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Pod 생성 상태를 확인&lt;/span&gt;한다. &lt;code&gt;replicas: 3&lt;/code&gt; 설정이 반영되어 nginx Pod 3개가 생성되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl get pod&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcPKMC/dJMcaar0R4M/jMzNFGXwnawiBx0dF875V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcPKMC/dJMcaar0R4M/jMzNFGXwnawiBx0dF875V1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcPKMC/dJMcaar0R4M/jMzNFGXwnawiBx0dF875V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcPKMC%2FdJMcaar0R4M%2FjMzNFGXwnawiBx0dF875V1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;598&quot; height=&quot;337&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Self-healing 확인하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;실행 중인 Pod 중 하나를 삭제&lt;/span&gt;한다. Pod 이름은 &lt;code&gt;kubectl get pod&lt;/code&gt;로 확인한 이름을 사용한다.&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;kubectl delete pod {삭제할 Pod 이름}&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;2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;삭제 직후 Pod 목록을 다시 확인&lt;/span&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Deployment가 삭제된 Pod를 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;자동으로 새로 생성해 총 3개의 Pod가 Running 상태로 유지되는 것을 확인&lt;/span&gt;할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl get pod&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Deployment는 지정된 replica 수를 항상 유지하기 위해 삭제된 Pod를 자동으로 다시 생성한다. &lt;br /&gt;이것이 &lt;b&gt;Self-healing&lt;/b&gt;이다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Replica 수 조정하기 (Scale)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Replica 수를 10개로 확장&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl scale deployment/nginx-deployment --replicas=10&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;2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Deployment와 Pod 상태를 확인&lt;/span&gt;한다. Deployment가 10/10 READY 상태가 되고, Pod 10개가 Running 상태로 확인된다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl get deployment
kubectl get pod&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;3) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Replica 수를 1개로 축소&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl scale deployment/nginx-deployment --replicas=1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Pod 상태를 확인&lt;/span&gt;한다. 불필요해진 Pod들이 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Terminating 상태를 거친 뒤, 최종적으로 Pod 1개만 Running 상태&lt;/span&gt;로 남는다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl get pod&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Pod 상태 변화를 실시간으로 확인&lt;/span&gt;한다. 종료&amp;nbsp;시&amp;nbsp;Ctrl&amp;nbsp;+&amp;nbsp;C를&amp;nbsp;누른다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot;&gt;&lt;code&gt;kubectl get pod -w&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBy6X3/dJMcadB8WPl/Tn9qcHzD4VfrSl0CZs3Kz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBy6X3/dJMcadB8WPl/Tn9qcHzD4VfrSl0CZs3Kz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBy6X3/dJMcadB8WPl/Tn9qcHzD4VfrSl0CZs3Kz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBy6X3%2FdJMcadB8WPl%2FTn9qcHzD4VfrSl0CZs3Kz0%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;654&quot; height=&quot;460&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;646&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Deployment 삭제하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;nginx-deployment를 삭제하고, Pod가 정상적으로 종료되는지 실시간으로 확인&lt;/span&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Deployment를 삭제하면 해당 Deployment가 관리하던 Pod도 함께 종료된다.&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;kubectl delete deployment nginx-deployment
kubectl get pod -w&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;2) 모든 Pod가 종료되었는지 최종 확인한다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl get pod&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;965&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjergY/dJMcagThPCm/PmVYVjsmLKRvIePvyG5KE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjergY/dJMcagThPCm/PmVYVjsmLKRvIePvyG5KE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjergY/dJMcagThPCm/PmVYVjsmLKRvIePvyG5KE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjergY%2FdJMcagThPCm%2FPmVYVjsmLKRvIePvyG5KE1%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;697&quot; height=&quot;146&quot; data-origin-width=&quot;965&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>클라우드응용SW개발</category>
      <author>tryinto_gmlt</author>
      <guid isPermaLink="true">https://tryintogmlt.tistory.com/38</guid>
      <comments>https://tryintogmlt.tistory.com/38#entry38comment</comments>
      <pubDate>Thu, 4 Jun 2026 03:23:26 +0900</pubDate>
    </item>
    <item>
      <title>[Cloud] 12주차-2. Minikube + kubectl 실습</title>
      <link>https://tryintogmlt.tistory.com/37</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ 핵심 개념 정리&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;YAML&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 간에 데이터를 주고받을 때 사용하는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;데이터 직렬화 포맷&lt;/span&gt; 중 하나다. JSON, XML과 동일한 역할을 하지만 사람이 읽기 더 쉬운 구조로 되어 있다. Kubernetes에서 리소스를 정의할 때 주로 사용한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;⚠️ YAML은 들여쓰기에 Tab이 아닌 Space(공백)를 사용해야 한다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Pod&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;쿠버네티스에서 배포 가능한 가장 작은 컴퓨팅 단위&lt;/span&gt;다. 컨테이너를 감싸는 단위로, Pod 단위로 스케줄링, 로드 밸런싱, 스케일링 등의 관리 작업이 이루어진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;하나의 Pod는 한 개 또는 여러 개의 컨테이너로 구성&lt;/span&gt;된다&lt;/li&gt;
&lt;li&gt;Pod 내부의 컨테이너들은 네트워크, 스토리지 등의 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;자원을 공유&lt;/span&gt;한다&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;어떤 애플리케이션을 배포하려면 최소 Pod 단위로 구성&lt;/span&gt;해야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Minikube + kubectl 설치하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0) Minikube를 원활하게 실행하려면 충분한 vCPU와 메모리가 필요하기 때문에, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Azure VM의 크기를 적절하게 조정&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;1065&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/maPOl/dJMcagMyelT/tQoWQtabPq7FSSKlRpaN1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/maPOl/dJMcagMyelT/tQoWQtabPq7FSSKlRpaN1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/maPOl/dJMcagMyelT/tQoWQtabPq7FSSKlRpaN1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmaPOl%2FdJMcagMyelT%2FtQoWQtabPq7FSSKlRpaN1K%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;749&quot; height=&quot;366&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Minikube 실행 파일을 Ubuntu 서버에 다운로드&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;curl -LO https://storage.googleapis.com/minikube/releases/v1.22.0/minikube-linux-amd64&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;2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;다운로드한 파일을 &lt;code&gt;/usr/local/bin/minikube&lt;/code&gt; 위치에 설치&lt;/span&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경로에 설치하면 터미널 어디서든 &lt;code&gt;minikube&lt;/code&gt; 명령어를 사용할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;sudo install minikube-linux-amd64 /usr/local/bin/minikube&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;3) 설치가 정상적으로 완료되었는지 확인한다. 도움말이 출력되면 성공이다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;minikube help&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;1065&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RC7YZ/dJMcaicw8DV/2JZkZIk05q7Ey8NKPSdQ7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RC7YZ/dJMcaicw8DV/2JZkZIk05q7Ey8NKPSdQ7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RC7YZ/dJMcaicw8DV/2JZkZIk05q7Ey8NKPSdQ7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRC7YZ%2FdJMcaicw8DV%2F2JZkZIk05q7Ey8NKPSdQ7K%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;1065&quot; height=&quot;348&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;348&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;4) Kubernetes 클러스터를 제어하는 CLI 도구인 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;kubectl을 다운로드한다&lt;/span&gt;.&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;curl -LO https://dl.k8s.io/release/v1.22.1/bin/linux/amd64/kubectl&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;다운로드한 kubectl 파일을 실행 가능한 명령어로 설치&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;sudo install -o root -g root -m0755 kubectl /usr/local/bin/kubectl&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;6) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;kubectl 클라이언트 버전을 확인&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;kubectl version&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;1065&quot; data-origin-height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbTrsa/dJMcacJ9s88/9I4kPzKwbv0VrgstkK1pt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbTrsa/dJMcacJ9s88/9I4kPzKwbv0VrgstkK1pt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbTrsa/dJMcacJ9s88/9I4kPzKwbv0VrgstkK1pt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbTrsa%2FdJMcacJ9s88%2F9I4kPzKwbv0VrgstkK1pt0%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;1065&quot; height=&quot;105&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;105&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ 클러스터 시작 및 상태 확인하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) Docker 드라이버를 사용하여 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Minikube Kubernetes 클러스터를 생성하고 실행&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;minikube start --driver=docker&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;1065&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBv0dH/dJMcahxToJZ/bLLfOFNJvkhB54JEk7FBe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBv0dH/dJMcahxToJZ/bLLfOFNJvkhB54JEk7FBe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBv0dH/dJMcahxToJZ/bLLfOFNJvkhB54JEk7FBe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBv0dH%2FdJMcahxToJZ%2FbLLfOFNJvkhB54JEk7FBe1%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;1065&quot; height=&quot;159&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;159&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;2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Minikube 구성 요소가 정상적으로 실행 중인지 확인&lt;/span&gt;한다. &amp;nbsp;host,&amp;nbsp;kubelet,&amp;nbsp;apiserver가&amp;nbsp;Running,&amp;nbsp;kubeconfig가&amp;nbsp;Configured&amp;nbsp;상태이면&amp;nbsp;정상이다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;minikube status&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;578&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tMA5c/dJMcacQQulg/bKw2osM9cTVdZA0rUWkuT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tMA5c/dJMcacQQulg/bKw2osM9cTVdZA0rUWkuT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tMA5c/dJMcacQQulg/bKw2osM9cTVdZA0rUWkuT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtMA5c%2FdJMcacQQulg%2FbKw2osM9cTVdZA0rUWkuT1%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;385&quot; height=&quot;142&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) default namespace에 있는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Pod 목록을 확인&lt;/span&gt;한다. 아직&amp;nbsp;직접&amp;nbsp;만든&amp;nbsp;Pod가&amp;nbsp;없으면&amp;nbsp;No&amp;nbsp;resources&amp;nbsp;found가&amp;nbsp;나와도&amp;nbsp;정상이다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl get pod&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;4) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Kubernetes 시스템 namespace에 있는 Pod들을 확인&lt;/span&gt;한다. coredns, etcd, kube-apiserver 등의 Pod가 보인다.&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;kubectl get pod -n kube-system&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 클러스터 삭제 및 재생성 과정을 확인하기 위해 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;현재 생성된 Minikube 클러스터를 삭제&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;minikube delete&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;1039&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MeIZQ/dJMcaiKgUu2/nQeZfxv7wUXk1wcCvln6G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MeIZQ/dJMcaiKgUu2/nQeZfxv7wUXk1wcCvln6G1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MeIZQ/dJMcaiKgUu2/nQeZfxv7wUXk1wcCvln6G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMeIZQ%2FdJMcaiKgUu2%2FnQeZfxv7wUXk1wcCvln6G1%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;575&quot; height=&quot;230&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Pod 생성 및 관리하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Minikube 클러스터를 다시 생성하고 실행&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot;&gt;&lt;code&gt;minikube start --driver=docker&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;2) counter Pod를 정의할 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;YAML 파일을 생성&lt;/span&gt;한다. vi가 열리면 &lt;code&gt;i&lt;/code&gt;를 눌러 입력 모드로 들어간다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;vi pod.yaml&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;3) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;vi 편집기에서 아래 내용을 작성한 후, Esc&amp;nbsp;&amp;rarr;&amp;nbsp;:wq를 입력해 저장하고 종료&lt;/span&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 YAML 파일은 BusyBox 컨테이너를 실행하여 1초마다 숫자와 현재 시간을 출력하는 Kubernetes Pod를 생성한다.&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  name: counter
spec:
  containers:
  - name: count
    image: busybox
    args:
    - /bin/sh
    - -c
    - 'i=0; while true; do echo &quot;$i: $(date)&quot;; i=$((i+1)); sleep 1; done'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;작성한 pod.yaml 파일 내용이 제대로 저장되었는지 확인&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;cat pod.yaml&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;1065&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciNGpf/dJMcaaMg3DL/MSwkjpPeB7aee3NIsSt4r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciNGpf/dJMcaaMg3DL/MSwkjpPeB7aee3NIsSt4r0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciNGpf/dJMcaaMg3DL/MSwkjpPeB7aee3NIsSt4r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciNGpf%2FdJMcaaMg3DL%2FMSwkjpPeB7aee3NIsSt4r0%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;660&quot; height=&quot;221&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;357&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;5) pod.yaml 파일을 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Kubernetes 클러스터에 적용하여 counter Pod를 생성&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;coq&quot;&gt;&lt;code&gt;kubectl apply -f pod.yaml&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;6) Pod 생성 후 아래 명령어로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;상태를 확인&lt;/span&gt;할 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 202px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt; 명령어 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt; 참고 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;kubectl get pod&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;default namespace의 Pod 목록 확인&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;가장 기본적인 Pod 상태 확인 명령어&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;kubectl get pod counter&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;counter Pod 하나만 따로 조회&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;특정 Pod의 실행 상태 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;height: 34px;&quot;&gt;&lt;b&gt;kubectl describe pod counter&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot;&gt;상세 상태, 컨테이너 정보, 이벤트 확인&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot;&gt;Pod가 정상 실행되지 않을 때 원인 파악에 유용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;kubectl logs counter&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;counter Pod의 출력 로그 확인&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;1초마다 숫자와 시간이 정상 출력되는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;kubectl get pod -w&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Pod 상태 변화를 실시간으로 확인&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;종료 시 Ctrl + C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;kubectl get pod -A&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;전체 namespace의 Pod 목록 확인&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;모든 namespace의 Pod를 한 번에 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;height: 42px;&quot;&gt;&lt;b&gt;kubectl get -f pod.yaml&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot;&gt;pod.yaml 파일에 정의된 리소스의 현재 상태 확인&lt;/td&gt;
&lt;td style=&quot;height: 42px;&quot;&gt;kubectl get pod -f가 아니라 kubectl get -f pod.yaml 형태로 입력&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UXtgG/dJMcagMyeOF/rqBdeG45aWZ8TTVUVdyxU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UXtgG/dJMcagMyeOF/rqBdeG45aWZ8TTVUVdyxU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UXtgG/dJMcagMyeOF/rqBdeG45aWZ8TTVUVdyxU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUXtgG%2FdJMcagMyeOF%2FrqBdeG45aWZ8TTVUVdyxU1%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;493&quot; height=&quot;54&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vN8wf/dJMcabYLlWY/22sYwWIgIupUQR5SkrNew0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vN8wf/dJMcabYLlWY/22sYwWIgIupUQR5SkrNew0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vN8wf/dJMcabYLlWY/22sYwWIgIupUQR5SkrNew0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvN8wf%2FdJMcabYLlWY%2F22sYwWIgIupUQR5SkrNew0%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;723&quot; height=&quot;53&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDCzvn/dJMcadoDvLX/FyFRHMuCkMl7L1zk43iHvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDCzvn/dJMcadoDvLX/FyFRHMuCkMl7L1zk43iHvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDCzvn/dJMcadoDvLX/FyFRHMuCkMl7L1zk43iHvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDCzvn%2FdJMcadoDvLX%2FFyFRHMuCkMl7L1zk43iHvK%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;713&quot; height=&quot;189&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b95gAT/dJMcagFMI7D/G685DNU4A5NAcTTFz3gqmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b95gAT/dJMcagFMI7D/G685DNU4A5NAcTTFz3gqmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b95gAT/dJMcagFMI7D/G685DNU4A5NAcTTFz3gqmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb95gAT%2FdJMcagFMI7D%2FG685DNU4A5NAcTTFz3gqmK%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;209&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;353&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpgpWQ/dJMcahq85jE/HfMNk5QS9AxkFCjp9d4rK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpgpWQ/dJMcahq85jE/HfMNk5QS9AxkFCjp9d4rK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpgpWQ/dJMcahq85jE/HfMNk5QS9AxkFCjp9d4rK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpgpWQ%2FdJMcahq85jE%2FHfMNk5QS9AxkFCjp9d4rK0%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;415&quot; height=&quot;61&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wmz4Y/dJMcadoDvLZ/hmkkRvD6CDWIaF3ZcGsDnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wmz4Y/dJMcadoDvLZ/hmkkRvD6CDWIaF3ZcGsDnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wmz4Y/dJMcadoDvLZ/hmkkRvD6CDWIaF3ZcGsDnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWmz4Y%2FdJMcadoDvLZ%2FhmkkRvD6CDWIaF3ZcGsDnK%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;765&quot; height=&quot;186&quot; data-origin-width=&quot;1065&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eYpAR8/dJMcadoDvL0/5SvDAsLX9AqvjNXaRJ8URk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eYpAR8/dJMcadoDvL0/5SvDAsLX9AqvjNXaRJ8URk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eYpAR8/dJMcadoDvL0/5SvDAsLX9AqvjNXaRJ8URk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeYpAR8%2FdJMcadoDvL0%2F5SvDAsLX9AqvjNXaRJ8URk%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;525&quot; height=&quot;58&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;counter Pod 안의 컨테이너에 셸로 접속&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;kubectl exec -it counter -- /bin/sh&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;접속 후 빠져나오려면 exit를 입력한다.&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;8) pod.yaml 파일로 생성했던 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;counter Pod를 삭제하고, 정상적으로 삭제되었는지 확인&lt;/span&gt;한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: start;&quot;&gt;삭제 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;No resources found in default namespace&lt;/b&gt;&lt;span style=&quot;color: #666666; text-align: start;&quot;&gt;가 나오면 정상이다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;kubectl delete -f pod.yaml
kubectl get pod&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;950&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k2MvB/dJMcabLglvm/CLJyRWGL1ZS6b6aVBFxSZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k2MvB/dJMcabLglvm/CLJyRWGL1ZS6b6aVBFxSZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k2MvB/dJMcabLglvm/CLJyRWGL1ZS6b6aVBFxSZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk2MvB%2FdJMcabLglvm%2FCLJyRWGL1ZS6b6aVBFxSZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;672&quot; height=&quot;129&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;182&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>클라우드응용SW개발</category>
      <author>tryinto_gmlt</author>
      <guid isPermaLink="true">https://tryintogmlt.tistory.com/37</guid>
      <comments>https://tryintogmlt.tistory.com/37#entry37comment</comments>
      <pubDate>Thu, 4 Jun 2026 02:19:44 +0900</pubDate>
    </item>
    <item>
      <title>[Cloud] 12주차-1. 쿠버네티스와 Minikube</title>
      <link>https://tryintogmlt.tistory.com/36</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ 쿠버네티스(Kubernetes)란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스(Kubernetes)는&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;컨테이너화된&amp;nbsp;애플리케이션의&amp;nbsp;배포,&amp;nbsp;확장,&amp;nbsp;관리를&amp;nbsp;자동화하는&amp;nbsp;오픈소스&amp;nbsp;컨테이너&amp;nbsp;오케스트레이션&amp;nbsp;플랫폼&lt;/span&gt;이다.&amp;nbsp;Docker와&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;이때&amp;nbsp;쿠버네티스는&amp;nbsp;여러&amp;nbsp;서버(Node)에&amp;nbsp;걸쳐&amp;nbsp;컨테이너를&amp;nbsp;자동으로&amp;nbsp;배포하고,&amp;nbsp;실행&amp;nbsp;상태를&amp;nbsp;관리하며,&amp;nbsp;장애가&amp;nbsp;발생하면&amp;nbsp;복구하는&amp;nbsp;역할을&amp;nbsp;한다.&amp;nbsp;즉,&amp;nbsp;쿠버네티스는&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;여러&amp;nbsp;컨테이너를&amp;nbsp;안정적으로&amp;nbsp;운영하기&amp;nbsp;위한&amp;nbsp;관리&amp;nbsp;시스템&lt;/span&gt;이라고&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있다.&lt;br /&gt;&lt;br /&gt;2014년&amp;nbsp;Google이&amp;nbsp;오픈소스로&amp;nbsp;공개했으며,&amp;nbsp;현재는&amp;nbsp;CNCF(Cloud&amp;nbsp;Native&amp;nbsp;Computing&amp;nbsp;Foundation)에서&amp;nbsp;관리하고&amp;nbsp;있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;주요 기능&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 자동화된 컨테이너 관리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨테이너의 배포, 스케일링, 롤아웃(업데이트), 롤백을 자동으로 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 서비스 디스커버리 &amp;amp; 로드 밸런싱&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DNS 이름 또는 IP 주소를 통해 컨테이너에 접근 가능하도록 지원&lt;/li&gt;
&lt;li&gt;트래픽을&amp;nbsp;여러&amp;nbsp;컨테이너에&amp;nbsp;고르게&amp;nbsp;분산&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 스토리지 오케스트레이션&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로컬&amp;nbsp;저장소나&amp;nbsp;클라우드&amp;nbsp;스토리지를&amp;nbsp;컨테이너에&amp;nbsp;자동으로&amp;nbsp;연결하여&amp;nbsp;사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 자동 복구 (Self-healing)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨테이너가 중단되면 자동으로 재시작&lt;/li&gt;
&lt;li&gt;노드(서버)에&amp;nbsp;문제가&amp;nbsp;발생하면&amp;nbsp;해당&amp;nbsp;컨테이너를&amp;nbsp;다른&amp;nbsp;노드에서&amp;nbsp;다시&amp;nbsp;실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 선언적 구성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원하는&amp;nbsp;상태를&amp;nbsp;YAML&amp;nbsp;파일에&amp;nbsp;정의하면,&amp;nbsp;쿠버네티스가&amp;nbsp;현재&amp;nbsp;상태를&amp;nbsp;지속적으로&amp;nbsp;확인하고&amp;nbsp;원하는&amp;nbsp;상태로&amp;nbsp;유지&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿠버네티스 아키텍처 구조&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 클러스터는 크게 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;마스터(Master)와 워커 노드(Worker Node)로 구성&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;1400&quot; data-origin-height=&quot;886&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKZoCX/dJMcagFMIqj/I5x4AHCmTWXmmeHVqqz30k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKZoCX/dJMcagFMIqj/I5x4AHCmTWXmmeHVqqz30k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKZoCX/dJMcagFMIqj/I5x4AHCmTWXmmeHVqqz30k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKZoCX%2FdJMcagFMIqj%2FI5x4AHCmTWXmmeHVqqz30k%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;643&quot; height=&quot;407&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;886&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 202px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 21px; width: 21.2791%;&quot;&gt;&lt;b&gt; 구분 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 21px; width: 21.0465%;&quot;&gt;&lt;b&gt; 구성 요소&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 21px; width: 57.4418%;&quot;&gt;&lt;b&gt;역할&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 97px; width: 21.2791%;&quot; rowspan=&quot;4&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Kubernetes Master&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;전체 클러스터를 관리하는&lt;br /&gt;컨트롤 플레인&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 21.0465%;&quot;&gt;&lt;b&gt;API Server&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 57.4418%;&quot;&gt;모든 요청의 진입점. kubectl 명령어를 받아 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 21.0465%;&quot;&gt;&lt;b&gt;Scheduler&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 57.4418%;&quot;&gt;새로운 Pod를 어느 노드에 배치할지 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;height: 34px; width: 21.0465%;&quot;&gt;&lt;b&gt;Controller-Manager&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 34px; width: 57.4418%;&quot;&gt;클러스터 상태를 지속적으로 감시하고 원하는 상태 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 21.0465%;&quot;&gt;&lt;b&gt;etcd&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 57.4418%;&quot;&gt;클러스터의 모든 설정 및 상태 정보를 저장하는 분산 키-값 저장소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 42px;&quot;&gt;
&lt;td style=&quot;height: 84px; width: 21.2791%;&quot; rowspan=&quot;3&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Worker Node&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;실제 애플리케이션이&lt;br /&gt;실행되는 서버&lt;/td&gt;
&lt;td style=&quot;height: 42px; width: 21.0465%;&quot;&gt;&lt;b&gt;Pod&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 42px; width: 57.4418%;&quot;&gt;컨테이너를 실행하는 가장 작은 단위. 하나의 Pod 안에 하나 이상의 컨테이너 포함 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 21.0465%;&quot;&gt;&lt;b&gt;kubelet&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 57.4418%;&quot;&gt;마스터의 명령을 받아 해당 노드의 Pod 상태 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 21.0465%;&quot;&gt;&lt;b&gt;Kube-proxy&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 57.4418%;&quot;&gt;네트워크 트래픽 라우팅 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ 쿠버네티스의 주요 배포판&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스는 다양한 환경과 목적에 맞게 여러 배포판이 존재한다. 크게 &lt;b&gt;직접 설치형&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. 바닐라 쿠버네티스 (Vanilla Kubernetes)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CNCF에서 관리하는 공식 배포판&lt;/li&gt;
&lt;li&gt;가장 순수한 형태로, 다른 모든 배포판의 기준이 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Red Hat OpenShift&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기업용으로 설계된 엔터프라이즈급 배포판&lt;/li&gt;
&lt;li&gt;CI/CD 파이프라인, Helm 차트 등 다양한 도구가 기본 내장&lt;/li&gt;
&lt;li&gt;RHEL(Red Hat Enterprise Linux) 기반으로 운영&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Rancher&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;온프레미스/클라우드 등 다양한 환경에서 멀티 클러스터 관리에 강점&lt;/li&gt;
&lt;li&gt;RKE(Rancher Kubernetes Engine)를 통한 간편한 클러스터 구축 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. Amazon EKS (Elastic Kubernetes Service)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS에서 제공하는 관리형 쿠버네티스 서비스&lt;/li&gt;
&lt;li&gt;AWS 인프라와 긴밀하게 통합되어 있어 AWS 사용자에게 최적&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. Google GKE (Google Kubernetes Engine)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;쿠버네티스를 만든 구글이 제공하는 관리형 서비스&lt;/li&gt;
&lt;li&gt;쿠버네티스 최신 기능을 가장 빠르게 반영&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. Microsoft AKS (Azure Kubernetes Service)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Microsoft Azure에서 제공하는 관리형 쿠버네티스 서비스&lt;/li&gt;
&lt;li&gt;Azure 클라우드 서비스와 통합되어 있어 Azure 사용자에게 최적&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. DigitalOcean Kubernetes&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;간단한 설정과 저렴한 비용으로 빠르게 쿠버네티스 환경 구축 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt; 클라우드 제공업체의 관리형 서비스(EKS, GKE, AKS)는 해당 클라우드에 최적화되어 있고, &lt;br /&gt;Rancher나 OpenShift 같은 배포판은 환경에 구애받지 않고 유연하게 사용할 수 있다.&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ 미니쿠베 (Minikube)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Minikube는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;로컬 환경에서 쿠버네티스를 실습하기 위한 경량 배포판&lt;/span&gt;이다.&lt;br /&gt;실제 운영 클러스터는 여러 서버(노드)가 필요하지만, Minikube는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;단일 노드로 마스터와 워커를 하나에 구성&lt;/span&gt;해주기 때문에 개인 PC에서도 쿠버네티스를 경험해볼 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;주요 특징&lt;/h4&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;: 마스터 + 노드가 하나의 VM 안에 구성됨&lt;/li&gt;
&lt;li&gt;&lt;b&gt;경량화&lt;/b&gt;: 개발, 테스트, 학습 목적에 최적화된 구현체&lt;/li&gt;
&lt;li&gt;&lt;b&gt;크로스 플랫폼&lt;/b&gt;: Linux, macOS, Windows 모두 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 기능 지원&lt;/b&gt;: DNS, NodePort, ConfigMap, Secret, 대시보드, Ingress 등 실무에서 쓰는 주요 기능 대부분 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt; 실제 프로덕션 환경에서는 EKS, GKE, AKS 같은 클라우드 관리형 서비스를 사용하지만, &lt;br /&gt;쿠버네티스를 처음 배우는 단계에서는 Minikube로 시작하는 것이 가장 일반적이다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt53dV/dJMcaiDysK1/mKv7bXS6AdCgUrNZXmKmfk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt53dV/dJMcaiDysK1/mKv7bXS6AdCgUrNZXmKmfk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt53dV/dJMcaiDysK1/mKv7bXS6AdCgUrNZXmKmfk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt53dV%2FdJMcaiDysK1%2FmKv7bXS6AdCgUrNZXmKmfk%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;435&quot; height=&quot;306&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;506&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>클라우드응용SW개발</category>
      <author>tryinto_gmlt</author>
      <guid isPermaLink="true">https://tryintogmlt.tistory.com/36</guid>
      <comments>https://tryintogmlt.tistory.com/36#entry36comment</comments>
      <pubDate>Thu, 4 Jun 2026 02:01:53 +0900</pubDate>
    </item>
    <item>
      <title>[Cloud] 11주차-2. Docker 설치 및 이미지 빌드 실습</title>
      <link>https://tryintogmlt.tistory.com/35</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Docker 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Azure에서 생성한 Ubuntu 22.04 VM에 SSH로 접속한 후, 터미널 환경에서 Docker 설치를 진행하였다.&lt;br /&gt;Docker 설치 과정은 &lt;a style=&quot;color: #0070d1; text-align: start;&quot; href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot;&gt;Docker 공식 문서&lt;/a&gt;에서 제공하는 Ubuntu용 설치 명령어를 참고하여 순서대로 수행하였다.&lt;/p&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)&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;패키지 목록을 최신 상태로 갱신&lt;/span&gt;하고, Docker 저장소에 안전하게 접근하기 위한 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;기본 패키지를 설치&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install ca-certificates curl&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;2) apt가 Docker 패키지의 무결성을 검증할 수 있도록, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Docker 공식 서버에서 GPG 키를 내려받아 등록&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc&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;3) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Docker 공식 저장소를 Ubuntu 패키지 소스 목록에 추가&lt;/span&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 Ubuntu 버전 코드명과 시스템 아키텍처를 자동으로 반영하도록 작성되어 있다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo tee /etc/apt/sources.list.d/docker.sources &amp;lt;&amp;lt;EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release &amp;amp;&amp;amp; echo &quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&quot;)
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF&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;4) &lt;span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;새로 추가한 Docker 저장소의 패키지 정보를 반영하기 위해 다시 업데이트&lt;/span&gt;하고, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;필요한&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt; 플러그인을 설치&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설치되는 패키지&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;docker-ce:&lt;/b&gt; Docker Engine 본체&lt;/li&gt;
&lt;li&gt;&lt;b&gt;docker-ce-cli:&lt;/b&gt; docker 명령어를 사용하기 위한 CLI&lt;/li&gt;
&lt;li&gt;&lt;b&gt;containerd.io:&lt;/b&gt; 컨테이너 런타임&lt;/li&gt;
&lt;li&gt;&lt;b&gt;docker-buildx-plugin:&lt;/b&gt; 멀티 플랫폼 이미지 빌드 도구&lt;/li&gt;
&lt;li&gt;&lt;b&gt;docker-compose-plugin:&lt;/b&gt; 여러 컨테이너를 한 번에 관리하는 Compose 도구&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;5) hello-world 이미지를 실행하여 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Docker가 정상적으로 설치되었는지 확인&lt;/span&gt;한다.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo docker run hello-world&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ sudo 없이 Docker 사용하도록 권한 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 직후 &lt;code&gt;docker ps&lt;/code&gt;를 입력하면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;permission denied 오류가 발생&lt;/span&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker 데몬이 root 권한으로 실행되기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 사용자를 docker 그룹에 추가하면 매번 &lt;code&gt;sudo&lt;/code&gt;를 붙이지 않아도 된다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo groupadd docker           # docker 그룹 생성 (이미 존재하면 메시지가 뜨지만 무시)
sudo usermod -aG docker $USER  # 현재 사용자를 docker 그룹에 추가
newgrp docker                  # 현재 터미널 세션에 즉시 적용&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;code&gt;docker ps&lt;/code&gt;를 입력했을 때 오류 없이 목록이 출력된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ 기본 명령어 실습&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;pull &amp;rarr; run &amp;rarr; exec &amp;rarr; logs &amp;rarr; stop &amp;rarr; rm&lt;/b&gt; 순서로 컨테이너 생명주기를 실습한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;이미지 받기 / 컨테이너 실행&lt;/h4&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Ubuntu 18.04 이미지를 Docker Hub에서 내려받기
docker pull ubuntu:18.04

# demo1: bash 터미널에 바로 접속 (프롬프트가 root@컨테이너ID:/# 로 바뀌면 컨테이너 내부에 들어온 것)
docker run -it --name demo1 ubuntu:18.04 /bin/bash
exit  # 컨테이너에서 빠져나오기 (Ctrl+D도 가능)

# demo2: 백그라운드 모드로 실행
docker run -it -d --name demo2 ubuntu:18.04&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;❕ -it vs -d 옵션 ❕&lt;br /&gt;-it: 컨테이너 실행과 동시에 터미널에 바로 접속한다. -i(interactive)와 -t(tty)의 조합이다.&lt;br /&gt;-d: 백그라운드 모드. 터미널을 점유하지 않고 컨테이너가 계속 실행 상태를 유지한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;컨테이너 목록 확인&lt;/h4&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker ps     # 현재 실행 중인 컨테이너만 표시
docker ps -a  # 종료된 컨테이너까지 포함하여 전체 표시&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OFvZa/dJMcag6Npke/5z9XCcalJ1Yx4Crkx1dFRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OFvZa/dJMcag6Npke/5z9XCcalJ1Yx4Crkx1dFRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OFvZa/dJMcag6Npke/5z9XCcalJ1Yx4Crkx1dFRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOFvZa%2FdJMcag6Npke%2F5z9XCcalJ1Yx4Crkx1dFRk%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;1086&quot; height=&quot;327&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;실행 중인 컨테이너 접속 / 로그 확인&lt;/h4&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 백그라운드로 실행 중인 demo2 컨테이너 내부로 접속
docker exec -it demo2 /bin/bash

# demo3: 1초마다 현재 시간을 출력하는 컨테이너 (로그 실습용)
docker run --name demo3 -d busybox sh -c &quot;while true; do $(echo date); sleep 1; done&quot;

docker logs demo3     # 현재까지 쌓인 로그 출력
docker logs demo3 -f  # 실시간으로 계속 출력 (-f: follow)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;컨테이너 정지 / 삭제 / 이미지 삭제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;docker&amp;nbsp;rm:&lt;/b&gt;&amp;nbsp;컨테이너를&amp;nbsp;삭제한다.&amp;nbsp;실행&amp;nbsp;중이라면&amp;nbsp;먼저&amp;nbsp;stop이&amp;nbsp;필요하다. &lt;br /&gt;&lt;b&gt;docker&amp;nbsp;rmi:&amp;nbsp;&lt;/b&gt;이미지를&amp;nbsp;삭제한다.&amp;nbsp;해당&amp;nbsp;이미지로&amp;nbsp;생성된&amp;nbsp;컨테이너가&amp;nbsp;남아&amp;nbsp;있으면&amp;nbsp;삭제되지&amp;nbsp;않는다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker stop demo2
docker stop demo3

docker rm demo1
docker rm demo2
docker rm demo3

docker images            # 로컬에 저장된 이미지 목록 확인
docker rmi ubuntu:18.04  # 이미지 삭제&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Dockerfile로 이미지 빌드하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dockerfile을 작성하면 실행 환경을 코드로 정의할 수 있고, 누구든 동일한 이미지를 빌드할 수 있다.&lt;/p&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;span style=&quot;background-color: #f6e199;&quot;&gt;실습 폴더 및 Dockerfile을 생성&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;mkdir docker-practice
cd docker-practice
touch Dockerfile
vi Dockerfile&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;2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Dockerfile을 작성&lt;/span&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vi에서 &lt;code&gt;i&lt;/code&gt;를 눌러 입력 모드로 전환한 뒤 아래 내용을 작성하고, &lt;code&gt;Esc&lt;/code&gt; &amp;rarr; &lt;code&gt;:wq&lt;/code&gt;로 저장 및 종료한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Dockerfile 주요 명령어&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;FROM:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;베이스 이미지를 지정한다. 모든 Dockerfile은 FROM으로 시작한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RUN:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이미지 빌드 과정에서 실행할 쉘 명령어다. 패키지 설치 등에 사용된다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CMD:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컨테이너가 실행될 때 기본으로 실행할 명령이다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker run&lt;span&gt;&amp;nbsp;&lt;/span&gt;시 덮어쓸 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;FROM ubuntu:18.04
RUN apt-get update
CMD [&quot;echo&quot;, &quot;Hello Docker&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;이미지를 빌드하고 실행&lt;/span&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 현재 디렉터리의 Dockerfile로 이미지 빌드 (마지막 .은 현재 위치를 빌드 컨텍스트로 사용)
docker build -t my-image:v1.0.0 .

docker images  # 빌드된 이미지 확인

# 이미지 실행 &amp;rarr; &quot;Hello Docker&quot; 출력
docker run my-image:v1.0.0&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;1086&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EKMy6/dJMcabEpWyJ/WTbJFBXZQZslS6Q0Zn7tN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EKMy6/dJMcabEpWyJ/WTbJFBXZQZslS6Q0Zn7tN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EKMy6/dJMcabEpWyJ/WTbJFBXZQZslS6Q0Zn7tN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEKMy6%2FdJMcabEpWyJ%2FWTbJFBXZQZslS6Q0Zn7tN1%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;1086&quot; height=&quot;178&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;178&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;957&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLfj7R/dJMcahR8Nyd/hkqnCBVRUpuZlj4eK0tkpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLfj7R/dJMcahR8Nyd/hkqnCBVRUpuZlj4eK0tkpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLfj7R/dJMcahR8Nyd/hkqnCBVRUpuZlj4eK0tkpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLfj7R%2FdJMcahR8Nyd%2FhkqnCBVRUpuZlj4eK0tkpk%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;957&quot; height=&quot;64&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;64&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;4)&amp;nbsp;docker ps -a로 전체 컨테이너 목록을 확인한 뒤, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;NAMES 컬럼에 표시된 이름으로 컨테이너를 삭제&lt;/span&gt;한다.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker ps -a  # 실행 후 컨테이너 목록 확인

docker rm &amp;lt;컨테이너 이름&amp;gt;&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;1086&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC2Wzi/dJMcaf7RmLO/Pj8NrNExaN4Z1W17OKfCak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC2Wzi/dJMcaf7RmLO/Pj8NrNExaN4Z1W17OKfCak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC2Wzi/dJMcaf7RmLO/Pj8NrNExaN4Z1W17OKfCak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC2Wzi%2FdJMcaf7RmLO%2FPj8NrNExaN4Z1W17OKfCak%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;1086&quot; height=&quot;94&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;94&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;1086&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FdZLf/dJMcahq82D1/HFe8AUCI0oIbYjACfqZCx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FdZLf/dJMcahq82D1/HFe8AUCI0oIbYjACfqZCx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FdZLf/dJMcahq82D1/HFe8AUCI0oIbYjACfqZCx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFdZLf%2FdJMcahq82D1%2FHFe8AUCI0oIbYjACfqZCx1%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;1086&quot; height=&quot;116&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>클라우드응용SW개발</category>
      <author>tryinto_gmlt</author>
      <guid isPermaLink="true">https://tryintogmlt.tistory.com/35</guid>
      <comments>https://tryintogmlt.tistory.com/35#entry35comment</comments>
      <pubDate>Wed, 3 Jun 2026 23:16:23 +0900</pubDate>
    </item>
    <item>
      <title>[Cloud] 11주차-1. 컨테이너 기술과 Docker의 이해</title>
      <link>https://tryintogmlt.tistory.com/34</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Docker란?&lt;/h2&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;보면&amp;nbsp;대부분&amp;nbsp;실행&amp;nbsp;환경&amp;nbsp;차이다.&amp;nbsp;OS&amp;nbsp;환경이&amp;nbsp;다르거나,&amp;nbsp;설치된&amp;nbsp;라이브러리&amp;nbsp;버전이&amp;nbsp;다르거나,&amp;nbsp;Python&amp;nbsp;버전이&amp;nbsp;달라서&amp;nbsp;생기는&amp;nbsp;문제들이다.&lt;br /&gt;&lt;br /&gt;Docker는&amp;nbsp;이&amp;nbsp;문제를&amp;nbsp;해결하기&amp;nbsp;위해&amp;nbsp;등장했다.&amp;nbsp;애플리케이션&amp;nbsp;코드뿐&amp;nbsp;아니라&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&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;/span&gt;이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이 패키지 단위를 컨테이너(Container)라고 부른다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ 가상 머신(VM) vs 컨테이너&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker 이전에는 실행 환경을 분리하기 위해 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;가상 머신(VM)&lt;/span&gt;을 사용했다. VM과 컨테이너는 모두 애플리케이션 실행 환경을 격리하지만, 동작 방식에는 차이가 있다.&lt;br /&gt;VM은 애플리케이션마다 별도의 Guest OS를 포함하여 실행된다. 격리 수준은 높지만, OS를 여러 개 실행해야 하므로&lt;span style=&quot;background-color: #f6e199;&quot;&gt; 메모리와 디스크 사용량이 크고 시작 속도가 느리다.&lt;/span&gt;&lt;br /&gt;반면&amp;nbsp;컨테이너는&amp;nbsp;호스트&amp;nbsp;OS의&amp;nbsp;커널을&amp;nbsp;공유하고,&amp;nbsp;애플리케이션&amp;nbsp;실행에&amp;nbsp;필요한&amp;nbsp;라이브러리와&amp;nbsp;설정만&amp;nbsp;포함한다.&amp;nbsp;따라서&amp;nbsp;VM보다&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;가볍고&amp;nbsp;빠르며,&amp;nbsp;배포와&amp;nbsp;이동이&amp;nbsp;쉽다.&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 53.8372%; height: 110px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 9.75447%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.5057%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt; 가상 머신 (VM) &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.7076%; height: 21px; text-align: center;&quot;&gt;&lt;b&gt; 컨테이너 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 9.75447%; height: 21px; text-align: center;&quot;&gt;OS 구조&lt;/td&gt;
&lt;td style=&quot;width: 18.5057%; height: 21px; text-align: center;&quot;&gt;앱마다 Guest OS 포함&lt;/td&gt;
&lt;td style=&quot;width: 17.7076%; height: 21px; text-align: center;&quot;&gt;호스트 OS 커널 공유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 9.75447%; height: 17px; text-align: center;&quot;&gt;자원 사용&lt;/td&gt;
&lt;td style=&quot;width: 18.5057%; height: 17px; text-align: center;&quot;&gt;많음&lt;/td&gt;
&lt;td style=&quot;width: 17.7076%; height: 17px; text-align: center;&quot;&gt;적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 9.75447%; height: 17px; text-align: center;&quot;&gt;실행 속도&lt;/td&gt;
&lt;td style=&quot;width: 18.5057%; height: 17px; text-align: center;&quot;&gt;느림&lt;/td&gt;
&lt;td style=&quot;width: 17.7076%; height: 17px; text-align: center;&quot;&gt;빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 9.75447%; height: 17px; text-align: center;&quot;&gt;격리 수준&lt;/td&gt;
&lt;td style=&quot;width: 18.5057%; height: 17px; text-align: center;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;width: 17.7076%; height: 17px; text-align: center;&quot;&gt;상대적으로 낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 9.75447%; height: 17px; text-align: center;&quot;&gt;이식성&lt;/td&gt;
&lt;td style=&quot;width: 18.5057%; height: 17px; text-align: center;&quot;&gt;보통&lt;/td&gt;
&lt;td style=&quot;width: 17.7076%; height: 17px; text-align: center;&quot;&gt;매우 높음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1238&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lv0m3/dJMcaiKgQ6E/VPdIL2hQPZt1DVtjfMkgK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lv0m3/dJMcaiKgQ6E/VPdIL2hQPZt1DVtjfMkgK0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lv0m3/dJMcaiKgQ6E/VPdIL2hQPZt1DVtjfMkgK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLv0m3%2FdJMcaiKgQ6E%2FVPdIL2hQPZt1DVtjfMkgK0%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;670&quot; height=&quot;358&quot; data-origin-width=&quot;1238&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Docker 동작 흐름&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker를 사용하는 흐름은 크게 세 단계다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Dockerfile 작성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 환경에서 앱을 실행할지를 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;텍스트 파일로 정의&lt;/span&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;베이스 OS, 설치할 패키지, 실행 명령어 등을 적는다. 일종의 환경 설계도라고 생각하면 된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. docker build &amp;rarr; Docker Image 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dockerfile을 기반으로 &lt;code&gt;docker build&lt;/code&gt; 명령을 실행하면 Docker Image가 만들어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Image는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;컨테이너를 찍어낼 수 있는 틀(템플릿)&lt;/span&gt;이다. 한 번 만들어두면 몇 개의 컨테이너든 동일하게 찍어낼 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. docker run &amp;rarr; Docker Container 실행&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;docker run&lt;/code&gt; 명령으로 Image를 실제로 실행하면 Container가 생성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너는 Image가 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;메모리 위에서 살아 움직이는 상태&lt;/span&gt;다. 같은 Image에서 여러 컨테이너를 동시에 띄우는 것도 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Docker Layer 구조&lt;/h2&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;770&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/st0sI/dJMcai4ysOP/zKfTChikf3Mo3QVijQdkkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/st0sI/dJMcai4ysOP/zKfTChikf3Mo3QVijQdkkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/st0sI/dJMcai4ysOP/zKfTChikf3Mo3QVijQdkkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fst0sI%2FdJMcai4ysOP%2FzKfTChikf3Mo3QVijQdkkK%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;666&quot; height=&quot;272&quot; data-origin-width=&quot;1887&quot; data-origin-height=&quot;770&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker Image는 단일 파일이 아니라, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;여러 개의 Layer가 순서대로 쌓인 구조&lt;/span&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dockerfile의 명령어 한 줄이 실행될 때마다 새로운 Layer가 추가된다고 보면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 ubuntu 베이스 이미지(Layer A, B, C) 위에 nginx를 설치하면 nginx Layer가 추가되고, 거기에 web app 소스를 올리면 또 하나의 Layer가 쌓인다. 컨테이너가 실제로 실행될 때는 맨 위에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;R/W(읽기&amp;middot;쓰기) Layer가 하나 더 추가&lt;/span&gt;되어, 실행 중 발생하는 변경사항은 이 레이어에만 기록된다. 아래 Image Layer들은 항상 읽기 전용으로 유지된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Layer 구조가 주는 실질적인 이점&lt;/h4&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;span style=&quot;background-color: #f6e199;&quot;&gt;변경되지 않은 Layer는 캐시를 그대로 재사용&lt;/span&gt;하기 때문에, 전체를 다시 빌드하지 않아도 된다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저장 공간 절약:&lt;/b&gt; 여러 Image가 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;동일한 베이스 Layer를 공유하므로 중복 저장이 없다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다운로드 효율:&lt;/b&gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;이미 가지고 있는 Layer는 다시 받지 않아 pull 속도가 빠르다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⭐ Docker Image 경로 (Registry)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드한 Image를 혼자만 쓰지 않고 다른 서버나 팀원과 공유하려면 Registry에 올려야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Registry는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Docker Image를 저장하고 배포하는 저장소&lt;/span&gt;로, Git과 GitHub의 관계와 비슷하다고 보면 된다.&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;Docker Hub:&lt;/b&gt; Docker에서 공식 운영하는 공개 Registry. 누구나 이미지를 올리고 내려받을 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Private Registry:&lt;/b&gt; 조직 내부에서 운영하는 비공개 저장소. 보안이 필요한 이미지를 관리할 때 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1495&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EwCiO/dJMcagThLR6/K7T0SBCQljrbOFih0YKli0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EwCiO/dJMcagThLR6/K7T0SBCQljrbOFih0YKli0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EwCiO/dJMcagThLR6/K7T0SBCQljrbOFih0YKli0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEwCiO%2FdJMcagThLR6%2FK7T0SBCQljrbOFih0YKli0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;494&quot; height=&quot;267&quot; data-origin-width=&quot;1495&quot; data-origin-height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Image 이름 구조&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker Image의 전체 경로는 아래 네 가지 요소로 구성된다.&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 49.7675%; height: 161px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 23.6932%;&quot;&gt;&lt;b&gt; 구성 요소 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 30.4817%;&quot;&gt;&lt;b&gt; 역할 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 27.7298%;&quot;&gt;&lt;b&gt; 예시 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 23.6932%;&quot;&gt;Registry&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 30.4817%;&quot;&gt;이미지 저장소 주소&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 27.7298%;&quot;&gt;docker.io&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 23.6932%;&quot;&gt;Namespace&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 30.4817%;&quot;&gt;사용자 또는 조직명&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 27.7298%;&quot;&gt;library&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 23.6932%;&quot;&gt;Image name&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 30.4817%;&quot;&gt;이미지 이름&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 27.7298%;&quot;&gt;nginx&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 23.6932%;&quot;&gt;TAG&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 30.4817%;&quot;&gt;버전 정보&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 27.7298%;&quot;&gt;latest, 1.12.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;# Docker Hub 공식 이미지 (Registry/Namespace/이름:태그)
docker.io/library/nginx:latest
docker.io/library/nginx:1.12.1

# Private Registry 이미지
private_reg_Ksh/Temp-app:1.0
private_reg_Ksh/Temp-app:1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  TAG는 버전을 구분하는 레이블이다. 지정하지 않으면 기본값으로 latest가 사용된다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>클라우드응용SW개발</category>
      <author>tryinto_gmlt</author>
      <guid isPermaLink="true">https://tryintogmlt.tistory.com/34</guid>
      <comments>https://tryintogmlt.tistory.com/34#entry34comment</comments>
      <pubDate>Wed, 3 Jun 2026 23:05:54 +0900</pubDate>
    </item>
    <item>
      <title>9~10주차 테크블로그 포스팅</title>
      <link>https://tryintogmlt.tistory.com/33</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;[Cloud]&amp;nbsp;9주차.&amp;nbsp;서버리스(Serverless)&amp;nbsp;서비스의&amp;nbsp;이해&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/29&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tryintogmlt.tistory.com/29&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780436287793&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;[Cloud] 9주차. 서버리스(Serverless) 서비스의 이해&quot; data-og-description=&quot;⭐ 서버리스(Serverless)서버리스(Serverless)는 말 그대로 서버가 전혀 없다는 의미가 아니라, 서버의 구축과 관리 부담을 클라우드 제공업체가 대신 맡아주는 클라우드 컴퓨팅 방식이다. 개발자는 &quot; data-og-host=&quot;tryintogmlt.tistory.com&quot; data-og-source-url=&quot;https://tryintogmlt.tistory.com/29&quot; data-og-url=&quot;https://tryintogmlt.tistory.com/29&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wBVJX/dJMb9cBPgMf/hkSwgmUojhYghPv1YSrlK1/img.png?width=800&amp;amp;height=324&amp;amp;face=0_0_800_324,https://scrap.kakaocdn.net/dn/bPrMAJ/dJMb86O83sr/uI5YUkXPcWD0WGIFbpH1ik/img.png?width=800&amp;amp;height=324&amp;amp;face=0_0_800_324,https://scrap.kakaocdn.net/dn/6hWA2/dJMb9iIOabq/pNbR0POxxr9KbSgDhElu10/img.png?width=1280&amp;amp;height=1280&amp;amp;face=0_0_1280_1280&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/29&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tryintogmlt.tistory.com/29&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wBVJX/dJMb9cBPgMf/hkSwgmUojhYghPv1YSrlK1/img.png?width=800&amp;amp;height=324&amp;amp;face=0_0_800_324,https://scrap.kakaocdn.net/dn/bPrMAJ/dJMb86O83sr/uI5YUkXPcWD0WGIFbpH1ik/img.png?width=800&amp;amp;height=324&amp;amp;face=0_0_800_324,https://scrap.kakaocdn.net/dn/6hWA2/dJMb9iIOabq/pNbR0POxxr9KbSgDhElu10/img.png?width=1280&amp;amp;height=1280&amp;amp;face=0_0_1280_1280');&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;[Cloud] 9주차. 서버리스(Serverless) 서비스의 이해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⭐ 서버리스(Serverless)서버리스(Serverless)는 말 그대로 서버가 전혀 없다는 의미가 아니라, 서버의 구축과 관리 부담을 클라우드 제공업체가 대신 맡아주는 클라우드 컴퓨팅 방식이다. 개발자는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tryintogmlt.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;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;[Cloud]&amp;nbsp;10주차-1.&amp;nbsp;Azure&amp;nbsp;Functions&amp;nbsp;생성&amp;nbsp;실습&amp;nbsp;(Azure&amp;nbsp;Portal&amp;nbsp;&amp;amp;&amp;nbsp;VS&amp;nbsp;Code)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tryintogmlt.tistory.com/31&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780436302063&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;[Cloud] 10주차-1. Azure Functions 생성 실습 (Azure Portal &amp;amp; VS Code)&quot; data-og-description=&quot;⭐ Azure Function App 생성하기1) Azure Marketplace에서 함수 앱을 검색하여 선택한다. 2) 포스팅 옵션에서 App Service를 선택한다.호스팅 옵션Azure Functions는 여러 가지 호스팅 플랜을 제공한다.App Service Plan&quot; data-og-host=&quot;tryintogmlt.tistory.com&quot; data-og-source-url=&quot;https://tryintogmlt.tistory.com/31&quot; data-og-url=&quot;https://tryintogmlt.tistory.com/31&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bFqQvb/dJMb81G4ISa/VkUjN7XCctG3bELbggLCT0/img.png?width=800&amp;amp;height=540&amp;amp;face=0_0_800_540,https://scrap.kakaocdn.net/dn/eg9Eoj/dJMb82MKras/peOzWzpZmoc91uaAwJTYR1/img.png?width=800&amp;amp;height=540&amp;amp;face=0_0_800_540,https://scrap.kakaocdn.net/dn/Z8xtA/dJMb88e70hO/K4bCox412rjdysJNkPflW0/img.png?width=2559&amp;amp;height=1211&amp;amp;face=0_0_2559_1211&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tryintogmlt.tistory.com/31&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bFqQvb/dJMb81G4ISa/VkUjN7XCctG3bELbggLCT0/img.png?width=800&amp;amp;height=540&amp;amp;face=0_0_800_540,https://scrap.kakaocdn.net/dn/eg9Eoj/dJMb82MKras/peOzWzpZmoc91uaAwJTYR1/img.png?width=800&amp;amp;height=540&amp;amp;face=0_0_800_540,https://scrap.kakaocdn.net/dn/Z8xtA/dJMb88e70hO/K4bCox412rjdysJNkPflW0/img.png?width=2559&amp;amp;height=1211&amp;amp;face=0_0_2559_1211');&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;[Cloud] 10주차-1. Azure Functions 생성 실습 (Azure Portal &amp;amp; VS Code)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⭐ Azure Function App 생성하기1) Azure Marketplace에서 함수 앱을 검색하여 선택한다. 2) 포스팅 옵션에서 App Service를 선택한다.호스팅 옵션Azure Functions는 여러 가지 호스팅 플랜을 제공한다.App Service Plan&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tryintogmlt.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;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;[Cloud]&amp;nbsp;10주차-2.&amp;nbsp;Azure&amp;nbsp;Functions&amp;nbsp;Blob&amp;nbsp;Trigger로&amp;nbsp;위협&amp;nbsp;파일&amp;nbsp;감지&amp;nbsp;실습&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/32&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tryintogmlt.tistory.com/32&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780436325114&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;[Cloud] 10주차-2. Azure Functions Blob Trigger로 위협 파일 감지 실습&quot; data-og-description=&quot;⭐ 위협 요소가 있는 파일의 거부 시나리오Azure Functions의 Blob Trigger를 활용하면 파일 업로드 이벤트를 감지하고 위협 파일을 자동으로 삭제하는 흐름을 구성할 수 있다.1. Blob Storage에 파일을 업&quot; data-og-host=&quot;tryintogmlt.tistory.com&quot; data-og-source-url=&quot;https://tryintogmlt.tistory.com/32&quot; data-og-url=&quot;https://tryintogmlt.tistory.com/32&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sFW2U/dJMb9llenp2/IoakkylBM4NDD9DMBjFKBk/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/cdr0xH/dJMb9kmjS2j/qKRH3t0roVmgPH1NwYCLR1/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/fef2v/dJMb9b3ZgLL/wllnVvEfZifHdCrwYJkOek/img.png?width=2559&amp;amp;height=1282&amp;amp;face=0_0_2559_1282&quot;&gt;&lt;a href=&quot;https://tryintogmlt.tistory.com/32&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tryintogmlt.tistory.com/32&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sFW2U/dJMb9llenp2/IoakkylBM4NDD9DMBjFKBk/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/cdr0xH/dJMb9kmjS2j/qKRH3t0roVmgPH1NwYCLR1/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/fef2v/dJMb9b3ZgLL/wllnVvEfZifHdCrwYJkOek/img.png?width=2559&amp;amp;height=1282&amp;amp;face=0_0_2559_1282');&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;[Cloud] 10주차-2. Azure Functions Blob Trigger로 위협 파일 감지 실습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⭐ 위협 요소가 있는 파일의 거부 시나리오Azure Functions의 Blob Trigger를 활용하면 파일 업로드 이벤트를 감지하고 위협 파일을 자동으로 삭제하는 흐름을 구성할 수 있다.1. Blob Storage에 파일을 업&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tryintogmlt.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>과제 제출</category>
      <author>tryinto_gmlt</author>
      <guid isPermaLink="true">https://tryintogmlt.tistory.com/33</guid>
      <comments>https://tryintogmlt.tistory.com/33#entry33comment</comments>
      <pubDate>Wed, 3 Jun 2026 06:39:04 +0900</pubDate>
    </item>
  </channel>
</rss>