<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>WE LIVE IN THE CLOUD</title>
    <link>https://with-cloud.tistory.com/</link>
    <description>Cloud 중심의 다양한 IT 영역을 탐구하는 그런 사람들.</description>
    <language>ko</language>
    <pubDate>Sun, 10 May 2026 11:42:26 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>admin_cloud</managingEditor>
    <image>
      <title>WE LIVE IN THE CLOUD</title>
      <url>https://tistory1.daumcdn.net/tistory/6724749/attach/2033be851dab4b448fed827f7cd4804f</url>
      <link>https://with-cloud.tistory.com</link>
    </image>
    <item>
      <title>#03 Nginx Reverse Proxy(프록시) 서버 구축</title>
      <link>https://with-cloud.tistory.com/59</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. &lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7;&quot;&gt;TAK&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;입니다:)&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅은 Nginx&amp;nbsp;Reverse&amp;nbsp;Proxy(프록시) 서버 구축을 목표로 합니다 . &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx&amp;nbsp;Reverse&amp;nbsp;Proxy(프록시) 서버 구축을 통해 어떻게 동작되는지, 어떻게 활용되는지 확인해 보겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;#01 Proxy(프록시) 서버란?&quot; &amp;amp; &quot;#02 Squid Forward Proxy(프록시) 서버 구축&quot; 이어지는 내용으로 참고해주세요!&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1725947228755&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;#01 Proxy(프록시) 서버란?&quot; data-og-description=&quot;안녕하세요.&amp;nbsp;TAK&amp;nbsp;입니다:)&amp;nbsp;이번 포스팅은 Proxy(프록시) 서버란 무엇인지 알아보겠습니다. &amp;nbsp;Proxy(프록시) 서버라는 단어는 네트워크 관련 주제에서 빠지지 않고 등장하는 용어인데, 낱낱이 살&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/57&quot; data-og-url=&quot;https://with-cloud.tistory.com/57&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buC3gD/hyW23deJxz/2B8x1bQ7AUi5irskwXMSGk/img.png?width=606&amp;amp;height=315&amp;amp;face=0_0_606_315,https://scrap.kakaocdn.net/dn/0qm6r/hyWZegs3PL/LrKOniEgGuOX7KtWqWqwK1/img.png?width=606&amp;amp;height=315&amp;amp;face=0_0_606_315,https://scrap.kakaocdn.net/dn/bSqhFI/hyW2Y33Vuw/UKDgvXwEMq87BjHSpwiawk/img.jpg?width=1000&amp;amp;height=600&amp;amp;face=0_0_1000_600&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/57&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/57&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buC3gD/hyW23deJxz/2B8x1bQ7AUi5irskwXMSGk/img.png?width=606&amp;amp;height=315&amp;amp;face=0_0_606_315,https://scrap.kakaocdn.net/dn/0qm6r/hyWZegs3PL/LrKOniEgGuOX7KtWqWqwK1/img.png?width=606&amp;amp;height=315&amp;amp;face=0_0_606_315,https://scrap.kakaocdn.net/dn/bSqhFI/hyW2Y33Vuw/UKDgvXwEMq87BjHSpwiawk/img.jpg?width=1000&amp;amp;height=600&amp;amp;face=0_0_1000_600');&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;#01 Proxy(프록시) 서버란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요.&amp;nbsp;TAK&amp;nbsp;입니다:)&amp;nbsp;이번 포스팅은 Proxy(프록시) 서버란 무엇인지 알아보겠습니다. &amp;nbsp;Proxy(프록시) 서버라는 단어는 네트워크 관련 주제에서 빠지지 않고 등장하는 용어인데, 낱낱이 살&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1725947235690&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;#02 Squid Forward Proxy(프록시) 서버 구축&quot; data-og-description=&quot;안녕하세요.&amp;nbsp;TAK&amp;nbsp;입니다:)&amp;nbsp;이번 포스팅은 Squid Forward Proxy(프록시) 서버 구축을 목표로 합니다. &amp;nbsp;Squid&amp;nbsp;Forward&amp;nbsp;Proxy(프록시)&amp;nbsp;서버 구축을 통해 어떻게 동작되는지, 어떻게 활용되는지 확인해 보&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/58&quot; data-og-url=&quot;https://with-cloud.tistory.com/58&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wkmkO/hyW24iUoGE/s9RvoE5Czflbt91xB9Kk0k/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/de2pls/hyW2T9wWjK/5ckVTGFs768iXaxvxNwJv1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/9wz0U/hyW2VGgZ0m/SMamklcxkyr4mE8gnKmJY1/img.png?width=1600&amp;amp;height=665&amp;amp;face=0_0_1600_665&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/58&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/58&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wkmkO/hyW24iUoGE/s9RvoE5Czflbt91xB9Kk0k/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/de2pls/hyW2T9wWjK/5ckVTGFs768iXaxvxNwJv1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/9wz0U/hyW2VGgZ0m/SMamklcxkyr4mE8gnKmJY1/img.png?width=1600&amp;amp;height=665&amp;amp;face=0_0_1600_665');&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;#02 Squid Forward Proxy(프록시) 서버 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요.&amp;nbsp;TAK&amp;nbsp;입니다:)&amp;nbsp;이번 포스팅은 Squid Forward Proxy(프록시) 서버 구축을 목표로 합니다. &amp;nbsp;Squid&amp;nbsp;Forward&amp;nbsp;Proxy(프록시)&amp;nbsp;서버 구축을 통해 어떻게 동작되는지, 어떻게 활용되는지 확인해 보&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.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 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 시작하겠습니다!&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends2&quot; data-emoticon-name=&quot;012&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/012.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/012.png&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Reverse Proxy&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chw4JR/btsISpbb6oP/gg3uz8sk0otoX91ZAIu3hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chw4JR/btsISpbb6oP/gg3uz8sk0otoX91ZAIu3hK/img.png&quot; data-alt=&quot;https://cf-assets.www.cloudflare.com/slt3lc6tev37/3msJRtqxDysQslvrKvEf8x/f7f54c9a2cad3e4586f58e8e0e305389/reverse_proxy_flow.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chw4JR/btsISpbb6oP/gg3uz8sk0otoX91ZAIu3hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fchw4JR%2FbtsISpbb6oP%2Fgg3uz8sk0otoX91ZAIu3hK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;640&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://cf-assets.www.cloudflare.com/slt3lc6tev37/3msJRtqxDysQslvrKvEf8x/f7f54c9a2cad3e4586f58e8e0e305389/reverse_proxy_flow.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Reverse&amp;nbsp;Proxy&lt;/b&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;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그림에서는 origin server 는 내부 네트워크에 위한 서버를 의미하며, Proxy Server는 내부 혹은 DMZ 네트워크에 위치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이는 내부 서버를 보호하고, 로드 밸런싱, SSL 암호화, 캐싱 등의 기능을 제공하기 위해 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. Nginx Reverse Proxy&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 구축 실습은 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Nginx Reverse Proxy&lt;/a&gt;를 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Nginx Reverse Proxy는 위에 설명한 일반적인 Reverse Proxy의 클라이언트(사용자)와 웹 서버 간 중개자 역할을 하는 서버입니다. 이러한 일반적인 기능 이외 웹 서버로 향하는 요청에 대한 부하를 분산시키고, 내부 서버의 IP가 노출되지 않도록 보호하는 등 다양한 기능을 수행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; 트래픽 분산 (Traffic Distribution) &lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로드 밸런싱 (Load Balancing)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 여러 백엔드 서버 사이에서 트래픽을 분산하여 로드를 균등하게 나누어 처리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로드 밸런싱 알고리즘으로는 라운드 로빈, 최소 연결, IP 해시 등을 지원합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 서버의 성능을 향상하고 응답 시간을 줄일 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버 상태 모니터링&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 백엔드 서버의 상태를 모니터링하여, 응답이 느리거나 실패한 서버로의 요청을 자동으로 조정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; 콘텐츠 캐싱 (Content Caching) &lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정적 및 동적 콘텐츠 캐싱 (Caching)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 정적 파일 및 동적 콘텐츠의 캐싱을 지원합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자주 요청되는 콘텐츠를 캐시 하고, 서버의 부하를 줄이며, 클라이언트(사용자)의 요청에 대한 응답 속도를 향상합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SSL/TLS 암호화 종료 (SSL/TLS Termination)&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 SSL/TLS 암호화 및 복호화를 처리할 수 있으며, 이를 통해 백엔드 서버는 암호화되지 않은 트래픽만 처리할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 서버의 성능을 향상하고, SSL/TLS 인증서 관리를 중앙화할 수 있게 해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;URL 재작성 및 리다이렉션 (URL Rewriting and Redirection)&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 요청 URL을 재작성하거나 리다이렉션 할 수 있는 기능을 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 URL 구조를 변경하거나, 특정 URL 패턴을 다른 URL로 전달할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;보안 (Security)&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 IP 주소 차단, 인증, 접근 제어 등을 통해 보안을 강화할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, 웹 애플리케이션 방화벽(WAF) 기능과 같은 보안 기능을 통해 악성 트래픽을 차단할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;압축 (Compression)&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 HTTP 응답을 압축하여 대역폭을 절약하고 응답 속도를 향상할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Gzip 압축을 사용하여 콘텐츠를 압축하고 전송합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;고가용성 (High Availability)&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 고가용성 아키텍처를 지원하여 시스템의 안정성을 높일 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 Nginx 인스턴스를 클러스터링 하여 장애 발생 시 서비스가 계속 유지되도록 할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;정적 콘텐츠 제공 (Static Content Serving)&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 정적 파일(예: 이미지, CSS, JavaScript 등)을 매우 효율적으로 제공할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정적 콘텐츠 제공을 통해 백엔드 서버의 부하를 줄일 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;모니터링 및 로깅 (Monitoring and Logging)&lt;/b&gt;:&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 상세한 액세스 로그와 오류 로그를 기록하여 모니터링과 문제 해결에 도움을 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다양한 로그 포맷과 로그 분석 도구를 지원합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2. 구성도&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;이번 Reverse Proxy 실습은 Azure 환경에서 진행합니다.&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;2048&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYbbsU/btsJzA4Npwb/bV2cbcZHJN1KTKCsrRmmE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYbbsU/btsJzA4Npwb/bV2cbcZHJN1KTKCsrRmmE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYbbsU/btsJzA4Npwb/bV2cbcZHJN1KTKCsrRmmE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYbbsU%2FbtsJzA4Npwb%2FbV2cbcZHJN1KTKCsrRmmE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;730&quot; height=&quot;428&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;위 그림과 같이 클라이언트(사용자)가 인터넷을 통해 Target 서버인 Server X, Y에 요청을 할 때,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx Reverse Proxy를 통해 &lt;span style=&quot;text-align: start;&quot;&gt;전달될 수 있도록 하는 구성(중계)하며, 응답도 마찬가지로 해당 Proxy 서버를 통해서 전달됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;이 과정에서 Target 서버인 Server X, Y의 정보(ex. IP)의 노출 없이 진행됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;각 서버의 상세 내역은 다음과 같습니다.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VM 정보(상세 Spec은 테스트이기에 가장 저렴하게 맞추시면 됩니다.)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client(User) : 외부 인터넷을 통한 요청이기 때문에 로컬 호스트, 즉 대부분이 사용하는 윈도우 환경&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Reverse Proxy(Nginx) : Linux(Ubuntu 24.04)&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server X : &lt;span style=&quot;text-align: left;&quot;&gt;Linux(Ubuntu 24.04), API 및 정적 콘텐츠 서버&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server Y : &lt;span style=&quot;text-align: left;&quot;&gt;Linux(Ubuntu 24.04), DB(MySQL) 서버&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[내부 네트워크]라고 함은 &quot;인증 및 인가되지 않은 액세스는 불가하며, 외부 통신을 제한한다&quot;라는 가정이 전제됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Forward Proxy는 DMZ 구간으로 배포된 서버이며, 내/외부 네트워크 중간에 위치하여 제약 사항이 존재합니다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2-1. 네트워크 구성&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 구성도를 보면, Proxy 와 서버 간 네트워크 대역이 다름을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;정확히 Proxy는 DMZ(혹은 Hub) 구간에 배포되어 중계 역할을 하는 서비이기에, Target 서버와 서로 다른 네트워크 대역으로 구분하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, Proxy와 Target 서버 간 통신을 위해 VNET Peering 을 통해 서로 다른 대역의 가상 네트워크를 연결을 진행합니다. 또한, &lt;span style=&quot;text-align: start;&quot;&gt;ACL 역할을 하는 NSG(Network Security Group) 규칙을 통해 IP, Port 에 대해 보다 상세히 제어해 보도록 하겠습니다.&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;1774&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vXQ69/btsJy90U12Y/LZmDyG1ATayPcNzjy2mLI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vXQ69/btsJy90U12Y/LZmDyG1ATayPcNzjy2mLI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vXQ69/btsJy90U12Y/LZmDyG1ATayPcNzjy2mLI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvXQ69%2FbtsJy90U12Y%2FLZmDyG1ATayPcNzjy2mLI0%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;1774&quot; height=&quot;600&quot; data-origin-width=&quot;1774&quot; data-origin-height=&quot;600&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;1736&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v5cCI/btsJAtw5cny/63wVIly7fqBRtakVf2bPp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v5cCI/btsJAtw5cny/63wVIly7fqBRtakVf2bPp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v5cCI/btsJAtw5cny/63wVIly7fqBRtakVf2bPp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv5cCI%2FbtsJAtw5cny%2F63wVIly7fqBRtakVf2bPp1%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;1736&quot; height=&quot;597&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-3. Nginx Reverse Proxy 구축&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-3-1. Nginx 설치&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx Reverse Proxy라는 것은 결국 Nginx 가 역방향 프록시 기능과 역할을 수행할 수 있음을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 설치 자체는 일반적인 Nginx를 설치하는 것과 동일합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;span style=&quot;color: #000000;&quot;&gt;apt를 통한 Nginx 설치&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1726125180827&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install nginx -y&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치 확인(System 등록 및 curl 명령어)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXbRxN/btsJASJ9Da1/XtF9K5oJk99uRDnDrfDsPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXbRxN/btsJASJ9Da1/XtF9K5oJk99uRDnDrfDsPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXbRxN/btsJASJ9Da1/XtF9K5oJk99uRDnDrfDsPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXbRxN%2FbtsJASJ9Da1%2FXtF9K5oJk99uRDnDrfDsPK%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;1094&quot; height=&quot;304&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;304&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;651&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8A29E/btsJy91dlh4/c6qT8joATZaFWpik9hztS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8A29E/btsJy91dlh4/c6qT8joATZaFWpik9hztS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8A29E/btsJy91dlh4/c6qT8joATZaFWpik9hztS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8A29E%2FbtsJy91dlh4%2Fc6qT8joATZaFWpik9hztS0%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;651&quot; height=&quot;367&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;**Target 서버 구성&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이번 실습은 Nginx Reverse Proxy 대해 초점이 맞춰있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;따라서, Target 서버 구성에 대해 자세히 다루지 않습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- API 서버 : Flask 사용하여 API 요청에 대한 값 응답 구성(메시지, 정적 파일)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- DB 서버 : MySQL 설치하였고, DBA가 Tools(DBeaver 등)을 사용하여, 데이터 조회 혹은 활용(Join)을 하기 위한 간단한 데이터베이스, 테이블, 데이터 생성&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;1-3-2.&amp;nbsp;&lt;/span&gt;Nginx Reverse Proxy 구성&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Nginx의 전역 설정 파일은 /etc/nginx/nginx.conf&lt;/b&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;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;또한, 전역적으로 사용할 HTTP 프로토콜 관련 설정을 정의합니다. 여기서 정의된 값들은 모든 서버 블록에 적용될 수 있으며, 서버별로 별도로 설정한 값이 없다면 기본적으로 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;해당 HTTP 블록에서 포함(include)시키는 부분인&lt;b&gt; /etc/nginx/sites-enabled/*&amp;nbsp;&lt;/b&gt;을 통해 개별 서버 설정 파일을 포함하는데, 이는 디렉터리 내의 파일들은 &lt;b&gt;서버별 세부 설정&lt;/b&gt;을 관리합니다. 여기에는 &lt;u&gt;각 도메인에 대한 포트, SSL 인증서, 리버스 프록시 설정 등이 포함&lt;/u&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;1155&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHHCls/btsJAyL7WoF/Ii51kEkKz8ICggy5K9viK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHHCls/btsJAyL7WoF/Ii51kEkKz8ICggy5K9viK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHHCls/btsJAyL7WoF/Ii51kEkKz8ICggy5K9viK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHHCls%2FbtsJAyL7WoF%2FIi51kEkKz8ICggy5K9viK0%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;1155&quot; height=&quot;812&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;즉, &lt;u&gt;사이트별 설정은 sites-available 디렉토리에 위치한 개별 설정 파일에서 관리&lt;/u&gt;되는 구조이며, &lt;b&gt;&lt;u&gt;해당 설정(&lt;b&gt;/etc/nginx/sites-enabled/*&lt;/b&gt;)에서 이번에 구성하고자 하는 Reverse Proxy 설정 및 관리가 이뤄집니다.&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;기본 값인 default 파일 구성은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1726126823914&quot; class=&quot;properties&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# /etc/nginx/sites-available/default

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#       listen 80;
#       listen [::]:80;
#
#       server_name example.com;
#
#       root /var/www/example.com;
#       index index.html;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;해당 구성은 HTTP 요청에 대해 일반적으로 80 포트 기반, 클라이언트의 요청을 처리하는 방법을 정의하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;여기서, 추가 및 수정하고자 하는 부분은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- &lt;b&gt;HTTPS(443)&lt;/b&gt; 설정 및 리디렉션&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Target 서버인 API(정적 콘텐츠)에 대한 Reverse Proxy 설정 &amp;gt; &lt;b&gt;location 추가&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- HTTP(S) 이외 다른 프로토콜(MySQL Admin 접근용) 처리 &amp;gt; &lt;b&gt;Stream 정의(nginx.conf의 전역 설정)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;위 항목에 대해 구성 파일별로 정의하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;하지만, 그전에 Nginx의 모듈의 개념을 잠시 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;**NGINX Moduels&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;a)&amp;nbsp;HTTP&amp;nbsp;모듈&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;역할:&amp;nbsp;HTTP&amp;nbsp;및&amp;nbsp;HTTPS&amp;nbsp;프로토콜을&amp;nbsp;처리하는&amp;nbsp;모듈입니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;용도:&amp;nbsp;주로&amp;nbsp;웹&amp;nbsp;트래픽을&amp;nbsp;처리하며,&amp;nbsp;웹서버&amp;nbsp;기능을&amp;nbsp;제공하거나,&amp;nbsp;리버스&amp;nbsp;프록시(Reverse&amp;nbsp;Proxy)&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;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성&amp;nbsp;파일:&amp;nbsp;/etc/nginx/sites-enabled/default와&amp;nbsp;같은&amp;nbsp;파일을&amp;nbsp;사용하여&amp;nbsp;HTTP&amp;nbsp;요청을&amp;nbsp;처리하는&amp;nbsp;설정을&amp;nbsp;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;b) Server 모듈&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;역할:&amp;nbsp;Nginx의&amp;nbsp;기본&amp;nbsp;단위로,&amp;nbsp;HTTP,&amp;nbsp;HTTPS,&amp;nbsp;TCP/UDP&amp;nbsp;프로토콜을&amp;nbsp;사용하는&amp;nbsp;서비스를&amp;nbsp;정의할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;용도:&amp;nbsp;각&amp;nbsp;프로토콜에&amp;nbsp;대한&amp;nbsp;서버&amp;nbsp;블록을&amp;nbsp;정의하며,&amp;nbsp;listen&amp;nbsp;지시어를&amp;nbsp;사용해&amp;nbsp;해당&amp;nbsp;서버가&amp;nbsp;어떤&amp;nbsp;포트를&amp;nbsp;통해&amp;nbsp;요청을&amp;nbsp;수신할지&amp;nbsp;결정합니다.&amp;nbsp;HTTP와&amp;nbsp;Stream&amp;nbsp;모듈에서&amp;nbsp;Server&amp;nbsp;블록은&amp;nbsp;각각의&amp;nbsp;프로토콜에&amp;nbsp;맞게&amp;nbsp;설정됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;여기서 &lt;b&gt;a) HTTP 모듈과 &lt;b&gt;b) Server 모듈의 차이점&lt;/b&gt;&lt;/b&gt;을 정리해 보면 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.2403%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구분&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.9844%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTP 모듈&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.7752%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server 모듈&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.2403%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;역할&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.9844%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTP/HTTPS&amp;nbsp;트래픽을&amp;nbsp;처리하는&amp;nbsp;&lt;b&gt;전체적인&amp;nbsp;설정&lt;/b&gt;을&amp;nbsp;관리함.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.7752%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하나의 포트와 도메인에 대한 특정 설정을 정의함.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.2403%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위치&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.9844%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;http {} 블록 안에서 정의됨.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.7752%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;http {} 또는 stream {} 블록 안에서 정의됨.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.2403%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.9844%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;웹 트래픽, 로그 설정, 압축, 캐싱 등 다양한 기능을 지원함.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.7752%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 도메인 또는 IP에 대한 트래픽을 처리함. 포트, SSL 설정 등을 포함함.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.2403%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구조&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.9844%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 개의 server {} 블록을 포함할 수 있음.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.7752%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 server {} 블록은 하나의 포트와 도메인을 담당함.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;c) Stream 모듈&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;역할:&amp;nbsp;TCP와&amp;nbsp;UDP&amp;nbsp;프로토콜을&amp;nbsp;처리하는&amp;nbsp;모듈입니다.&amp;nbsp;HTTP가&amp;nbsp;아닌&amp;nbsp;다른&amp;nbsp;프로토콜(예:&amp;nbsp;MySQL,&amp;nbsp;Redis,&amp;nbsp;SMTP&amp;nbsp;등)을&amp;nbsp;프록시하거나,&amp;nbsp;라우팅 할&amp;nbsp;때&amp;nbsp;사용됩니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;용도:&amp;nbsp;MySQL,&amp;nbsp;Redis,&amp;nbsp;SSH,&amp;nbsp;SMTP&amp;nbsp;같은&amp;nbsp;TCP/UDP&amp;nbsp;기반&amp;nbsp;서비스의&amp;nbsp;트래픽을&amp;nbsp;프록시할&amp;nbsp;때&amp;nbsp;사용됩니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성&amp;nbsp;파일:&amp;nbsp;이&amp;nbsp;모듈은&amp;nbsp;nginx.conf&amp;nbsp;파일의&amp;nbsp;최상위&amp;nbsp;레벨에&amp;nbsp;설정해야&amp;nbsp;합니다.&amp;nbsp;HTTP&amp;nbsp;모듈과&amp;nbsp;별개로&amp;nbsp;처리되므로,&amp;nbsp;HTTP&amp;nbsp;모듈을&amp;nbsp;사용하는&amp;nbsp;sites-enabled/default&amp;nbsp;같은&amp;nbsp;파일에서는&amp;nbsp;이&amp;nbsp;설정을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;결과적으로&amp;nbsp; &lt;b&gt;HTTP 모듈과 Stream 모듈&lt;/b&gt;은 서로 다른 트래픽을 처리하므로, 각각의 특성에 맞는 설정을 해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;1-3-3. &lt;b&gt;&lt;u&gt;&lt;b&gt;/etc/nginx/sites-enabled/*&lt;/b&gt;&lt;/u&gt;&lt;/b&gt; &lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;해당 경로의 파일은 앞서 설명한 것처럼 HTTP(S) 관련 사이트 설정이 포함된 디렉토리로, HTTP 모듈과 관련된 설정만 포함됩니다. &lt;span style=&quot;text-align: start;&quot;&gt;즉,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;/etc/nginx/sites-enabled/* 디렉토리에서 사용하는 설정 파일들은&amp;nbsp;&lt;/span&gt;&lt;b&gt;HTTP/HTTPS&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;트래픽을 처리하는&amp;nbsp;&lt;/span&gt;&lt;b&gt;HTTP 모듈&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;을 기반으로 동작합니다. Nginx의 HTTP 모듈은 기본적으로&amp;nbsp;&lt;/span&gt;&lt;b&gt;웹 트래픽&lt;/b&gt;(HTTP, HTTPS)을 처리하도록 설계되어 있으며, 이를 통해 TCP/UDP 기반 트래픽을 직접 처리할 수는 없습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt; 웹 서비스와 같은 HTTP 기반 트래픽을 처리하며, 일반적으로 server 블록을 사용해 HTTP 요청을 다루며, 정적 파일 제공이나 리버스 프록시 설정을 수행합니다. &lt;/span&gt;각 프로토콜에 대한 &lt;b&gt;서버 블록&lt;/b&gt;을 정의하며, listen 지시어를 사용해 해당 서버가 어떤 포트를 통해 요청을 수신할지 결정합니다. HTTP와 Stream 모듈에서 &lt;b&gt;Server 블록&lt;/b&gt;은 각각의 프로토콜에 맞게 설정됩니다. 즉, 각 &lt;b&gt;server {} 블록&lt;/b&gt;은 하나의 도메인이나 서비스에 대한 설정을 정의합니다. 주로 &lt;b&gt;특정 포트와 도메인에 대한 트래픽&lt;/b&gt;을 처리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&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;1008&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2ksoY/btsJSMJglU9/aBEjJ9ybjSHz0BxxrCzel1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2ksoY/btsJSMJglU9/aBEjJ9ybjSHz0BxxrCzel1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2ksoY/btsJSMJglU9/aBEjJ9ybjSHz0BxxrCzel1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2ksoY%2FbtsJSMJglU9%2FaBEjJ9ybjSHz0BxxrCzel1%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;1008&quot; height=&quot;642&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;크게 두 부분으로 나눠 설정하자면,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[# HTTP에서 HTTPS 리디렉션] 은 먼저 HTTP 요청을 80 포트에서 수신하여, 클라이언트가 HTTP 프로토콜을 통해 요청을 보낼 때, 이 서버 블록이 활성화됩니다. 이 설정에서는 모든 HTTP 요청을 HTTPS로 리디렉션 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이후,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[# HTTPS 프록시 설정] 에서는 HTTPS 요청을 처리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 Target 서버 프록시 전, SSL을 사용을 위한 인증 설정을 정의합니다. 이후, 각 서버의 구성에 맞춰 프록시 설정을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 Target 서버인 API 서버로 프록시 하기 위해, location 설정에 따른 경로별 요청의 헤더 정보를 설정하여 원본 클라이언트의 IP 주소 및 요청 정보를 API 서버에 전달합니다. 이 설정을 통해 API 서버는 클라이언트 요청을 올바르게 인식하고 처리할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-3-4. &lt;b&gt;/etc/nginx/nginx.conf&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;MySQL 액세스를 위해서는 별도로&amp;nbsp;&lt;/span&gt;TCP/UDP 트래픽을 처리하기 위한 stream 모듈에서 처리해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;stream 모듈은 Nginx의 기본 설정 파일에서 설정합니다. 해당 설정은 전체 Nginx 서버의 동작을 정의하며, stream 설정을 통해 TCP/UDP 트래픽을 처리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;stream 모듈은 은 HTTP 요청이 아닌 &lt;b&gt;TCP/UDP&lt;/b&gt; 프로토콜을 기반으로 하는 트래픽을 다루기 때문에, 이를 사용하여 Nginx를 &lt;b&gt;TCP/UDP 프록시&lt;/b&gt;로 구성할 수 있습니다. 예를 들어, MySQL, Redis, PostgreSQL 등 TCP 기반 프로토콜을 프록싱할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;즉, 데이터베이스와 같은 TCP 서비스는 반드시 &lt;b&gt;stream 모듈&lt;/b&gt;을 통해 설정해야 하며, HTTP 모듈을 통해서는 설정할 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;stream 블록 내 TCP 및 UDP 트래픽을 처리할 수 있는 범위를 정의합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 upstream db_servers 블록을 통해 DB 서버의 IP와 포트를 정의합니다. 이는 클라이언트의 요청이 해당 정보로 전달되도록 합니다. 이후, Server 블록을 통해 클라이언트가 연결할 포트를 설정합니다. 여기서는 listen 3306;을 통해 클라이언트가 MySQL에 접속할 포트를 지정합니다. 클라이언트는 이 포트로 요청을 보내고, Nginx는 이를 수신합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;proxy_pass 지시어를 통해, 클라이언트의 요청을 실제 데이터베이스 서버로 전달하기 위해 proxy_pass db_servers;를 사용합니다. 이 지시어는 앞서 정의한 upstream 블록으로 설정한 서버로 요청을 포워딩합니다.&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;962&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8cTYz/btsJSuIUCvi/xaYsM4litP0fz7MwhcMIn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8cTYz/btsJSuIUCvi/xaYsM4litP0fz7MwhcMIn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8cTYz/btsJSuIUCvi/xaYsM4litP0fz7MwhcMIn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8cTYz%2FbtsJSuIUCvi%2FxaYsM4litP0fz7MwhcMIn0%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;962&quot; height=&quot;230&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이렇게 Target 서버 중계를 위한 Proxy 서버의 설정을 마쳤습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;위 변경사항을 저장하고 Nginx가 올바르게 작동하는지 확인 후, 재시작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727834220756&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nginx -t

sudo systemctl restart nginx&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;1399&quot; data-origin-height=&quot;424&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUYWnU/btsJSphNuMI/kuNQdIMmY5PblrPo7I6dWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUYWnU/btsJSphNuMI/kuNQdIMmY5PblrPo7I6dWk/img.png&quot; data-alt=&quot;마음이 편안해지는 초록색~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUYWnU/btsJSphNuMI/kuNQdIMmY5PblrPo7I6dWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUYWnU%2FbtsJSphNuMI%2FkuNQdIMmY5PblrPo7I6dWk%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;1399&quot; height=&quot;424&quot; data-origin-width=&quot;1399&quot; data-origin-height=&quot;424&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마음이 편안해지는 초록색~&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(만약, nginx -t 명령어 실행 시, 에러가 발생한다면 Nginx의 에러 로그(/var/log/nginx/error.log)를 살펴보세요!)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;마지막으로 위 구성을 통해, 정상적으로 Proxy 서버가 잘 동작하는지 테스트를 진행하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4. Proxy 테스트&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Reverse Proxy를 구성한 이유는 Target 서버를 노출시키지 않고, 클라이언트(사용자)에 대한 요청을 Proxy 서버가 중계하여 응답을 반환하는 통신을 하기 위함입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 인터넷을 통한 클라이언트의 요청을 Nginx Reverse Proxy에게 전달합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우선, 기본 Nginx가 서비스하는 페이지를 확인해 보겠습니다.&amp;nbsp;&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;span style=&quot;color: #000000;&quot;&gt;http://&amp;lt;Nginx-Reverse-Proxy의 IP 혹은 DNS&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct1Oq9/btsJShRoons/sQ1b0WpAylci8Znt5SfTv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct1Oq9/btsJShRoons/sQ1b0WpAylci8Znt5SfTv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct1Oq9/btsJShRoons/sQ1b0WpAylci8Znt5SfTv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct1Oq9%2FbtsJShRoons%2FsQ1b0WpAylci8Znt5SfTv0%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;782&quot; height=&quot;179&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;179&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server 블록에 정의한, 리디렉션 설정에 따라 동작&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, 자체 서명 인증서 발급으로 인해, 신뢰할 수 없는 [인증서가 올바르지 않음]으로 표기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[고급] 클릭 후, 보이는 링크로 이&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEv5dS/btsJSqHfy6Y/wFVoaK4DF4uFUVPPqjRsL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEv5dS/btsJSqHfy6Y/wFVoaK4DF4uFUVPPqjRsL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEv5dS/btsJSqHfy6Y/wFVoaK4DF4uFUVPPqjRsL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEv5dS%2FbtsJSqHfy6Y%2FwFVoaK4DF4uFUVPPqjRsL1%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;648&quot; height=&quot;423&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;423&quot;/&gt;&lt;/span&gt;&lt;/figure&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/yNruI/btsJRRMj9KS/AeI28Lv4g16UJ8unas92N1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yNruI/btsJRRMj9KS/AeI28Lv4g16UJ8unas92N1/img.png&quot; data-origin-width=&quot;1421&quot; data-origin-height=&quot;666&quot; data-is-animation=&quot;false&quot; style=&quot;width: 54.11%; margin-right: 10px;&quot; data-widthpercent=&quot;54.75&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yNruI/btsJRRMj9KS/AeI28Lv4g16UJ8unas92N1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyNruI%2FbtsJRRMj9KS%2FAeI28Lv4g16UJ8unas92N1%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;1421&quot; height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1wpKy/btsJTfE25Jt/GxzQkl2CvrIWWFgqmX6g7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1wpKy/btsJTfE25Jt/GxzQkl2CvrIWWFgqmX6g7k/img.png&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;787&quot; data-is-animation=&quot;false&quot; style=&quot;width: 44.7272%;&quot; data-widthpercent=&quot;45.25&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1wpKy/btsJTfE25Jt/GxzQkl2CvrIWWFgqmX6g7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1wpKy%2FbtsJTfE25Jt%2FGxzQkl2CvrIWWFgqmX6g7k%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;1388&quot; height=&quot;787&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본 Nginx 페이지 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1604&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpo1Ps/btsJSIVik2A/Zk2vac3KKKDsIojVwWxSg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpo1Ps/btsJSIVik2A/Zk2vac3KKKDsIojVwWxSg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpo1Ps/btsJSIVik2A/Zk2vac3KKKDsIojVwWxSg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpo1Ps%2FbtsJSIVik2A%2FZk2vac3KKKDsIojVwWxSg1%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;1604&quot; height=&quot;427&quot; data-origin-width=&quot;1604&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4-1. API 서버 Proxy&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;/etc/nginx/sites-enabled/default 의 Server 블록에서 정의한, URL 경로 구성에 따라 API 서버에 구성 요청이 중계가 잘 되는지 확인해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;메시지(GET) : /api/&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nGrCk/btsJTJ7sqIM/bQ5LodVZRZDwQ7GCcGbzO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nGrCk/btsJTJ7sqIM/bQ5LodVZRZDwQ7GCcGbzO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nGrCk/btsJTJ7sqIM/bQ5LodVZRZDwQ7GCcGbzO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnGrCk%2FbtsJTJ7sqIM%2FbQ5LodVZRZDwQ7GCcGbzO0%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;946&quot; height=&quot;357&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;357&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;874&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pfnlS/btsJT62lCkA/X6s3en26PupbZ9bqlka2J1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pfnlS/btsJT62lCkA/X6s3en26PupbZ9bqlka2J1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pfnlS/btsJT62lCkA/X6s3en26PupbZ9bqlka2J1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpfnlS%2FbtsJT62lCkA%2FX6s3en26PupbZ9bqlka2J1%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;874&quot; height=&quot;246&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정적 파일 : /static/&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZCxca/btsJUcnQsAe/k1yF2HLKQvwPDGznaGkaD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZCxca/btsJUcnQsAe/k1yF2HLKQvwPDGznaGkaD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZCxca/btsJUcnQsAe/k1yF2HLKQvwPDGznaGkaD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZCxca%2FbtsJUcnQsAe%2Fk1yF2HLKQvwPDGznaGkaD0%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;978&quot; height=&quot;500&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 그림들처럼, 클라이언트(사용자)가 인터넷을 통해 HTTP(S) 요청을 보내면, Nginx는 클라이언트로부터 온 요청을 받고, 그 요청을 백엔드 API 서버로 전달하기 위한 프록시 역할을 합니다. 위에서 정의한 설정 파일에 따라 클라이언트의 요청을 처리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 해당 요청이&amp;nbsp;Nginx&amp;nbsp;reverse&amp;nbsp;proxy에&amp;nbsp;도달하고,&amp;nbsp;Nginx가&amp;nbsp;그&amp;nbsp;요청을&amp;nbsp;백엔드의&amp;nbsp;API&amp;nbsp;서버로&amp;nbsp;전달한&amp;nbsp;뒤&amp;nbsp;응답을&amp;nbsp;다시&amp;nbsp;클라이언트로&amp;nbsp;반환하는&amp;nbsp;과정입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제 Nginx Reverse Proxy 서버의 로그를 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727848604008&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/var/log/nginx/access.log&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;1100&quot; data-origin-height=&quot;33&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DIxc1/btsJTB9C1Yx/1LQOWsMsQh4CtyOt21GU9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DIxc1/btsJTB9C1Yx/1LQOWsMsQh4CtyOt21GU9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DIxc1/btsJTB9C1Yx/1LQOWsMsQh4CtyOt21GU9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDIxc1%2FbtsJTB9C1Yx%2F1LQOWsMsQh4CtyOt21GU9K%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;1100&quot; height=&quot;33&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;33&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;1119&quot; data-origin-height=&quot;34&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qpGNj/btsJTIAFVkZ/IdVNL5WS52tmSidoK2Znr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qpGNj/btsJTIAFVkZ/IdVNL5WS52tmSidoK2Znr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qpGNj/btsJTIAFVkZ/IdVNL5WS52tmSidoK2Znr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqpGNj%2FbtsJTIAFVkZ%2FIdVNL5WS52tmSidoK2Znr0%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;1119&quot; height=&quot;34&quot; data-origin-width=&quot;1119&quot; data-origin-height=&quot;34&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;1111&quot; data-origin-height=&quot;49&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QYIS5/btsJT8Z2TT1/t41tZkVhpDTCKVyxd3RN21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QYIS5/btsJT8Z2TT1/t41tZkVhpDTCKVyxd3RN21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QYIS5/btsJT8Z2TT1/t41tZkVhpDTCKVyxd3RN21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQYIS5%2FbtsJT8Z2TT1%2Ft41tZkVhpDTCKVyxd3RN21%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;1111&quot; height=&quot;49&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;49&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 순서대로 각 URL의 access 로그를 확인해 보면,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트(사용자)의 정보와 함께 정의된 경로로 요청 정보, 그리고 HTTP 상태 코드(200)가 확인되면서&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API 서버가 중계된 요청에 대한 응답(데이터)을 반환하며 Proxy 역할이 잘 수행됨을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4-2. DB 서버 Proxy&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;/etc/nginx/nginx.conf 의 stream 블록에 정의한 설정에 따라 DB 서버에 접근할 수 있는지 확인해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;해당 구성은 인터넷을 통해 DB Tool(DBeaver)을 통해 DBA가 접근하여 데이터를 조회하기 위한 가정으로 진행하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DB의 경우, 서버 내 MySQL을 설치하고 데이터베이스, 테이블, 데이터를 생성한 상태입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, 사용자를 추가하고, DB 접근을 위한 적절한 권한을 설정하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중계의 흐름은 클라이언트가 Nginx에 연결하면, Nginx는 요청을 받아 정의된 &lt;b&gt;upstream&lt;/b&gt; 블록을 통해 DB 서버에 전달합니다. 이때 Nginx는 클라이언트의 연결을 DB 서버와 연결하는 중개자 역할을 합니다. 이후, DB 서버는 Nginx로부터 받은 요청을 처리한 후, 결과를 Nginx로 반환합니다. 이 과정에서 DB 서버는 클라이언트의 IP 주소를 모르고 Nginx의 IP 주소만 알고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx는 DB 서버로부터 받은 응답을 클라이언트에게 다시 전달합니다. 이때 클라이언트는 마치 DB 서버와 직접 연결된 것처럼 응답을 받을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DBeaver 연결&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1133&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba07OA/btsJS7H2ZZi/K70xC0JlLCTMys4QXv3kYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba07OA/btsJS7H2ZZi/K70xC0JlLCTMys4QXv3kYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba07OA/btsJS7H2ZZi/K70xC0JlLCTMys4QXv3kYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba07OA%2FbtsJS7H2ZZi%2FK70xC0JlLCTMys4QXv3kYk%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;1133&quot; height=&quot;636&quot; data-origin-width=&quot;1133&quot; data-origin-height=&quot;636&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;892&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/phOtp/btsJSrNNRul/i9p5F7NcRwRJh9P9crfFN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/phOtp/btsJSrNNRul/i9p5F7NcRwRJh9P9crfFN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/phOtp/btsJSrNNRul/i9p5F7NcRwRJh9P9crfFN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FphOtp%2FbtsJSrNNRul%2Fi9p5F7NcRwRJh9P9crfFN1%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;892&quot; height=&quot;606&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 3가지 항목 입력 후, [Test Connection] 을 통해 연결 여부를 확인하고 [완료] 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Server Host : Nginx Proxy 서버의 IP 혹은 DNS 입력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Database : Database 이름&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Authentication : 로그인 정보&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서, &quot;Public Key Retrieval is not allowed&quot; 에러 확인 시, [Driver properties] 탭에서 아래 항목을 &quot;True&quot; 변경하면 연결 문제를 해결할 수 있습니다.&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;861&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzG5L9/btsJUDS3OCB/yS6YSPfyPiuxB8FSbD5dW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzG5L9/btsJUDS3OCB/yS6YSPfyPiuxB8FSbD5dW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzG5L9/btsJUDS3OCB/yS6YSPfyPiuxB8FSbD5dW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzG5L9%2FbtsJUDS3OCB%2FyS6YSPfyPiuxB8FSbD5dW0%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;861&quot; height=&quot;507&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;507&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연결 성공&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JhYJM/btsJUDFxb4u/HoFJaoKf9xjo3kDmcJkCu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JhYJM/btsJUDFxb4u/HoFJaoKf9xjo3kDmcJkCu0/img.png&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;227&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;62.76&quot; style=&quot;width: 62.0296%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JhYJM/btsJUDFxb4u/HoFJaoKf9xjo3kDmcJkCu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJhYJM%2FbtsJUDFxb4u%2FHoFJaoKf9xjo3kDmcJkCu0%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;336&quot; height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBNrXe/btsJT69oAr1/FFzr5MnLsTvMkgNJdWqKR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBNrXe/btsJT69oAr1/FFzr5MnLsTvMkgNJdWqKR0/img.png&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;452&quot; data-is-animation=&quot;false&quot; style=&quot;width: 36.8076%;&quot; data-widthpercent=&quot;37.24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBNrXe/btsJT69oAr1/FFzr5MnLsTvMkgNJdWqKR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBNrXe%2FbtsJT69oAr1%2FFFzr5MnLsTvMkgNJdWqKR0%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;397&quot; height=&quot;452&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터 조회&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0vqJy/btsJSOhzcUM/i1W2vAOVSTeP5MUV42S3x1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0vqJy/btsJSOhzcUM/i1W2vAOVSTeP5MUV42S3x1/img.png&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;480&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.0468%; margin-right: 10px;&quot; data-widthpercent=&quot;48.61&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0vqJy/btsJSOhzcUM/i1W2vAOVSTeP5MUV42S3x1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0vqJy%2FbtsJSOhzcUM%2Fi1W2vAOVSTeP5MUV42S3x1%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;630&quot; height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGL9rZ/btsJSO9GfIr/oBAjugS2GMFKWF3kaWAuGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGL9rZ/btsJSO9GfIr/oBAjugS2GMFKWF3kaWAuGK/img.png&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;462&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.7904%;&quot; data-widthpercent=&quot;51.39&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGL9rZ/btsJSO9GfIr/oBAjugS2GMFKWF3kaWAuGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGL9rZ%2FbtsJSO9GfIr%2FoBAjugS2GMFKWF3kaWAuGK%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;641&quot; height=&quot;462&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Join 쿼리문 실행&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 조회에 실행한 2 테이블 기반, 사용자의 이름과 그들이 주문한 제품 조회&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;634&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vpiIr/btsJTflK7ZH/WZoGQkS6S6Zbc4jBFOyPj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vpiIr/btsJTflK7ZH/WZoGQkS6S6Zbc4jBFOyPj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vpiIr/btsJTflK7ZH/WZoGQkS6S6Zbc4jBFOyPj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvpiIr%2FbtsJTflK7ZH%2FWZoGQkS6S6Zbc4jBFOyPj0%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;634&quot; height=&quot;487&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, 위 구성은 access.log에 기록지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 이유는 &lt;b&gt;access.log&lt;/b&gt;는 기본적으로 HTTP 요청을 기록하도록 설계되어 있습니다. 이 로그 파일은 웹 트래픽을 기록하는 데 초점을 맞추고 있으며, 여기에는 URL, 브라우저 정보, HTTP 상태 코드 등의 HTTP 전용 정보가 포함됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 stream 블록에서 logging을 위한 별도의 구성이 필요합니다. 즉, &lt;b&gt;stream 모듈&lt;/b&gt;에 대해서는 별도의 &lt;b&gt;로그 포맷&lt;/b&gt;과 &lt;b&gt;로그 파일&lt;/b&gt;을 지정해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면, 구성 파일을 아래와 같이 수정합니다.&lt;/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;722&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cu6LVc/btsJTgrpJSA/hFmaZO4JiVqPK1A65bkkt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cu6LVc/btsJTgrpJSA/hFmaZO4JiVqPK1A65bkkt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cu6LVc/btsJTgrpJSA/hFmaZO4JiVqPK1A65bkkt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcu6LVc%2FbtsJTgrpJSA%2FhFmaZO4JiVqPK1A65bkkt1%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;722&quot; height=&quot;321&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후, 재연결을 시도하면 다음과 같이 DB 서버에 대한 연결 요청 시에 200 응답 코드를 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서, &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쿼리 실행 시 로그가 남지 않는 이유는 Nginx의 &lt;b&gt;stream 모듈&lt;/b&gt;이 &lt;b&gt;TCP 연결 자체&lt;/b&gt;에 대한 정보를 기록하고, &lt;b&gt;TCP 세션 내부에서 주고받는 쿼리&lt;/b&gt;와 같은 애플리케이션 레벨의 데이터는 기본적으로 로그에 포함하지 않기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Nginx의 &lt;b&gt;stream 모듈&lt;/b&gt;은 주로 L4 (전송 계층)에서 동작하므로, HTTP처럼 요청과 응답을 각각 기록하는 방식이 아니라, TCP 연결의 시작과 종료만 기록하는 구조입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약, 쿼리 로그가 필요하다면, MySQL 로그 설정 혹은 DBeaver에서 쿼리 로그를 활성화하여 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;83&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk2ZA1/btsJSPgxvqH/wMehakX6gcUEIT1eLcJkn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk2ZA1/btsJSPgxvqH/wMehakX6gcUEIT1eLcJkn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk2ZA1/btsJSPgxvqH/wMehakX6gcUEIT1eLcJkn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk2ZA1%2FbtsJSPgxvqH%2FwMehakX6gcUEIT1eLcJkn0%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;659&quot; height=&quot;83&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;83&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;이상으로 &quot;#03 Nginx Reverse Proxy(프록시) 서버 구축&quot;&amp;nbsp; 포스팅을 마치겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;제가 #02 Squid Forward Proxy 구축에서 빠른 시일 내 찾아뵙겠다고 말씀드렸지만, 굉장히;; 늦어졌습니다 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;다음에도 포스팅도 함께 나눌 수 있는 주제로 돌아오겠습니다!!&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>Azure</category>
      <category>cloud</category>
      <category>nginx proxy</category>
      <category>nginx reverse proxy</category>
      <category>proxy server</category>
      <category>reverse proxy</category>
      <category>네트워크</category>
      <category>역방향 프록시</category>
      <category>프록시 서버</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/59</guid>
      <comments>https://with-cloud.tistory.com/59#entry59comment</comments>
      <pubDate>Fri, 4 Oct 2024 13:01:41 +0900</pubDate>
    </item>
    <item>
      <title>#02 Squid Forward Proxy(프록시) 서버 구축</title>
      <link>https://with-cloud.tistory.com/58</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅은 Squid Forward Proxy(프록시) 서버 구축을 목표로 합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Squid&amp;nbsp;Forward&amp;nbsp;Proxy(프록시)&amp;nbsp;서버 구축을 통해 어떻게 동작되는지, 어떻게 활용되는지 확인해 보겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현 구축 실습은 &quot;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;#01&lt;/span&gt;&lt;/b&gt; Proxy(프록시) 서버란?&quot; 포스팅과 이어지기에 이해하시는데 도움이 될 거예요!&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1722407976273&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;#01 Proxy(프록시) 서버란?&quot; data-og-description=&quot;안녕하세요.&amp;nbsp;TAK&amp;nbsp;입니다:)&amp;nbsp;이번 포스팅은 Proxy(프록시) 서버란 무엇인지 알아보겠습니다. &amp;nbsp;Proxy(프록시) 서버라는 단어는 네트워크 관련 주제에서 빠지지 않고 등장하는 용어인데, 낱낱이 살&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/57&quot; data-og-url=&quot;https://with-cloud.tistory.com/57&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bV30Ev/hyWG0oURXN/Hp8q3ggFMIknASwSQCscK0/img.png?width=606&amp;amp;height=315&amp;amp;face=0_0_606_315,https://scrap.kakaocdn.net/dn/cOsVl4/hyWKHabb6g/7wTxz9jdEcRKVUJqZV34f1/img.png?width=606&amp;amp;height=315&amp;amp;face=0_0_606_315,https://scrap.kakaocdn.net/dn/pWo7f/hyWKyYB0if/zou4DFohMQzKiXuOCuQfK0/img.jpg?width=1000&amp;amp;height=600&amp;amp;face=0_0_1000_600&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/57&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/57&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bV30Ev/hyWG0oURXN/Hp8q3ggFMIknASwSQCscK0/img.png?width=606&amp;amp;height=315&amp;amp;face=0_0_606_315,https://scrap.kakaocdn.net/dn/cOsVl4/hyWKHabb6g/7wTxz9jdEcRKVUJqZV34f1/img.png?width=606&amp;amp;height=315&amp;amp;face=0_0_606_315,https://scrap.kakaocdn.net/dn/pWo7f/hyWKyYB0if/zou4DFohMQzKiXuOCuQfK0/img.jpg?width=1000&amp;amp;height=600&amp;amp;face=0_0_1000_600');&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;#01 Proxy(프록시) 서버란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요.&amp;nbsp;TAK&amp;nbsp;입니다:)&amp;nbsp;이번 포스팅은 Proxy(프록시) 서버란 무엇인지 알아보겠습니다. &amp;nbsp;Proxy(프록시) 서버라는 단어는 네트워크 관련 주제에서 빠지지 않고 등장하는 용어인데, 낱낱이 살&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;008&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/008.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/008.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Forward Proxy&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MGmbQ/btsITgYXkNA/dqDbT6zAPHPkSVeyDAac8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MGmbQ/btsITgYXkNA/dqDbT6zAPHPkSVeyDAac8K/img.png&quot; data-alt=&quot;https://cf-assets.www.cloudflare.com/slt3lc6tev37/2MZmHGnCdYbQBIsZ4V11C6/25b48def8b56b63f7527d6ad65829676/forward_proxy_flow.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MGmbQ/btsITgYXkNA/dqDbT6zAPHPkSVeyDAac8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMGmbQ%2FbtsITgYXkNA%2FdqDbT6zAPHPkSVeyDAac8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;640&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://cf-assets.www.cloudflare.com/slt3lc6tev37/2MZmHGnCdYbQBIsZ4V11C6/25b48def8b56b63f7527d6ad65829676/forward_proxy_flow.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성에 앞서 다시 한번 설명하자면, &lt;b&gt;Forward&amp;nbsp;Proxy&lt;/b&gt;는&amp;nbsp;클라이언트와&amp;nbsp;인터넷&amp;nbsp;사이에&amp;nbsp;위치하여&amp;nbsp;클라이언트의&amp;nbsp;요청을&amp;nbsp;대신&amp;nbsp;처리해 주는&amp;nbsp;서버입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p 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;span style=&quot;color: #000000;&quot;&gt;그림에서는 use's device가 클라이언트입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, 해당 클라이언트는 내부 네트워크에 위치하며, Proxy Server는 내부 혹은 DMZ 네트워크에 위치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트가&amp;nbsp;Forward&amp;nbsp;Proxy에&amp;nbsp;요청을&amp;nbsp;보내면,&amp;nbsp;Proxy&amp;nbsp;서버가&amp;nbsp;이를&amp;nbsp;인터넷으로&amp;nbsp;전달하고,&amp;nbsp;응답을&amp;nbsp;받아&amp;nbsp;클라이언트에게&amp;nbsp;반환합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를&amp;nbsp;통해&amp;nbsp;클라이언트의&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;숨기거나,&amp;nbsp;콘텐츠&amp;nbsp;필터링,&amp;nbsp;캐싱,&amp;nbsp;보안&amp;nbsp;등을&amp;nbsp;제공할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. Squid Proxy란?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 구축 실습은 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.squid-cache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Squid Proxy라는 오픈소스&lt;/a&gt; Proxy를 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Squid Proxy 는 일반적인 개념 설명을 기준으로는 Cache &amp;amp; Web Proxy Server에 가깝지만, 일반적인 Proxy Server 가 가지는 특성을 가지고 있으며&amp;nbsp; 클라이언트의 요청을 전달(Forward)하는 Forward Proxy와 같은 방향성을 가집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주로&amp;nbsp;HTTP와&amp;nbsp;HTTPS&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;Squid는&amp;nbsp;또한&amp;nbsp;웹&amp;nbsp;필터링,&amp;nbsp;액세스&amp;nbsp;제어,&amp;nbsp;로깅&amp;nbsp;등의&amp;nbsp;기능을&amp;nbsp;제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;nginx, apache 등과 달리 Squid의 경우, Proxy로 사용하기 위한 별도의 설정 없이 자체가 Proxy를 위한 오픈소스이기 구축이 쉽고, 패키지 형태로 설치 가능하기에 Config 설정만 구성한다면 변경 등 관리적 측면에서 비교적 수월할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 외 장점은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;고급 캐싱 기능&lt;/b&gt;: HTTP, HTTPS, FTP 등 다양한 프로토콜을 지원하며, 매우 세밀한 캐싱 제어를 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;네트워크 최적화&lt;/b&gt;: 대역폭 절약과 응답 시간 단축을 위해 고도로 최적화되어 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;액세스 제어 및 필터링&lt;/b&gt;: 강력한 ACL(Access Control List)을 통해 상세한 접근 제어와 웹 필터링을 할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;로깅 및 모니터링&lt;/b&gt;: 상세한 로그와 모니터링 기능을 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2. 구성도&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 Forward Proxy 실습은 Azure 환경에서 진행합니다.&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;1330&quot; data-origin-height=&quot;819&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLvbvq/btsIXwJeVMa/si2pxEYsgWfaCSA1Qfay51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLvbvq/btsIXwJeVMa/si2pxEYsgWfaCSA1Qfay51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLvbvq/btsIXwJeVMa/si2pxEYsgWfaCSA1Qfay51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLvbvq%2FbtsIXwJeVMa%2Fsi2pxEYsgWfaCSA1Qfay51%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;1330&quot; height=&quot;819&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;819&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;위 그림과 같이 [내부 내부네트워크] 표시가 있는 클라이언트에서 Server X, Y에게 요청을 할 때,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;10.11.0.0/24 대역에 배포된 Squid Proxy 를 통해서 요청이 전달될 수 있도록 하는 구성(중계 요청)으로 진행하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&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;span style=&quot;color: #000000;&quot;&gt;VM 정보(상세 Spec은 테스트이기에 가장 저렴하게 맞추시면 됩니다.)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client A : Windows 10, Client B : Windows Server 2019&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Forward Proxy(Squid) : Linux(Ubuntu 24.04)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server X, Server Y : Linux(Rocky 9)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[내부 네트워크]라고 함은 &quot;인증 및 인가되지 않은 액세스는 불가하며, 외부 통신을 제한한다&quot;라는 가정이 전제됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Forward Proxy는 DMZ 구간으로 배포된 서버이며, 내/외부 네트워크 중간에 위치하여 제약 사항이 존재합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-3. 네트워크 구성&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;내부 네트워크와 Proxy Server 가 배포된 네트워크의 대역이 다릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 두 네트워크 내 배포된 서버 간 통신을 위해서 추가 작업이 필요하다는 의미입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;예를 들어, 다음과 같은 방법이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 경로 테이블(UDR) 생성하여 Client 단의 트래픽을 Proxy Server 로 통하게 전파하는 방식으로 라우팅을 설정&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- NSG(Network Security Group) 혹은 방화벽을 통한 접근 제어 방식&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- VNET 간 Peering 을 구성하여 네트워크 연결&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- VPN, 기타 등등&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이 중 VNET 간 Peering 을 통해 사설 네트워크 간 통신 가능하도록 구성하고,&amp;nbsp;ACL 역할을 하는 NSG(Network Security Group) 규칙을 통해 IP, Port 에 대해 보다 상세히 제어해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;NSG의 기본 규칙 중 &quot;가상 네트워크 간 통신은 모두 허용한다&quot; 라는 것이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, NSG 는 우선순위 기반이기에 그 보다 더 높은 우선순위를 부여하여 출발지와 목적지를 특정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1-3. Squid Proxy 구축&lt;/h3&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-3-1. Squid Proxy 설치&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;apt 패키지 방식으로 설치 및 서비스 상태 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1722838769450&quot; class=&quot;sas&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install squid&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;839&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn8NZj/btsITgZhvXz/KqG6RdeorsHL2bUSR45cJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn8NZj/btsITgZhvXz/KqG6RdeorsHL2bUSR45cJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn8NZj/btsITgZhvXz/KqG6RdeorsHL2bUSR45cJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn8NZj%2FbtsITgZhvXz%2FKqG6RdeorsHL2bUSR45cJK%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;839&quot; height=&quot;236&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1-4. Squid Proxy 구성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;config 파일 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1722838769450&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo nano /etc/squid/squid.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Squid 가 리스닝 하는 Default 포트 정보 확인&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;well-known 포트이기에 실제 사용 목적이라면 변경합니다. 해당 실습에서는 기본 포트 사용합니다.&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;936&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sJsvW/btsISM5qWuI/FGBmmdEgGxUAJs370BKTpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sJsvW/btsISM5qWuI/FGBmmdEgGxUAJs370BKTpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sJsvW/btsISM5qWuI/FGBmmdEgGxUAJs370BKTpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsJsvW%2FbtsISM5qWuI%2FFGBmmdEgGxUAJs370BKTpK%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;760&quot; height=&quot;258&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;318&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;770&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uwQi2/btsITkm4GT2/qbdDuh3ZkRrxakiMY40rRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uwQi2/btsITkm4GT2/qbdDuh3ZkRrxakiMY40rRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uwQi2/btsITkm4GT2/qbdDuh3ZkRrxakiMY40rRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuwQi2%2FbtsITkm4GT2%2FqbdDuh3ZkRrxakiMY40rRK%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;770&quot; height=&quot;128&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4-1. 인증&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Squid Proxy Server에 Samab, LDAP 등 여러 가지 인증을 구성하는 방법이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가장 일반적인 방법 중 하나는 HTTP 기본 인증(Basic Authentication)을 사용하는 것입니다. 이를 위해서 &quot;htpasswd&quot; 유틸리티를 사용하여 사용자 계정을 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;말 그대로 HTTP 기본 인증(Basic Authentication)은 서버에 액세스 할 수 있는 사용자를 식별하는 데 사용되며, 서버 보호에 이점이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;하지만 전송되는 데이터의 경우, 암호화되지 않은 상태로 전달하기에 보안 상 취약합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그래서!!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTPS를 통해 Squid와 클라이언트 간의 트래픽을 암호화하는 것이 좋기에...&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이왕 하는 거 조금 더 번거롭지만? OpenSSL을 사용해서 자체 서명 인증서를 생성하여 TLS/SSL 인증서를 Squid Proxy 에 사용할 수 있도록 해보겠습니다!!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 계정 생성&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후, 암호 생성 요청에 따라 신규 암호 생성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1722838769451&quot; class=&quot;dts&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo apt-get install apache2-utils
sudo htpasswd -c /etc/squid/passwords &amp;lt;account_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증서 및 키 생성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증서와 키를 저장할 디렉터리 생성(.conf 파일과 동일한 경로)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1722838769451&quot; class=&quot;arduino&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo mkdir -p /etc/squid/ssl_cert&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;OpenSSL 사용해서 인증서와 키를 생성&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원래는 key와 crt를 각각 생성하여 구분하는 것이 좋습니다만...&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1722838769451&quot; class=&quot;groovy&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/squid/ssl_cert/&amp;lt;CA_name&amp;gt;.pem -out /etc/squid/ssl_cert/&amp;lt;CA_name&amp;gt;.pem&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&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;1597&quot; data-origin-height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CNNCa/btsISpCILyW/aNXdNfkZpoXgh6vU648t0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CNNCa/btsISpCILyW/aNXdNfkZpoXgh6vU648t0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CNNCa/btsISpCILyW/aNXdNfkZpoXgh6vU648t0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCNNCa%2FbtsISpCILyW%2FaNXdNfkZpoXgh6vU648t0K%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;1597&quot; height=&quot;439&quot; data-origin-width=&quot;1597&quot; data-origin-height=&quot;439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증서 및 키 생성 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;363&quot; data-origin-height=&quot;37&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmTabh/btsITmrGhV1/yLZk9mjP0KubupS8JOts90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmTabh/btsITmrGhV1/yLZk9mjP0KubupS8JOts90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmTabh/btsITmrGhV1/yLZk9mjP0KubupS8JOts90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmTabh%2FbtsITmrGhV1%2FyLZk9mjP0KubupS8JOts90%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;363&quot; height=&quot;37&quot; data-origin-width=&quot;363&quot; data-origin-height=&quot;37&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;&lt;span style=&quot;color: #000000;&quot;&gt;1-4-2. ACL 및 인증 구성 적용&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1722838769452&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo nano /etc/squid/squid.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;우선 용이한 작업을 위해 conf 파일을 복사하여 백업본을 생성한 후, 진행하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(.conf 파일을 들여다보면 주석 처리된 내용이 많기에, 수정하는데 번거로울 수 있습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주석 삭제 및 줄 공백 삭제 명령어&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sudo&amp;nbsp;sed&amp;nbsp;-i&amp;nbsp;'/^#/&amp;nbsp;d'&amp;nbsp;/etc/squid/squid.conf &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sudo sed -i '/^$/ d' /etc/squid/squid.conf&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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;span style=&quot;color: #000000;&quot;&gt;간략해진 .conf 파일을 보면 마음이 안정이 되는데요..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실 Squid에서 요점은 간단합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;기본적으로 Deny 정책을 가져가되, localhost 의 액세스는 허용하고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 조건에 따라 적용될 ACL에 반영할 값을 정의 후, 접근 규칙에 반영 구조입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;요건은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 내부 클라이언트에서 naver.com 접근 시 차단 / 그 외 허용&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 내부 클라이언트에서 외부 서버(4.217.253.107)에 80,443 접근 시 허용 / 그 외 IP 및 포트 접근 시 차단&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&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;span style=&quot;color: #000000;&quot;&gt;정의 규칙&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ACL 포트 정의 규칙&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ACL 특정 출발지 및 목적지 네트워크 &amp;amp; 도메인 정의 규칙&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;접근 제어 규칙&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도메인 허용/차단 규칙&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;내부 네트워크에서 목적지 서버로의 접근 규칙&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTPS 포트 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본 인증(Basic Authentication)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증된 사용자 ACL&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 사항들이 반영된 .conf 파일은 다음과 같습니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1723010124683&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# ACL 요청을 필터링하는 데 사용되는 규칙
# 로컬 네트워크 범위 정의(Default 유지)
acl localnet src 0.0.0.1-0.255.255.255  # RFC 1122 &quot;this&quot; network (LAN)
acl localnet src 10.0.0.0/8             # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10          # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16         # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12          # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16         # RFC 1918 local private network (LAN)
acl localnet src fc00::/7               # RFC 4193 local private network range
acl localnet src fe80::/10              # RFC 4291 link-local (directly plugged) machines

# ACL 포트 정의 규칙(불필요한 포트 정보 삭제)
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https

# ACL 특정 출발지 및 목적지 네트워크 &amp;amp; 도메인 정의 규칙
acl internal_network src 172.16.10.0/24
acl destination_network dst 4.217.253.107
acl naver dstdomain .naver.com


# 접근 제어 규칙
# ACL을 기반으로 특정 요청을 허용 혹은 거부
# 포트 허용 규칙(안전하지 않은 포트와 관리 인터페이스에 대한 접근을 제어)
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny to_localhost
http_access deny to_linklocal

# 도메인 허용/차단 규칙(google, naver)
http_access deny naver
http_access allow !naver

# 내부 네트워크에서 목적지 서버로의 접근 규칙
http_access allow internal_network destination_network
http_access deny internal_network destination_network !Safe_ports

# 추가 설정 파일을 포함(Default 유지)
include /etc/squid/conf.d/*.conf

# 기본적으로 모든 접근을 차단
http_access deny all

# http 포트 정의(Default 유지)
http_port 3128

# https 포트 정의(인정서와 키 파일)
https_port 3129 tls-cert=/etc/squid/ssl_cert/&amp;lt;CA_name&amp;gt;.pem tls-key=/etc/squid/ssl_cert/&amp;lt;CA_name&amp;gt;.pem

# 기본 인증(Basic Authentication)
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive on

# 인증된 사용자 ACL
acl authenticated proxy_auth REQUIRED
http_access allow authenticated

# 코어 덤프를 저장할 디렉터리 지정(Default 유지)
coredump_dir /var/spool/squid

# 다양한 유형의 캐싱 정책 설정(Default 유지)
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern .               0       20%     4320&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-5. Client 구성&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client는 Windows 10로 브라우저(Firefox) 단에서 프록시 설정을 진행해 보겠습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;665&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coHUC0/btsIWSSt4CO/4ik3ZBSebM1Bd2U1WhI0Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coHUC0/btsIWSSt4CO/4ik3ZBSebM1Bd2U1WhI0Q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coHUC0/btsIWSSt4CO/4ik3ZBSebM1Bd2U1WhI0Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoHUC0%2FbtsIWSSt4CO%2F4ik3ZBSebM1Bd2U1WhI0Q0%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;1600&quot; height=&quot;665&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;665&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;검색바에서 프록시 검색&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1495&quot; data-origin-height=&quot;465&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1W12V/btsIX9lhKjz/vsS5rgqn6gJXokiGOjjyB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1W12V/btsIX9lhKjz/vsS5rgqn6gJXokiGOjjyB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1W12V/btsIX9lhKjz/vsS5rgqn6gJXokiGOjjyB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1W12V%2FbtsIX9lhKjz%2FvsS5rgqn6gJXokiGOjjyB1%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;1495&quot; height=&quot;465&quot; data-origin-width=&quot;1495&quot; data-origin-height=&quot;465&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[수동 프록시 설정] 에서 Squid Proxy Server의 IP와 기본 포트(HTTP) 3128 그리고 HTTPS 옵션도 함께 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mnkS5/btsIXwuwnZ7/8KjknZ2TE75P8KPRXwwPI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mnkS5/btsIXwuwnZ7/8KjknZ2TE75P8KPRXwwPI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mnkS5/btsIXwuwnZ7/8KjknZ2TE75P8KPRXwwPI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmnkS5%2FbtsIXwuwnZ7%2F8KjknZ2TE75P8KPRXwwPI1%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;850&quot; height=&quot;538&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;538&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트에서 아운바운드 IP 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IP를 확인해 보면, Squid Proxy Server 의 공용 IP가 확인됨.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1605&quot; data-origin-height=&quot;704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Utcx8/btsIZMJ6RRb/ummVeiFkluquxFIQpvnDS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Utcx8/btsIZMJ6RRb/ummVeiFkluquxFIQpvnDS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Utcx8/btsIZMJ6RRb/ummVeiFkluquxFIQpvnDS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUtcx8%2FbtsIZMJ6RRb%2FummVeiFkluquxFIQpvnDS0%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;1605&quot; height=&quot;704&quot; data-origin-width=&quot;1605&quot; data-origin-height=&quot;704&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-6. Proxy 테스트&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제 클라이언트 단에서 Squid Proxy Server 테스트를 진행해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-6-1. 도메인 제어 테스트&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;naver.com 액세스 시도 &amp;gt; 차단&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1605&quot; data-origin-height=&quot;711&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biWZfp/btsIYca7A49/54CzvFmK4RL7IDkUGjD2j0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biWZfp/btsIYca7A49/54CzvFmK4RL7IDkUGjD2j0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biWZfp/btsIYca7A49/54CzvFmK4RL7IDkUGjD2j0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiWZfp%2FbtsIYca7A49%2F54CzvFmK4RL7IDkUGjD2j0%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;1605&quot; height=&quot;711&quot; data-origin-width=&quot;1605&quot; data-origin-height=&quot;711&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Squid Proxy 의 (/var/log/squid/)access.log 확인 시, &lt;b&gt;403&lt;/b&gt; 응답 확인&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cp1yLc/btsIW4SLdzw/pnh1gXkkGaK5sR0TcTINcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cp1yLc/btsIW4SLdzw/pnh1gXkkGaK5sR0TcTINcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cp1yLc/btsIW4SLdzw/pnh1gXkkGaK5sR0TcTINcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcp1yLc%2FbtsIW4SLdzw%2Fpnh1gXkkGaK5sR0TcTINcK%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;1612&quot; height=&quot;252&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;with-cloud.tistory.com 연결 시도 &amp;gt; 허용&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1608&quot; data-origin-height=&quot;740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nsPV9/btsIWGLoWkH/rbjcwBP93zdUvoWaAdCdPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nsPV9/btsIWGLoWkH/rbjcwBP93zdUvoWaAdCdPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nsPV9/btsIWGLoWkH/rbjcwBP93zdUvoWaAdCdPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnsPV9%2FbtsIWGLoWkH%2FrbjcwBP93zdUvoWaAdCdPK%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;1608&quot; height=&quot;740&quot; data-origin-width=&quot;1608&quot; data-origin-height=&quot;740&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Squid Proxy 의 (/var/log/squid/)access.log 확인 시, &lt;b&gt;200&lt;/b&gt; 응답 확인&lt;/span&gt;&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wkvEN/btsIX715vUE/Ep10htfsMaKxgE3EwafA21/img.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;233&quot; data-is-animation=&quot;false&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-6-2. 목적지 IP 및 포트 제어 테스트&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트 단에서 요청 시, 프록시가 중계 역할을 하기 때문에 Squid Proxy Server 의 IP와 Port를 지정하여, 외부 서버에 연결된 Azure NSG 규칙을 추가하여 액세스를 제한합니다.&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u07sv/btsIYccge6J/Rm6ajdj27Um3UAg9rtWeD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u07sv/btsIYccge6J/Rm6ajdj27Um3UAg9rtWeD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u07sv/btsIYccge6J/Rm6ajdj27Um3UAg9rtWeD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu07sv%2FbtsIYccge6J%2FRm6ajdj27Um3UAg9rtWeD0%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;1346&quot; height=&quot;288&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;목적지인 외부 서버와 80으로 서비스 중인 Nginx 액세스 시도 &amp;gt; 허용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1610&quot; data-origin-height=&quot;696&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DIUpn/btsIZcJoeCl/djmRyb8flhviG2BI2PkGo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DIUpn/btsIZcJoeCl/djmRyb8flhviG2BI2PkGo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DIUpn/btsIZcJoeCl/djmRyb8flhviG2BI2PkGo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDIUpn%2FbtsIZcJoeCl%2FdjmRyb8flhviG2BI2PkGo0%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;1610&quot; height=&quot;696&quot; data-origin-width=&quot;1610&quot; data-origin-height=&quot;696&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;access.log에 확인되는 응답 결과는 TCP_MISS/200인데, 이는 캐시에 저장된 정보가 없어 원격 서버로부터 데이터를 가져왔으며, 성공적으로 요청에 대해 응답했음을 의미합니다.&lt;br /&gt;&lt;br /&gt;응답 코드 304의 경우, 서버에게 동일한 요청을 보낼 때 별다른 문제나 변화가 없으면 확인될 수 있으며 이는 변경 사항이 없으므로 캐시 되어 있는 자원으로 리디렉션 하겠다는 의미를 갖습니다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmS9zW/btsIZc3GesU/v9HQHfKOu0AiV6Z5j2fHsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmS9zW/btsIZc3GesU/v9HQHfKOu0AiV6Z5j2fHsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmS9zW/btsIZc3GesU/v9HQHfKOu0AiV6Z5j2fHsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmS9zW%2FbtsIZc3GesU%2Fv9HQHfKOu0AiV6Z5j2fHsK%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;1242&quot; height=&quot;40&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;40&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;목적지인 외부 서버와 8080으로 서비스 중인 Tomcat 액세스 시도 &amp;gt; 차단&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;Squid Proxy Server에서 요청에 대한 거절의 메시지 내용이 있는 HTML 파일을 보여줌.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1604&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWrTV2/btsIYUa9qrC/ZlfbunDLVBRttydgNwBDLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWrTV2/btsIYUa9qrC/ZlfbunDLVBRttydgNwBDLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWrTV2/btsIYUa9qrC/ZlfbunDLVBRttydgNwBDLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWrTV2%2FbtsIYUa9qrC%2FZlfbunDLVBRttydgNwBDLk%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;1604&quot; height=&quot;514&quot; data-origin-width=&quot;1604&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;access.log 에서 해당 요청에 대한 응답 코드로 403을 반환&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BPqSH/btsIZuQst4c/fvlAkegGjFPZoPS7WMVtQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BPqSH/btsIZuQst4c/fvlAkegGjFPZoPS7WMVtQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BPqSH/btsIZuQst4c/fvlAkegGjFPZoPS7WMVtQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBPqSH%2FbtsIZuQst4c%2FfvlAkegGjFPZoPS7WMVtQ1%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;1464&quot; height=&quot;69&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이상으로 &quot;#02 Squid Forward Proxy(프록시) 서버 구축&quot; 포스팅을 마치겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;원래 해당 포스팅에서 Reverse Proxy에 대한 실습 내용도 함께 작성하려고 했는데, 개인적인 이유로 시간적 여유가 부족해 별로 작성할 예정입니다. &lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;s&gt;(양해를 바라며...)&lt;/s&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그럼 빠른 시일 내 Reverse Proxy 실습으로 다시 찾아오겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;함께 해주셔서 감사합니다 &lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>Azure</category>
      <category>cloud</category>
      <category>Forward Proxy</category>
      <category>proxy server</category>
      <category>squid proxy</category>
      <category>네트워크</category>
      <category>스퀴드 프록시</category>
      <category>정방향 프록시</category>
      <category>캐시</category>
      <category>프록시 서버</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/58</guid>
      <comments>https://with-cloud.tistory.com/58#entry58comment</comments>
      <pubDate>Thu, 8 Aug 2024 16:33:47 +0900</pubDate>
    </item>
    <item>
      <title>#01 Proxy(프록시) 서버란?</title>
      <link>https://with-cloud.tistory.com/57</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅은 Proxy(프록시) 서버란 무엇인지 알아보겠습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Proxy(프록시) 서버라는 단어는 네트워크 관련 주제에서 빠지지 않고 등장하는 용어인데, 낱낱이 살펴보겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;002&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. &lt;span style=&quot;text-align: start;&quot;&gt;Proxy(&lt;/span&gt;프록시) Server란?&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. Proxy(프록시) 의미&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FiwL2/btsIRUn2HQv/kWQwVkyknmrsIPTPuqyKdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FiwL2/btsIRUn2HQv/kWQwVkyknmrsIPTPuqyKdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FiwL2/btsIRUn2HQv/kWQwVkyknmrsIPTPuqyKdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFiwL2%2FbtsIRUn2HQv%2FkWQwVkyknmrsIPTPuqyKdk%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;552&quot; height=&quot;287&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;315&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Proxy 라는 단어의 뜻을 먼저 살펴보면, &quot;대리∙신(권)&quot; 또는 &quot;대리∙신의&quot;이라는 의미인 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 개념적인 용어로 특정 기능을 수행하는 역할이라고 표현할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 일반적인 개념을 IT Network 영역에 적용하여&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;클라이언트 요청을 다른 서버로 전달하고 그 결과를 클라이언트에게 반환하는 중계 역할&quot; 하는 것을 &quot;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Proxy Server&quot; 라고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2. &lt;span style=&quot;text-align: start;&quot;&gt;Proxy(&lt;/span&gt;프록시) 서버&lt;/span&gt;&lt;/h3&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/bm3UER/btsIQ3FRXFR/TUeJVulEgzMsCohpOGtCs0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm3UER/btsIQ3FRXFR/TUeJVulEgzMsCohpOGtCs0/img.jpg&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;600&quot; data-is-animation=&quot;false&quot; style=&quot;width: 57.1519%; margin-right: 10px;&quot; data-widthpercent=&quot;57.82&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm3UER/btsIQ3FRXFR/TUeJVulEgzMsCohpOGtCs0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm3UER%2FbtsIQ3FRXFR%2FTUeJVulEgzMsCohpOGtCs0%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;1000&quot; height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEC8D9/btsIPjXNICa/LWmKQCWOMmmMVQC0KlKAo1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEC8D9/btsIPjXNICa/LWmKQCWOMmmMVQC0KlKAo1/img.webp&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;691&quot; data-is-animation=&quot;false&quot; style=&quot;width: 41.6853%;&quot; data-widthpercent=&quot;42.18&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEC8D9/btsIPjXNICa/LWmKQCWOMmmMVQC0KlKAo1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEC8D9%2FbtsIPjXNICa%2FLWmKQCWOMmmMVQC0KlKAo1%2Fimg.webp&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;840&quot; height=&quot;691&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;좌 : https://www.fortinet.com/content/dam/fortinet/images/cyberglossary/proxy-server-1.jpeg 우 : https://data-flair.training/blogs/wp-content/uploads/sites/2/2022/01/mechanism-of-proxy-server.webp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위에 정의한 것을 다시 설명하자면, 클라이언트가 Proxy Server를 통해 다른 네트워크의 서비스에 간접적으로 액세스 할 수 있도록 해주는 컴퓨터 시스템이나 응용 프로그램을 말합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 클라이언와 서버 간 중계기로써 대리로 통신을 수행하는 것을 지칭하며 Proxy &lt;b&gt;Server&amp;nbsp;&lt;/b&gt;이므로 물리적 혹은 가상 서버입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Proxy Server 는 다양한 용도로 사용될 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://with-cloud.tistory.com/56&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;전에 포스팅한 CDN&lt;/a&gt; 과 비슷하게 캐시를 이용하여 클라이언트의 요청에 빠른 응답을 가능케 하고 이는 웹 브라우징의 속도를 향상합니다. 또한, 보안을 위한 방화벽 기능, 서버의 IP 주소를 숨기기 위한 익명화 등 다양한 네트워크 및 보안 기능을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;1-3.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Proxy(&lt;/span&gt;프록시) 서버 특징&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Proxy Server는 다음과 같은 특징을 가집니다. 아래 항목들은 Proxy Server의 종류에 따라 달라질 수 있습니다.&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중계 역할 :클라이언트의 요청을 대신하여 서버에 전달하고, 서버의 응답을 클라이언트로 전달합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, 서버를 관리하고 설정하는 과정이 복잡할 수 있으며, 상용 프로그램 사용 시에 추가 비용이 발생할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;캐싱 기능 : 자주 요청되는 웹 페이지나 데이터를 캐시에 저장하여 같은 요청이 있을 때 더 빠르게 응답할 수 있습니다. 이를 통해 네트워크 대역폭을 절약하고 응답 시간을 단축시킵니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보안 강화 : 클라이언트의 IP를 숨겨 익명성을 제공하고, 악성 사이트에 대한 접근을 차단할 수 있습니다. 또한, HTTPS 프록시는 암호화된 트래픽을 검사하여 보안을 강화할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;콘텐츠 필터링 : 특정 웹 사이트나 콘텐츠에 대한 접근을 차단하거나 제한할 수 있습니다. 이는 기업이나 학교에서 사용자가 부적절한 사이트에 접속하는 막는 데 사용될 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, 일부 웹 사이트나 서비스는 Proxy Server를 통한 접근을 차단할 수도 있습니다. 이는 익명화 Proxy나 지역 제한 우회를 위한 Proxy 사용 시 발생할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로깅 및 모니터링 : 사용자의 웹 활동을 기록하고 모니터링할 수 있습니다. 이를 통해 네트워크 사용 패턴을 분석하고 보안 위협을 감지할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, 운영자가 사용자 트래픽을 모니터링할 수 있기에 프라이버시 침해의 우려가 있을 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;속도 저하 가능성 : 모든 트래픽이 Proxy Server를 거친다면, 서버의 성능에 따라 전체 네트워크 속도가 저하될 가능성이 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;1-4.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Proxy(&lt;/span&gt;프록시) 서버 종류&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Proxy Server는 다양한 유형으로 나뉘며, 각 유형은 목적에 따른 동작 방식을 통해 작동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;즉, 네트워크 상 어디에 위치하는지 또는 네트워크 흐름이 어느 방향으로 데이터는 제공(혹은 요청) 하는지에 따라 달라집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;text-align: start;&quot;&gt;이는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Forward&amp;nbsp;Proxy 와 Reverse Proxy 가 일반적이고 대표적으로 구분됩니다.&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;700&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn01GW/btsISV1rmNC/EgtHFDqTJqupoQ9PrVQTWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn01GW/btsISV1rmNC/EgtHFDqTJqupoQ9PrVQTWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn01GW/btsISV1rmNC/EgtHFDqTJqupoQ9PrVQTWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn01GW%2FbtsISV1rmNC%2FEgtHFDqTJqupoQ9PrVQTWK%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;700&quot; height=&quot;420&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 항목들을 통해, 다양한 Proxy Server 유형과 간단한 다이어그램을 살펴보겠습니다.&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;웹 프록시(Web Proxy)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;web-proxy-diagram.svg&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OxNhm/btsIPv4NYOQ/oXrw7JbhF8QUa0M2fOgUXK/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OxNhm/btsIPv4NYOQ/oXrw7JbhF8QUa0M2fOgUXK/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OxNhm/btsIPv4NYOQ/oXrw7JbhF8QUa0M2fOgUXK/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOxNhm%2FbtsIPv4NYOQ%2FoXrw7JbhF8QUa0M2fOgUXK%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;200&quot; data-filename=&quot;web-proxy-diagram.svg&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주로 HTTP, HTTPS 트래픽을 처리하는 Proxy Server 입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트의 웹 요청을 받아 원격 서버에 전달하고, 응답을 클라이언트에서 반환합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;웹 사이트 접근 시, 보안과 익명성을 제공하고 특정 웹 사이트를 차단하거나 허용하는 데 사용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;브라우저(Firefox, Chrome) 에서 웹 프록시를 사용할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;캐싱 프록시 (Caching Proxy)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;caching-proxy-diagram.svg&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqDgPU/btsIP6QYxqY/bFPnpUoeVE45Pr8vJ9KGsK/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqDgPU/btsIP6QYxqY/bFPnpUoeVE45Pr8vJ9KGsK/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqDgPU/btsIP6QYxqY/bFPnpUoeVE45Pr8vJ9KGsK/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqDgPU%2FbtsIP6QYxqY%2FbFPnpUoeVE45Pr8vJ9KGsK%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;220&quot; data-filename=&quot;caching-proxy-diagram.svg&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트 요청에 대한 응답 데이터를 캐시에 저장하여 동일한 요청에 다시 들어오면 캐시에 직접 데이터를 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 네트워크 대역폭을 절약하고 응답 시간을 단축합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주로 자주 요청되는 데이터를 효율적으로 제공하기 위해 사용됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;포워드(정방향) 프록시 (Forward Proxy)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;forward-proxy-diagram (1).svg&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVKI5o/btsIQmlJjlT/Ewk1AQoG2gZhny9k6RBZ5k/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVKI5o/btsIQmlJjlT/Ewk1AQoG2gZhny9k6RBZ5k/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVKI5o/btsIQmlJjlT/Ewk1AQoG2gZhny9k6RBZ5k/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVKI5o%2FbtsIQmlJjlT%2FEwk1AQoG2gZhny9k6RBZ5k%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;220&quot; data-filename=&quot;forward-proxy-diagram (1).svg&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트와 인터넷 사이에 위치하여 클라이언트의 요청을 대신 처리하고, 원격 서버의 응답을 클라이언트에게 전달합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 그림과 같이 내부 네트워크의 클라이언트의 요청으로 외부 서버의 데이터는 가져와 응답하는 형식으로 일반적으로 Proxy Server라는 것을 포워드(정방향) 프록시라고 부릅니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주로 내부 네트워크 사용자가 외부 인터넷에 접근할 때 사용되며, 사용자의 신원을 숨기고 익명성을 보장합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보안, 캐싱, 콘텐츠 필터링 등의 기능을 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;리버스(역방향) 프록시 (Reverse Proxy)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;svgviewer-output (1).svg&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3Edjz/btsIRw15LAR/ww1BOcg6VtJ52cDTmKrkik/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3Edjz/btsIRw15LAR/ww1BOcg6VtJ52cDTmKrkik/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3Edjz/btsIRw15LAR/ww1BOcg6VtJ52cDTmKrkik/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3Edjz%2FbtsIRw15LAR%2Fww1BOcg6VtJ52cDTmKrkik%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;220&quot; data-filename=&quot;svgviewer-output (1).svg&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원격 서버(목적지) 앞단에 위치하여 외부 클라이언트의 요청을 받아 적절한 내부 서버로 전달합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버(목적지)를 외부 트래픽으로부터 보호하여 보안을 강화합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞단에 위치하고, 외부 트래픽으로 보호한다는 것은 해당 Proxy Server 가 실제 내부 네트워크에 위치한 서버와는 다른 네트워크 환경에 위치함을 시사합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 리버스(역방향) 프록시의 경우, 흔히 얘기하는 DMZ 하는 내/외부 네트워크 사이에 위치함으로써 내부 서버와네트워크 상 구분되어 있으며 이는 보안 이슈를 최소화하고자 함입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 서버에 트래픽을 분산시키는 로드 밸런싱을 통해 각 서버의 부하를 줄임으로써 성능 최적화 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;오픈(공개) 프록시 (Open Proxy)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;open-proxy-diagram.svg&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZDJFR/btsIRM4P4af/cQd0D30EgZBp4PaDRdaob1/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZDJFR/btsIRM4P4af/cQd0D30EgZBp4PaDRdaob1/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZDJFR/btsIRM4P4af/cQd0D30EgZBp4PaDRdaob1/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZDJFR%2FbtsIRM4P4af%2FcQd0D30EgZBp4PaDRdaob1%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;220&quot; data-filename=&quot;open-proxy-diagram.svg&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;누구나 접근할 수 있는 공개 Proxy Server 입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 인터넷상 모든 사용자가 접근할 수 있으며, 이를 통해 자신의 IP 주소를 남기지 않고 익명으로 활동할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, 이러한 서버는 크래킹, 악성 코드 또는 바이러스 유포 등 불법 행위에 악용되기 쉽습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;투명 프록시 (Transparent Proxy)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;transparent-proxy-diagram.svg&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gex8R/btsIQviyfqN/Cwyffp0fkkQTCEGKfVcc0k/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gex8R/btsIQviyfqN/Cwyffp0fkkQTCEGKfVcc0k/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gex8R/btsIQviyfqN/Cwyffp0fkkQTCEGKfVcc0k/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGex8R%2FbtsIQviyfqN%2FCwyffp0fkkQTCEGKfVcc0k%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;200&quot; data-filename=&quot;transparent-proxy-diagram.svg&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;투명&quot;이라는 말 그대로 클라이언트가 Proxy Server 를 사용하고 있다는 것을 인식하지 못합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 트래픽이 자동으로 투명 프록시 서버를 통해 라우팅 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 네트워크 레벨에서의 설정으로 네트워크 관리자에 의해 라우터나 스위치에서 설정됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버(목적지)를 외부 트래픽으로부터 보호하여 보안을 강화합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;익명 프록시(Anonymous Proxy)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;anonymous-proxy-diagram.svg&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biWwV8/btsIQg616V7/yHLr9HT6yHRFqPToAlSXak/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biWwV8/btsIQg616V7/yHLr9HT6yHRFqPToAlSXak/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biWwV8/btsIQg616V7/yHLr9HT6yHRFqPToAlSXak/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiWwV8%2FbtsIQg616V7%2FyHLr9HT6yHRFqPToAlSXak%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;200&quot; data-filename=&quot;anonymous-proxy-diagram.svg&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트의 실제 IP 주소를 숨기고 프록시 서버의 IP 주소로 대체하여 원격 서버(목적지)에 요청을 보냅니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 사용자의 신원을 숨기고, 익명성을 유지하여 프라이버시 보호에 사용될 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;소켓 프록시(SOCKS Proxy)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;socks-proxy-diagram.svg&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de2eE4/btsIScISIIS/8EKl4NCDDkubKYuQE3K4l0/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de2eE4/btsIScISIIS/8EKl4NCDDkubKYuQE3K4l0/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de2eE4/btsIScISIIS/8EKl4NCDDkubKYuQE3K4l0/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde2eE4%2FbtsIScISIIS%2F8EKl4NCDDkubKYuQE3K4l0%2Ftfile.svg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;220&quot; data-filename=&quot;socks-proxy-diagram.svg&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTP/HTTPS 이외에도 FTP, SMTP 등 다양한 프로토콜을 지원합니다. 이는 소켓 레벨에서 작동하기 때문에 특정 프르토콜에 종속되지 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, 기본적인 인증 메커니즘을 지원하여 사용자 인증을 통해 보안을 강화할 수 있습니다. 즉, 허가된 사용자만 프록시 서버를 사용할 수 있게 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 클라이언트와 서버 사이의 모든 데이터를 중계합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다양한 프로토콜이 지원되므로 여러 프로토콜에 대해 네트워크 연결 테스트를 할 수 있으며, 방화벽 규칙을 적용하여 특정 네트워크에 액세스 하는 데 사용될 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금까지 &quot;#01 Proxy(프록시) 서버란?&quot; 을 통해 Proxy Server의 개념과 유형 등을 알아보았습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 편에는 &quot;#02 Proxy(프록시) 서버 구축&quot;으로 돌아오겠습니다   (!!많관부!!) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자유로운 의견을 남겨주세요!&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/General</category>
      <category>cloud</category>
      <category>proxy server</category>
      <category>proxy란</category>
      <category>네트워크</category>
      <category>프록시 서버</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/57</guid>
      <comments>https://with-cloud.tistory.com/57#entry57comment</comments>
      <pubDate>Wed, 31 Jul 2024 15:19:47 +0900</pubDate>
    </item>
    <item>
      <title>CDN(Content Delivery Network)란?</title>
      <link>https://with-cloud.tistory.com/56</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅은 CDN(Content Delivery Network)란 무엇인지 알아보겠습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;익숙하지만 추상적으로 알고 있는 CDN이라는 개념과 작동 방식을 함께 정리하면 좋을 것 같아 준비했습니다!&lt;/span&gt;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;011&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/011.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/011.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. CDN(Content Deliver Network)란?&lt;/span&gt;&lt;/h2&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/bZeUZr/btsIfW9dBDN/WfWBpe5BJbTZdCdq4NDqCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZeUZr/btsIfW9dBDN/WfWBpe5BJbTZdCdq4NDqCk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;640&quot; data-origin-width=&quot;1280&quot; style=&quot;width: 52.3475%; margin-right: 10px;&quot; data-widthpercent=&quot;52.96&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZeUZr/btsIfW9dBDN/WfWBpe5BJbTZdCdq4NDqCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZeUZr%2FbtsIfW9dBDN%2FWfWBpe5BJbTZdCdq4NDqCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx1kd0/btsIixVvcbr/8kEJw1yqMQey2iA76cq7a1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx1kd0/btsIixVvcbr/8kEJw1yqMQey2iA76cq7a1/img.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;563&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;47.04&quot; style=&quot;width: 46.4898%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx1kd0/btsIixVvcbr/8kEJw1yqMQey2iA76cq7a1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx1kd0%2FbtsIixVvcbr%2F8kEJw1yqMQey2iA76cq7a1%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;1000&quot; height=&quot;563&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;(좌)https://www.cloudflare.com/ko-kr/learning/cdn/what-is-a-cdn/ (우)https://blog.scaleflex.com/content/images/2022/12/how-does-a-cdn-work.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;CDN&lt;/b&gt;은 웹 콘텐츠를 사용자에게 효율적으로 전달할 수 있는 분산 서버 네트워크입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;말 그대로, CDN은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&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;합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쉽게 표현하자면, 웹 페이지의 이미지, 동영상 등의 콘텐츠를 사용자(User)의 실제 위치(지리적 위치)와 가까운 서버에 &lt;b&gt;캐싱&lt;/b&gt;하여, 콘텐츠를 기다릴 필요 없이 쇼핑, 영화 감상, 콘텐츠 다운로드, SNS 게시 등 작업을 원활히 수행할 수 있게 해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CDN은&amp;nbsp;이를&amp;nbsp;위해&lt;b&gt;&amp;nbsp;PoP(Point&amp;nbsp;of&amp;nbsp;Presence)&amp;nbsp;&lt;/b&gt;위치에 캐시 된 콘텐츠(&lt;span style=&quot;text-align: start;&quot;&gt;데이터 센터에 파일 사본을 임시로 저장하는 &amp;lsquo;캐싱&amp;rsquo;이라는 프로세스&lt;/span&gt;)를&amp;nbsp;&lt;b&gt;Edge&amp;nbsp;서버&lt;/b&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;가능해집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. 용어 설명&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위에서 언급한 주요 용어에 대해서 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1-1. 캐싱(Caching)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;캐싱은 파일의 사본을 임시로 저장하는 프로세스를 의미합니다.(즉, 임시로 저장한 테이터 요청 시간을 단축시키는 기술) CDN은 보통 글로벌 서비스를 제공하는데, 원본 서버에서 제공하는 콘텐츠를 전 세계 데이터 센터에 파일을 캐싱하여, 사용자가 가까운 서버에서 인터넷 콘텐츠에 접속할 수 있도록 합니다. 이를 통해 데이터 전송 시간을 단축하고 서버 부하를 줄입니다.&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;span style=&quot;color: #000000;&quot;&gt;속도 향상: 사용자가 요청한 콘텐츠를 가까운 개시 서버에서 제공하여 대기 시간을 줄이고 빠르게 전달&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버 부하 감소: 원본 서버에 대한 요청을 줄여 서버 부하를 분산&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대역폭 비용 절감: 원본 서버와 사용자 간의 직접 통신을 줄여 네트워크 대역폭 사용을 최적화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가용성 증가: 원본 서버 문제 시에도 캐시 서버에 저장된 콘텐츠를 통해서 서비스 지속 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;**캐싱 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: CDN에서 캐싱은 크게 &lt;b&gt;정적(Static) 캐싱&lt;/b&gt;과 &lt;b&gt;동적(Dynamic) 캐싱&lt;/b&gt;으로 나눌 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 가지 방식은 각각의 콘텐츠 유형과 특성에 맞추어 최적화된 방법으로 캐시를 관리합니다.&lt;/span&gt;&lt;/p&gt;
&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;*정적(Static) 캐싱&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: &lt;b&gt;정적 캐싱&lt;/b&gt;은 자주 변하지 않는 콘텐츠를 캐시에 저장하는 방식입니다. 정적 콘텐츠는 일반적으로 변경 빈도가 낮고, 여러 사용자에게 동일한 형태로 제공되는 파일들입니다.(ex. 이미지, HTML, CSS 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 변경 빈도가 낮음: 콘텐츠가 자주 변경되지 않아, 한 번 캐시에 저장되면 오랜 기간 동안 유효하게 사용할 수 있습니다.&lt;br /&gt;- TTL 설정: Cache-Control 헤더를 통해 TTL(Time To Live)을 길게 설정하여, 캐시된 콘텐츠가 오랜 시간 동안 유지되도록 합니다.&lt;br /&gt;&amp;nbsp;- 고정된 URL: 정적 파일의 URL이 변경되지 않으므로, 캐시 히트를 통해 빠르게 제공됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 속도 향상: 자주 요청되는 콘텐츠를 캐시에서 즉시 제공하여 로딩 시간 감소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버 부하 감소: 원본 서버로의 요청이 줄어들어 서버 부하를 감소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일관성 유지: 동일한 콘텐츠가 여러 사용자에게 일관되게 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*동적(Dynamic) 캐싱&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: &lt;b&gt;동적 캐싱&lt;/b&gt;은 자주 변경되는 콘텐츠를 캐시에 저장하는 방식입니다. 동적 콘텐츠는 사용자의 요청에 따라 실시간으로 생성되거나 변경되며, 사용자별로 다를 수 있는 데이터입니다. (ex. 실시간 뉴스, 주식, 쇼핑몰 추천 목록 등 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 변경 빈도가 높음: 콘텐츠가 자주 변경되어 캐시의 유효 기간을 짧게 설정하거나, 조건부 요청을 통해 최신 상태를 유지합니다.&lt;br /&gt;- 조건부 요청 사용: ETag 또는 Last-Modified 헤더를 사용하여, 콘텐츠가 변경된 경우에만 캐시를 갱신합니다.&lt;br /&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;br /&gt;- 최신 상태 유지: 조건부 요청을 통해 항상 최신 콘텐츠를 제공&lt;br /&gt;- 서버 부하 감소: 동적 콘텐츠도 캐시를 통해 서버 부하를 줄일 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1-2. PoP(Point of Presence)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PoP는 CDN의 네트워크 인프라의 일부로, 지리적으로 분산된 데이터 센터를 의미합니다. 각 PoP는 여러 캐시 서버를 포함하며, 사용자와 가까운 위치에서 콘텐츠를 제공하여 네트워크 지연 시간을 최소화합니다.&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;span style=&quot;color: #000000;&quot;&gt;지연 시간 감소: 사용자와 가까운 PoP에서 콘텐츠를 제공하여 네트워크 지연 시간을 최소화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;트래픽 분산: 전 세계에 분산된 PoP를 통해 트래픽을 분산시켜 네트워크 혼잡을 완화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지역 최적화: 각 지역의 네트워크 조건과 사용자 요구에 맞춰 최적화된 서비스를 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;확장성: PoP를 추가하여 네트워크 용량을 확장하고, 급증하는 트래픽을 효율적으로 처리 가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1-3. Edge 서버&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Edge 서버는 CDN에서 사용자와 가까운 위치에 배치되어 콘텐츠를 제공하는 서버입니다. PoP 내에 위치하거나 PoP 자체를 지칭하기도 하며, 사용자 요청을 처리하는 첫 번째 지점입니다. Edge 서버는 캐시된 콘텐츠를 통해 빠르게 사용자에게 데이터를 전달합니다.&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;span style=&quot;color: #000000;&quot;&gt;콘텐츠 캐싱: 자주 요청되는 콘텐츠를 캐싱하여 빠르게 제공.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지연 시간 감소: 사용자와 지리적으로 가까운 위치에 배치되어 데이터 전송 거리 최소화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;트래픽 분산: 트래픽을 분산시켜 네트워크 혼잡을 완화하고, 서버 과부하를 방지&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지역 최적화: 특정 지역의 네트워크 조건과 사용자 요구에 맞춘 최적화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보안 강화: DDoS 공격 방어, SSL 암호화 등 보안 기능을 수행하여 원본 서버를 보호하고 사용자 데이터를 안전하게 전송&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 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 작동 방식&lt;/span&gt;&lt;/h2&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/bkntx1/btsIj7uO0uB/TKnG2QE9MAYKrXWK9x8J51/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkntx1/btsIj7uO0uB/TKnG2QE9MAYKrXWK9x8J51/img.webp&quot; data-widthpercent=&quot;39.4&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;924&quot; data-origin-width=&quot;1068&quot; style=&quot;width: 38.9418%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkntx1/btsIj7uO0uB/TKnG2QE9MAYKrXWK9x8J51/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkntx1%2FbtsIj7uO0uB%2FTKnG2QE9MAYKrXWK9x8J51%2Fimg.webp&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;1068&quot; height=&quot;924&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SbAIF/btsIhwJ45hF/dM9T3YGrZrWQpO6Ro4wTJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SbAIF/btsIhwJ45hF/dM9T3YGrZrWQpO6Ro4wTJK/img.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot; data-is-animation=&quot;false&quot; style=&quot;width: 59.8954%;&quot; data-widthpercent=&quot;60.6&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SbAIF/btsIhwJ45hF/dM9T3YGrZrWQpO6Ro4wTJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSbAIF%2FbtsIhwJ45hF%2FdM9T3YGrZrWQpO6Ro4wTJK%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;1440&quot; height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;(좌)https://www.hostinger.com/tutorials/wp-content/uploads/sites/2/2019/01/how-does-a-CDN-work-1-1024x886.webp (우)https://www.akamai.com/site/en/images/article/2023/what-is-a-cdn.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CDN은 위에서 언급한 것처럼, 결과적으로는 사용자에게 빠르고 효율적으로 콘텐츠를 전달하기 위해 서비스입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 위한 CDN 동작 방식을 예시와 함께 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들어, A 사용자가 한국에서 미국에 있는 웹 사이트(taknhyen.com)에 접속하여 고화질 동영상을 스트리밍 하려고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;a. 사용자 요청 (User Request)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 사용자 A는 브라우저를 열고 &lt;span style=&quot;text-align: start;&quot;&gt;taknhyen&lt;/span&gt;.com에 접속하여 고화질 동영상을 스트리밍 하기 위해 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;b. DNS 요청 (DNS Request)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 사용자 A의 브라우저는 &lt;span style=&quot;text-align: start;&quot;&gt;taknhyen&lt;/span&gt;.com의 IP 주소를 찾기 위해 DNS 서버에 요청을 보냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- DNS 서버는 &lt;span style=&quot;text-align: start;&quot;&gt;taknhyen.&lt;/span&gt;com의 IP 주소를 확인하고, 가장 가까운 PoP(Point of Presence)를 찾기 위해 CDN의 DNS 서버로 요청을 전달합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;c. 가장 가까운 PoP 선택 (Selecting the Closest PoP)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- CDN의 DNS 서버는 사용자 A의 위치를 기반으로 가장 가까운 PoP를 선택합니다. 사용자 A는 한국 서울에 있으므로, 서울에 있는 PoP가 선택됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- DNS 서버는 사용자 A의 브라우저에 서울 PoP의 IP 주소를 반환합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;d. PoP의 Edge 서버에서 캐시 확인 (Cache Checking at PoP's Edge Server)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 사용자 A의 브라우저는 서울 PoP의 Edge 서버에 콘텐츠 요청을 보냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 서울 PoP의 Edge 서버는 요청된 고화질 동영상이 캐시에 있는지 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;e. (&lt;b&gt;상황 1&lt;/b&gt;) 캐시 적중 (Cache Hit)&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;: 만약 고화질 동영상이 서울 PoP의 Edge 서버에 이미 캐시 되어 있다면, Edge 서버는 즉시 동영상을 사용자 A에게 스트리밍 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 사용자 A는 서울 PoP의 Edge 서버로부터 고화질 동영상을 빠르게 스트리밍 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;e. &lt;b&gt;(&lt;b&gt;상황 2&lt;/b&gt;) &lt;/b&gt;캐시 미스 (Cache Miss)&lt;/b&gt; : 만약 고화질 동영상이 서울 PoP의 Edge 서버에 없다면, Edge 서버는 미국에 있는 원본 서버(Origin Server)로부터 동영상을 가져와야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 서울 PoP의 Edge 서버는 미국의 원본 서버에 요청을 보내 고화질 동영상을 다운로드합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 원본 서버는 요청된 동영상을 서울 PoP의 Edge 서버로 전송합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;f. 콘텐츠 전달 (Content Delivery)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 서울 PoP의 Edge 서버는 원본 서버로부터 받은 동영상을 캐시에 저장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 저장된 동영상을 사용자 A에게 스트리밍 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 사용자 A는 원본 서버에서 가져온 동영상을 서울 PoP의 Edge 서버를 통해 스트리밍 하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;g. 추가 요청 처리 (Handling Subsequent Requests)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 이후 다른 사용자들이 같은 고화질 동영상을 요청하면, 서울 PoP의 Edge 서버에 캐시 된 동영상을 빠르게 제공할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 이를 통해 대기 시간이 줄어들고, 서버 부하가 분산됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위와 같은 단계를 통해 CDN 서비스를 제공합니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;지금까지 CDN의 개념과 작동 방식에 대해 함께 살펴보았습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음 포스팅에서는 &lt;b&gt;&quot;CDN 활용편&quot;으로&lt;/b&gt; 찾아뵐게요!&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; 의견을 자유롭게 댓글로 남겨주세요. &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;감사합니다:)&lt;/span&gt;  &lt;/p&gt;</description>
      <category>TOPIC/General</category>
      <category>caching</category>
      <category>CDN</category>
      <category>cloud</category>
      <category>Content Delivery Network</category>
      <category>edge 서버</category>
      <category>pop(point of presence)</category>
      <category>캐싱</category>
      <category>콘텐츠 전송 네트워크</category>
      <category>클라우드 서비스</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/56</guid>
      <comments>https://with-cloud.tistory.com/56#entry56comment</comments>
      <pubDate>Mon, 1 Jul 2024 14:48:38 +0900</pubDate>
    </item>
    <item>
      <title>#2 Docker 그리고 Docker Network</title>
      <link>https://with-cloud.tistory.com/55</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이번 포스팅은 Docker Network에 알아보겠습니다!&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;#1 Dcoker의 개념과 구조&lt;/b&gt;&lt;/span&gt;에 대한 글을 읽으시면, 이번 주제를 팔로우하는 데 도움이 되실 거예요.&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717395341271&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;#1 Docker 그리고 Docker Network&quot; data-og-description=&quot;안녕하세요.&amp;nbsp;TAK&amp;nbsp;입니다:)&amp;nbsp;날이 점점 더워지고 있는 요즘입니다 &amp;nbsp;이번 포스팅의 주제로 Docker 그리고&amp;nbsp;Docker Network를 준비하였습니다 (아무래도 Docker 개념을 선행하는 것이 Network 영역을 이&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/54&quot; data-og-url=&quot;https://with-cloud.tistory.com/54&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pRDuo/hyWdmzzcJi/AzkgpS0hrOhhL00kJuDbqk/img.jpg?width=800&amp;amp;height=562&amp;amp;face=0_0_800_562,https://scrap.kakaocdn.net/dn/pI7er/hyWdm0CJ9J/LYnReHb3pk4DlxQWrbwQx1/img.jpg?width=800&amp;amp;height=562&amp;amp;face=0_0_800_562,https://scrap.kakaocdn.net/dn/bmG4br/hyWdoKTjcf/EzBbEcSU0xkVGQDPgXf8gk/img.png?width=1428&amp;amp;height=1188&amp;amp;face=0_0_1428_1188&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/54&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/54&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pRDuo/hyWdmzzcJi/AzkgpS0hrOhhL00kJuDbqk/img.jpg?width=800&amp;amp;height=562&amp;amp;face=0_0_800_562,https://scrap.kakaocdn.net/dn/pI7er/hyWdm0CJ9J/LYnReHb3pk4DlxQWrbwQx1/img.jpg?width=800&amp;amp;height=562&amp;amp;face=0_0_800_562,https://scrap.kakaocdn.net/dn/bmG4br/hyWdoKTjcf/EzBbEcSU0xkVGQDPgXf8gk/img.png?width=1428&amp;amp;height=1188&amp;amp;face=0_0_1428_1188');&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;#1 Docker 그리고 Docker Network&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요.&amp;nbsp;TAK&amp;nbsp;입니다:)&amp;nbsp;날이 점점 더워지고 있는 요즘입니다 &amp;nbsp;이번 포스팅의 주제로 Docker 그리고&amp;nbsp;Docker Network를 준비하였습니다 (아무래도 Docker 개념을 선행하는 것이 Network 영역을 이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.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 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그럼 바로 시작하겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;019&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/019.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/019.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Docker Network&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. Docker Network 란?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Docker Network는 Container 간, 그리고 컨테이너 외부 네트워크 간의 통신을 가능케 하여 이를 관리하고 격리하기 위한 기능 제공합니다. 이를&amp;nbsp;통해&amp;nbsp;다양한&amp;nbsp;네트워크&amp;nbsp;환경에서&amp;nbsp;컨테이너화된&amp;nbsp;애플리케이션을&amp;nbsp;효과적으로&amp;nbsp;배포하고&amp;nbsp;관리할&amp;nbsp;수&amp;nbsp;있습니다.&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;제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2. Docker Network Drivers의 종류&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 아래 네트워크 드라이버의 경우, Native Driver 입니다. (Remote Driver는 3rd Patry Driver를 의미합니다.)&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;1273&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sQlgk/btsHMyuKwjp/BN1Y5nZKcVwzlQWnGKP91K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sQlgk/btsHMyuKwjp/BN1Y5nZKcVwzlQWnGKP91K/img.png&quot; data-alt=&quot;https://media.licdn.com/dms/image/D4D12AQEtEBjpPLradw/article-cover_image-shrink_600_2000/0/1656643165785?e=2147483647&amp;amp;amp;v=beta&amp;amp;amp;t=9Sp6nUvVgoxsdNfthGN8eLslgpKmUkNCCMm07a4RGFs&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sQlgk/btsHMyuKwjp/BN1Y5nZKcVwzlQWnGKP91K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsQlgk%2FbtsHMyuKwjp%2FBN1Y5nZKcVwzlQWnGKP91K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1273&quot; height=&quot;543&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://media.licdn.com/dms/image/D4D12AQEtEBjpPLradw/article-cover_image-shrink_600_2000/0/1656643165785?e=2147483647&amp;amp;v=beta&amp;amp;t=9Sp6nUvVgoxsdNfthGN8eLslgpKmUkNCCMm07a4RGFs&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;861&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfDRnu/btsHNyAGNmY/gUf4KzfxceFbnJKFWyveAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfDRnu/btsHNyAGNmY/gUf4KzfxceFbnJKFWyveAK/img.png&quot; data-alt=&quot;https://miro.medium.com/v2/resize:fit:1400/format:webp/1*WKiEgPXO8XXppoqgr7ZVQA.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfDRnu/btsHNyAGNmY/gUf4KzfxceFbnJKFWyveAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfDRnu%2FbtsHNyAGNmY%2FgUf4KzfxceFbnJKFWyveAK%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;1400&quot; height=&quot;861&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;861&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://miro.medium.com/v2/resize:fit:1400/format:webp/1*WKiEgPXO8XXppoqgr7ZVQA.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Bridge Network&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Bridge Network는 Docker가 기본적으로 사용하는 네트워크 드라이버입니다. 이는 Docker 호스트 내에서 격리된 네트워크를 형성하며, 주로 단일 호스트에서 여러 컨테이너를 연결하는 데 사용됩니다. &lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;'docker0'라는 가상 브리지 인터페이스를 사용하여 컨테이너를 연결합니다. 동일한 브리지 네트워크에 있는 컨테이너는 서로 통신할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단일 서버에서 여러 컨테이너로 구성된 애플리케이션을 실행할 때 유용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너의 포트를 호스트의 포트에 매핑하여 외부 통신이 가능합니다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1719209636004&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# 새로운 드라이버(Bridge) 생성
docker network create --driver bridge my_bridge_network

#container1(nginx)과 container2(redis)가 같은 Bridge 네트워크를 통해 서로 통신 가능
docker run -d --name container1 --network my_bridge_network nginx
docker run -d --name container2 --network my_bridge_network redis&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Host Network&lt;br /&gt;&lt;/b&gt;: Host Network는 컨테이너가 Docker 호스트의 네트워크 스택을 직접 사용하도록 합니다. 이 경우, 컨테이너는 별도의 네트워크 네임스페이스를 가지지 않고, 호스트와 동일한 네트워크 인터페이스를 공유합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너가 호스트 네트워크 스택을 사용하므로, 네트워크 성능이 향상되지만 네트워크 격리가 줄어듭니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;성능이 중요한 경우나, 호스트 네트워크와 완전한 통합이 필요한 경우에 사용됩니다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1719209658819&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# nginx 컨테이너가 호스트 네트워크 스택을 직접 사용 
docker run -d --network host nginx&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;None Network&lt;br /&gt;&lt;/b&gt;: None Network는 네트워크가 전혀 연결되지 않은 상태로 컨테이너를 실행하는 네트워크 모드입니다. &amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 인터페이스가 없으며, 외부와의 통신이 불가능합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크가 필요 없는 작업(예: 로컬 파일 작업이나 CPU 집약적인 작업)을 수행할 때 유용합니다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1719209706040&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d --name isolated_container --network none nginx&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Overlay Network&lt;br /&gt;&lt;/b&gt;&lt;b&gt;: Overlay Network는 여러 Docker 호스트에서 실행되는 컨테이너를 연결하는 데 사용됩니다. 이는 Docker Swarm이나 Kubernetes 같은 오케스트레이션 도구와 함께 사용됩니다. &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 Docker 데몬(호스트)에서 실행되는 컨테이너를 연결할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VXLAN(Virtual Extensible LAN)을 사용하여 네트워크 패킷을 터널링 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(이는 물리적 네트워크 상에 논리적 네트워크를 구축하여, 여러 호스트에 걸친 네트워크를 형성합니다.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 호스트가 외부 네트워크와 통신할 수 있으며, 오버레이 네트워크를 통해 다른 호스트의 컨테이너와도 통신할 수 있습니다. 이는 다중 호스트 환경에서 마이크로서비스 아키텍처를 구축할 때 사용됩니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1717479791693&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;docker network create -d overlay my_overlay_network
docker service create --name my_service --network my_overlay_network nginx&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-3. 구조 및 내역&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;739&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Co7fG/btsHNET5O6R/g8vHKS4iaHrKDeCU039stk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Co7fG/btsHNET5O6R/g8vHKS4iaHrKDeCU039stk/img.png&quot; data-alt=&quot;좌 : Default Network(docker0)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Co7fG/btsHNET5O6R/g8vHKS4iaHrKDeCU039stk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCo7fG%2FbtsHNET5O6R%2Fg8vHKS4iaHrKDeCU039stk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;461&quot; height=&quot;572&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;739&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;좌 : Default Network(docker0)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker Network는 위 그림과 같은 구조를 가집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각각의 요소들은 호스트(192.168.0)와 컨테이너(172.17.0) 사이의 네트워킹을 관리하는 요소로 연결 및 통신을 위한 역할은 다음과 같습니다.&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;span style=&quot;color: #000000;&quot;&gt;(Host) eth0&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Host Ethernet Interface는 쉽게 표현하면 (물리적) 랜카드입니다. eth0의 0은 Interface의 인덱스(번호)를 나타내며, 기본적으로 eth0에서 순차적으로 증가합니다. 이는 컴퓨터의 네트워크 연결을 나타내며, 호스트 시스템의 네트워크 스택과 직접 상호 작용합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;호스트 eth0은 호스트 시스템에서 수신된 모든 네트워크 패킷을 처리하고, 이를 컨테이너로 전달하거나 컨테이너에서 수신된 패킷을 호스트 시스템으로 라우팅 합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Bridge&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 앞서 설명한 호스트와 컨테이너 간의 통신을 중개하는 역할을 합니다. 즉, 브리지는 네트워크의 물리적인 및 가상적인 부분을 연결하는 네트워크 장치입니다. 도커에서는 도커 엔진이 자동으로 생성하는 가상 스위치로 사용됩니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 브리지는 호스트의 네트워크와 컨테이너 간의 통신을 중개합니다. 브리지는 물리적 네트워크와 가상 이더넷 인터페이스인 veth 쌍을 연결하여 통신을 관리합니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;veth&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Virtual Ethernet Interface로 일종의 가상 랜카드 역할을 수행합니다. veth는 컨테이너와 브리지 사이의 가상 이더넷(Container eth0) 연결입니다. &lt;b&gt;veth 쌍은 컨테이너 내부와 호스트의 네트워크 네임스페이스 사이에 생성&lt;/b&gt;됩니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;각 컨테이너가 생성될 때, Bridge(docker0)와 바인딩 - Container 내부 eth0라는 이름으로 veth인터페이스와 연결&lt;/b&gt;됩니다. 즉, veth 쌍 중 하나는 컨테이너 내부의 네트워크 네임스페이스에 연결되고, 다른 하나는 브리지에 연결됩니다. 이를 통해 컨테이너와 호스트 네트워크 사이에 패킷이 전달되어 컨테이너는 외부와 통신할 수 있습니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(이는 일반적인 NI와 달리, 패킷을 전달받으면 자신에게 연결된 다른 NI로 패킷을 보내는 식으로 동작하기에 항상 쌍으로 생성해줘야 합니다.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Container) eth0&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 컨테이너 eth0은 컨테이너 내부의 네트워크 인터페이스를 나타냅니다. 컨테이너 내에서 실행되는 응용 프로그램은 이 인터페이스를 사용하여 네트워크 통신을 합니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너 eth0은 해당 컨테이너의 네트워크 스택과 연결되어 있으며, 컨테이너 내부의 IP 주소 및 네트워크 설정을 관리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우측에는 my_bridge라는 새로운 Bridge를 만들었으며, Defaut 대역이 아닌 10.0.~ 대역을 사용하고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 docker0 Bridge와는 서로 다른 대역을 가지고 있으며,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4. Sample&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 앞서 설명한 내용들을 바탕으로 실제 Docker Network 의 구성 사항들을 살펴보고, 몇 가지 구조 기반 테스트를 해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Host 정보 확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Host 시스템의 NIC(네트워크 인터페이스) 정보를 확인해 보겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 Host의 네트워크 인터페이스를 나타내는 eth0 경우, &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure VNet(192.168.11.0/24)의 서브넷 192.168.11.0/28(192.168.11.0 - 192.168.11.15) 대역을 사용하고 있으며, 해당 VM은 Private IP(&lt;span style=&quot;text-align: left;&quot;&gt;192.168.11.4)&lt;/span&gt; 를 할당받은 상태입니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker 설치 시, Default 네트워크인 Bridge(docker0)의 경우, 172.17.0.0/24 대역을 사용하고 있음을 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1953&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cp7wKc/btsHPgmm8QM/bEPMLDcD0mbB8mVyKWXetk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cp7wKc/btsHPgmm8QM/bEPMLDcD0mbB8mVyKWXetk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cp7wKc/btsHPgmm8QM/bEPMLDcD0mbB8mVyKWXetk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcp7wKc%2FbtsHPgmm8QM%2FbEPMLDcD0mbB8mVyKWXetk%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;1953&quot; height=&quot;636&quot; data-origin-width=&quot;1953&quot; data-origin-height=&quot;636&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;1256&quot; data-origin-height=&quot;1046&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blGOMA/btsHQgTnXa0/0pkrM7lAwt8aEwifATxLp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blGOMA/btsHQgTnXa0/0pkrM7lAwt8aEwifATxLp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blGOMA/btsHQgTnXa0/0pkrM7lAwt8aEwifATxLp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblGOMA%2FbtsHQgTnXa0%2F0pkrM7lAwt8aEwifATxLp0%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;1256&quot; height=&quot;1046&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;1046&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker Network 확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Docker 엔진에서 사용 가능한 모든 네트워크 설정을 확인해 보겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfUJuc/btsHPdcjLJ4/OesSdwnew0KZacQsA5h3n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfUJuc/btsHPdcjLJ4/OesSdwnew0KZacQsA5h3n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfUJuc/btsHPdcjLJ4/OesSdwnew0KZacQsA5h3n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfUJuc%2FbtsHPdcjLJ4%2FOesSdwnew0KZacQsA5h3n1%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;789&quot; height=&quot;163&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후, 아래 명령어는 통해 bridge의 상제 네트워크 정보를 확인해 보겠습니다.&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1717566080431&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;docker network inspect &amp;lt;network_name_or_id&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/dg3bYd/btsHPGE4zXK/f2Y1gVNkflubc2xm3T6tHK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;1193&quot; data-origin-width=&quot;1384&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Default 네트워크 드라이버이기에 별 다른 설정 없이 컨테이너를 생성한다면, 해당 Bridge(docker0)를 사용합니다. 또한, 서브넷 대역(172.17.0.0/16) 의 IP를 실행되는 컨테이너에 &lt;b&gt;순차적으로 할당&lt;/b&gt;합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이전 배포된 컨테이너의 네트워크 확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: &lt;a style=&quot;color: #000000;&quot; href=&quot;https://with-cloud.tistory.com/54&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#1&lt;/a&gt;에서 마지막에 배포한 컨테이너의 네트워크 정보를 확인해 보겠습니다.&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1717566936845&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# 현재 컨테이너 실행 중인지 확인
docker ps 

# 만약, 아무것도 나오지 않는다면, 현재 실행중인 상태가 아니므로
# 아래 명령어를 통해 전체 컨테이너 목록 확인
docker ps -a

# status가 'exited'라면, 아래 명령어 사용하며 (재)실행
docker (re)start &amp;lt;container_id_or_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우선, 아래 명령어를 통해서 네트워크 설정을 확인해 보면 다음과 같습니다.&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1717567067679&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# 출력값 중, NetworkSettings 만 확인
docker inspect &amp;lt;container_id_or_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/wITfr/btsHPnsiLgd/OSWuUghLL25rzW9novuazk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;1420&quot; data-origin-width=&quot;1842&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 실행 중인 컨테이너 내부에서 확인한다면 다음과 같습니다.&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1717568412094&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# container 접속
docker exec -it &amp;lt;container_id_or_name&amp;gt; /bin/bash

# ip addr or ifconfig 명령어 사용하여 확인
# 172.17.0.1인 GW IP로 172.17.0.2부터 순차적으로 컨테이너에 IP 할당&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/baNw3p/btsHOYmfPUz/NHuWsN73otlxHvtV3U4cHK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;505&quot; data-origin-width=&quot;1047&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게, Default 네트워크인 Bridge(docker0) 드라이버를 사용하는 네트워크 구성을 살펴보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이어서 &lt;b&gt;TEST 1 &amp;amp; TEST 2&lt;/b&gt; 를 통해서 네트워크 구성을 다각화해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;**TEST 1&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 이번 테스트는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;서로 다른 네트워크를 사용하여 격리된 컨테이너 간의 네트워크 테스트를 진행하고(Step1), Bridge에 veth 연결을 통해 격리된 컨테이너 간 네트워크 연결을 통해 통신이 가능(Step2)&lt;/span&gt;&lt;/b&gt;하도록 진행해 보겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;my_bridge라는 새로운 Bridge 네트워크 드라이버를 생성하고, &quot;10.0.0.0/24&quot; 대역에서 &quot;10.0.0.254&quot; IP를 db 컨테이너에 할당해 보겠습니다. 이후, 해당 &lt;span style=&quot;text-align: start;&quot;&gt;Bridge 에 web 컨테이너를 연결하는 과정입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sKFuZ/btsHMzm4srr/FvC6CSCb8BblCmdVWN8631/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sKFuZ/btsHMzm4srr/FvC6CSCb8BblCmdVWN8631/img.png&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;490&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4532%; margin-right: 10px;&quot; data-widthpercent=&quot;50.04&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sKFuZ/btsHMzm4srr/FvC6CSCb8BblCmdVWN8631/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsKFuZ%2FbtsHMzm4srr%2FFvC6CSCb8BblCmdVWN8631%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;785&quot; height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYwSqw/btsHPxuMrbu/Bhd6JNV1pa80LiyDRu3px0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYwSqw/btsHPxuMrbu/Bhd6JNV1pa80LiyDRu3px0/img.png&quot; data-origin-width=&quot;1579&quot; data-origin-height=&quot;987&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.384%;&quot; data-widthpercent=&quot;49.96&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYwSqw/btsHPxuMrbu/Bhd6JNV1pa80LiyDRu3px0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYwSqw%2FbtsHPxuMrbu%2FBhd6JNV1pa80LiyDRu3px0%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;1579&quot; height=&quot;987&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;좌 : Step1 우 : Step2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 드라이버 생성&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 아래 명령어를 통해 my_bridge라는 네트워크 드라이버를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1717575137107&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker network create \
  --driver=bridge \
  --subnet=10.0.0.0/24 \
  --gateway=10.0.0.1 \
 my_bridge&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;1027&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crA9Eg/btsHPeJfYo3/0ZjCqWPwML0K4t4P90pvw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crA9Eg/btsHPeJfYo3/0ZjCqWPwML0K4t4P90pvw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crA9Eg/btsHPeJfYo3/0ZjCqWPwML0K4t4P90pvw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrA9Eg%2FbtsHPeJfYo3%2F0ZjCqWPwML0K4t4P90pvw0%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;1027&quot; height=&quot;176&quot; data-origin-width=&quot;1027&quot; data-origin-height=&quot;176&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;1459&quot; data-origin-height=&quot;1049&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GxOqL/btsHQBJYgwn/tAqtSWnxDQWmw22w8NfP7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GxOqL/btsHQBJYgwn/tAqtSWnxDQWmw22w8NfP7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GxOqL/btsHQBJYgwn/tAqtSWnxDQWmw22w8NfP7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGxOqL%2FbtsHQBJYgwn%2FtAqtSWnxDQWmw22w8NfP7K%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;1459&quot; height=&quot;1049&quot; data-origin-width=&quot;1459&quot; data-origin-height=&quot;1049&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후. db 컨테이너(mariadb 이미지)를 실행하여 네트워크 통신 테스트를 진행해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;db 컨테이너(mariadb 이미지)를 생성 및 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1717575929646&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 네트워크(my_bridge)와 IP(10.0.0.254) 지정
# 'MYSQL_ROOT_PASSWORD' 지정하지 않으면, 배포 및 실행 불가
docker run -d --name db --network=my_bridge --ip=10.0.0.254 -e MYSQL_ROOT_PASSWORD=tak_password mariadb&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;2109&quot; data-origin-height=&quot;189&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EpN9b/btsHQ21zezX/otytkxYqXoMCJHsH1MO7wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EpN9b/btsHQ21zezX/otytkxYqXoMCJHsH1MO7wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EpN9b/btsHQ21zezX/otytkxYqXoMCJHsH1MO7wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEpN9b%2FbtsHQ21zezX%2FotytkxYqXoMCJHsH1MO7wk%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;2109&quot; height=&quot;189&quot; data-origin-width=&quot;2109&quot; data-origin-height=&quot;189&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;db 컨테이너 네트워크 정보 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1550&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FP00U/btsHQzrULcE/FlW8i5XAYD6MDDq8o6d30K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FP00U/btsHQzrULcE/FlW8i5XAYD6MDDq8o6d30K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FP00U/btsHQzrULcE/FlW8i5XAYD6MDDq8o6d30K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFP00U%2FbtsHQzrULcE%2FFlW8i5XAYD6MDDq8o6d30K%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;1550&quot; height=&quot;348&quot; data-origin-width=&quot;1550&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;web 컨테이너(앞서 구성한 Flask 앱)의 통신 테스트&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 해당 컨테이너에 할당된 IP는 172.17.0.2 이며, 서로 다른 네트워크로 격리된 컨테이너 간에 통신이 불가합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n65OC/btsHPYFSRNr/VNJRj38PGpMdJJ75VnlwKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n65OC/btsHPYFSRNr/VNJRj38PGpMdJJ75VnlwKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n65OC/btsHPYFSRNr/VNJRj38PGpMdJJ75VnlwKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn65OC%2FbtsHPYFSRNr%2FVNJRj38PGpMdJJ75VnlwKk%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;1235&quot; height=&quot;200&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제 Step2 로 넘어가 my_bridge라는 네트워크 드라이버에 web 컨테이너를 연결해 보도록 하겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Bridge 네트워크 드라이버는 여러 컨테이너와 연결이 가능함을 앞서 설명드렸습니다. 이는 실행 중인 컨테이너도 연결이 가능합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 드라이버와 컨테이너 연결&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1717577017269&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker network connect &amp;lt;docker network ID or Name&amp;gt; &amp;lt;container ID or Name&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;2104&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nZAZf/btsHPXmI5Or/FGE7Y6P62qJD9biYukiQq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nZAZf/btsHPXmI5Or/FGE7Y6P62qJD9biYukiQq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nZAZf/btsHPXmI5Or/FGE7Y6P62qJD9biYukiQq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnZAZf%2FbtsHPXmI5Or%2FFGE7Y6P62qJD9biYukiQq1%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;2104&quot; height=&quot;136&quot; data-origin-width=&quot;2104&quot; data-origin-height=&quot;136&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;web 컨테이너의 네트워크 정보 확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: my_bridge 네트워크 드라이버에 설정한 네트워크 대역(10.0.0.0/24) 에서 순차적으로 IP를 할당받음을 확인(GW IP 10.0.0.1 제외)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1461&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OT22K/btsHQTwUR0m/LMpdixoxIdIQ6Eydb3QVxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OT22K/btsHQTwUR0m/LMpdixoxIdIQ6Eydb3QVxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OT22K/btsHQTwUR0m/LMpdixoxIdIQ6Eydb3QVxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOT22K%2FbtsHQTwUR0m%2FLMpdixoxIdIQ6Eydb3QVxk%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;1461&quot; height=&quot;742&quot; data-origin-width=&quot;1461&quot; data-origin-height=&quot;742&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 통신 확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: (db 컨테이너 &amp;gt; web 컨테이너) 172.17.0.2와 같은 특정 IP을 지정하지 않고, 컨테이너 자체로 ping 테스트&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg3DOB/btsHPW89fbG/WFMLc77a5AxYkNG4nHX9C0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg3DOB/btsHPW89fbG/WFMLc77a5AxYkNG4nHX9C0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg3DOB/btsHPW89fbG/WFMLc77a5AxYkNG4nHX9C0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg3DOB%2FbtsHPW89fbG%2FWFMLc77a5AxYkNG4nHX9C0%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;1424&quot; height=&quot;345&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Test 1을 통해서, 서로 다른 네트워크 환경을 구성하고 컨테이너의 격리와 연결 여부를 테스트하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;**TEST 2&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 이번에는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;하나의 네트워크 드라이브에서 2-Tier 애플리케이션을 구성하여 동작 과정&lt;/span&gt;&lt;/b&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;2000&quot; data-origin-height=&quot;1583&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgKnJz/btsH5vCwkGN/mreu1CKSZW8M8X6HkZcki0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgKnJz/btsH5vCwkGN/mreu1CKSZW8M8X6HkZcki0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgKnJz/btsH5vCwkGN/mreu1CKSZW8M8X6HkZcki0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgKnJz%2FbtsH5vCwkGN%2Fmreu1CKSZW8M8X6HkZcki0%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;2000&quot; height=&quot;1583&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1583&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;신규 Bridge 생성&lt;br /&gt;: 특정 네트워크 대역을 위해 생성합니다. 만약, 특정값이 필요하지 않다면, docker-compose.yml 의 네트워크 이름과 driver 종류를 입력하면 임의값으로 생성됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1717734505109&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker network create \
  --driver=bridge \
  --subnet=10.11.12.0/24 \
  --gateway=10.11.12.1 \
 3tier_bridge&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;1195&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ucNv9/btsIblNpcgg/eYdYg3lLGwYniKWbqd5IkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ucNv9/btsIblNpcgg/eYdYg3lLGwYniKWbqd5IkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ucNv9/btsIblNpcgg/eYdYg3lLGwYniKWbqd5IkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FucNv9%2FbtsIblNpcgg%2FeYdYg3lLGwYniKWbqd5IkK%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;1195&quot; height=&quot;456&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;456&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;디렉터리 구조&lt;br /&gt;: 애플리케이션 배포를 위해 스크립트를 포함한 필요한 디렉터리 구조아 소스 코드 구성을 다음과 같습니다.&lt;br /&gt;&lt;br /&gt;이번 포스팅에서는 소스 코드에 대한 내용보다는 Docker 관련 파일 내용에 집중합니다.&lt;br /&gt;&lt;br /&gt;상세 소스 코드는 제 &lt;b&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://github.com/BaekSeongTak/docker-flask-app.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Github&lt;/a&gt;&lt;/b&gt;에 확인하실 수 있습니다!!&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lTBbr/btsIbkBbLfj/uMoaYX3Kb5KFsVhLMFbQZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lTBbr/btsIbkBbLfj/uMoaYX3Kb5KFsVhLMFbQZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lTBbr/btsIbkBbLfj/uMoaYX3Kb5KFsVhLMFbQZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlTBbr%2FbtsIbkBbLfj%2FuMoaYX3Kb5KFsVhLMFbQZ1%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;865&quot; height=&quot;661&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;661&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker-compose.yml&lt;br /&gt;: docker-compose.yml 파일은 여러 도커 컨테이너를 정의하고 관리하는 데 사용되는 YAML 형식의 파일입니다. 이 파일을 사용하면 여러 컨테이너를 손쉽게 설정하고 동시에 시작할 수 있습니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Sample&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1719206829324&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# Compose 파일의 버전 지정
# 더 이상 docker-compose 파일에 버전을 명시할 필요가 없음.
# 만약 명시하다면, 'version' is obsolete 라는 경고 문구 확인 됨.(배포는 정상적으로 진행)
version: '3.*'  

services:  # 관리할 서비스(컨테이너) 정의
  service_name:  # 서비스 이름
    image: image_name:tag  # 사용할 Docker 이미지
    build:  # 빌드 옵션 (이미지를 직접 빌드할 때 사용)
      context: .  # Dockerfile의 경로
      dockerfile: Dockerfile  # 사용할 Dockerfile의 이름
    ports:  # 호스트와 컨테이너 간의 포트 매핑
      - &quot;host_port:container_port&quot;
    volumes:  # 호스트와 컨테이너 간의 볼륨 매핑
      - host_path:container_path
    environment:  # 환경 변수 설정
      - ENV_VAR_NAME=value
    depends_on:  # 이 서비스가 의존하는 다른 서비스
      - other_service_name
    networks:  # 이 서비스가 연결될 네트워크
      - network_name

networks:  # 네트워크 정의
  network_name:
    driver: bridge  # 네트워크 드라이버 (예: bridge, overlay 등)

volumes:  # 볼륨 정의
  volume_name:
    driver: local  # 볼륨 드라이버 (예: local)&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 적용한 .yml 파일&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Flask와 MySQL 를 포함하는 2개 이상의 컨테이너는 배포 시, 유용하게 사용 가능.&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1719206701707&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;services:
  app:
    container_name: my-flask-app
    build:
      context: ./flask
      dockerfile: Dockerfile
    ports: # 호스트의 5000번 포트를 컨테이너의 5000번 포트에 매핑
      - &quot;5000:5000&quot;
    environment: # .evn라는 환경변수 파일에서 값을 가져옴.
      MYSQL_HOST: ${MYSQL_HOST}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - ./flask/app:/app/app
    depends_on:
      - db
    networks:
      - 2tier_bridge

  db:
    container_name: my-flask-app-db
    build:
      context: ./db
      dockerfile: Dockerfile
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    expose: # 포트를 외부에 공개하지 않고 다른 컨테이너에 노출
      - &quot;3306&quot;
    volumes:
      - ./db/init_db.sql:/docker-entrypoint-initdb.d/init_db.sql
    networks:
      - 2tier_bridge

networks:
  2tier_bridge:
    driver: bridge&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Dockerfile&lt;br /&gt;: Dockerfile은 Docker 이미지를 정의하는 파일입니다. Dockerfile을 통해 특정 소프트웨어 환경을 구성하는데 필요한 모든 지침을 Docker에게 제공할 수 있습니다. &amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Sample&lt;br /&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1719207046150&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# 베이스 이미지
FROM base_image:tag

# 작성자 정보
LABEL maintainer=&quot;your_name@example.com&quot;

# 환경 변수 설정
ENV ENV_VAR_NAME=value

# 작업 디렉터리 설정
WORKDIR /path/to/workdir

# 파일 or 디렉터리 복사
COPY src /dest
# URL에서 파일을 다운로드하거나 압축 파일 해제
ADD src /dest

# 패키지 설치(이미지 빌드 시, 실행할 명령어 지정)
RUN command

# 포트 노출(컨테이너가 수신 대기할 포트 지정)
EXPOSE port_number

# 기본 실행 명령어 설정(컨테이너가 시작될 때 실행할 기본 명령어 지정)
CMD [&quot;executable&quot;,&quot;param1&quot;,&quot;param2&quot;]

# 컨테이너 실행 시 실행할 명령어(컨테이너가 시작될 때 항상 실행되도록 지정)
ENTRYPOINT [&quot;executable&quot;,&quot;param1&quot;,&quot;param2&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;*CMD와 ENTRYPOINT의 차이점&lt;br /&gt;: '&lt;span style=&quot;text-align: left;&quot;&gt;CMD'와 'ENTRYPOINT'&lt;/span&gt;&amp;nbsp; 두 지시어 모두, 컨테이너가 시작할 때 실행되는 명령어를 설정하는 사용됩니다.&lt;br /&gt;다만, ' &lt;span style=&quot;text-align: left;&quot;&gt;ENTRYPOINT'의 경우, 항상 실행되기에 추가 인자로 덮어 쓸 수 없습니다. &lt;br /&gt;&lt;span style=&quot;text-align: left;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;CMD'의 경우, docker run 명령어를 통해 추가 인자를 사용하여 덮어 쓸 수 있습니다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;flask&lt;br /&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1719208219683&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;FROM python:3.9

WORKDIR /app

COPY ./requirements.txt /app/
COPY ./app /app/app

RUN pip install --no-cache-dir -r requirements.txt

CMD [&quot;flask&quot;, &quot;run&quot;, &quot;--host=0.0.0.0&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;db&lt;br /&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1719208256910&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;FROM mysql:8.0

# 환경 변수(.env) 설정
ENV MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
ENV MYSQL_DATABASE=${MYSQL_DATABASE}
ENV MYSQL_USER=${MYSQL_USER}
ENV MYSQL_PASSWORD=${MYSQL_PASSWORD}

# 초기화 SQL 파일 추가
COPY init_db.sql /docker-entrypoint-initdb.d/init_db.sql&lt;/code&gt;&lt;/pre&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker 실행&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1719208446134&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose up -d --build&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;2355&quot; data-origin-height=&quot;1129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZCtT2/btsIa4L2rGg/N8GHqTDkrdFs7eyeO2FBhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZCtT2/btsIa4L2rGg/N8GHqTDkrdFs7eyeO2FBhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZCtT2/btsIa4L2rGg/N8GHqTDkrdFs7eyeO2FBhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZCtT2%2FbtsIa4L2rGg%2FN8GHqTDkrdFs7eyeO2FBhK%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;2355&quot; height=&quot;1129&quot; data-origin-width=&quot;2355&quot; data-origin-height=&quot;1129&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정상적으로 컨테이너 (현재) 실행 여부 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2377&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rQMqi/btsH83HPt90/rxHGqR8XGEDMEwKgWu3kq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rQMqi/btsH83HPt90/rxHGqR8XGEDMEwKgWu3kq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rQMqi/btsH83HPt90/rxHGqR8XGEDMEwKgWu3kq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrQMqi%2FbtsH83HPt90%2FrxHGqR8XGEDMEwKgWu3kq0%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;2377&quot; height=&quot;169&quot; data-origin-width=&quot;2377&quot; data-origin-height=&quot;169&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1773&quot; data-origin-height=&quot;1502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ebnge/btsH9smNWiw/KxLRSIWKLQ9KuqZSpJfgLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ebnge/btsH9smNWiw/KxLRSIWKLQ9KuqZSpJfgLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ebnge/btsH9smNWiw/KxLRSIWKLQ9KuqZSpJfgLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEbnge%2FbtsH9smNWiw%2FKxLRSIWKLQ9KuqZSpJfgLK%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;1773&quot; height=&quot;1502&quot; data-origin-width=&quot;1773&quot; data-origin-height=&quot;1502&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플리케이션 정상 구동 확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 외부 오픈(노출) 포트 5000 접속, Azure의 NSG 인바운드 정책에 5000포트에 대한 인터넷 액세스 추가 필수!&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2298&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpx8kQ/btsIa7otef4/mIkVPEvr5wKEjdytTeG5i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpx8kQ/btsIa7otef4/mIkVPEvr5wKEjdytTeG5i1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpx8kQ/btsIa7otef4/mIkVPEvr5wKEjdytTeG5i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpx8kQ%2FbtsIa7otef4%2FmIkVPEvr5wKEjdytTeG5i1%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;2298&quot; height=&quot;784&quot; data-origin-width=&quot;2298&quot; data-origin-height=&quot;784&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DB 연동 확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 게시판에 글 작성 후, MySQL 컨테이너 내부에 데이터 기록(저장)되는지 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2300&quot; data-origin-height=&quot;1010&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3HXNq/btsIbkag9SK/2XeNxMUtYH5bqtpbqDmk0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3HXNq/btsIbkag9SK/2XeNxMUtYH5bqtpbqDmk0K/img.png&quot; data-alt=&quot;데이터 기입 후, [Submit] 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3HXNq/btsIbkag9SK/2XeNxMUtYH5bqtpbqDmk0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3HXNq%2FbtsIbkag9SK%2F2XeNxMUtYH5bqtpbqDmk0K%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;2300&quot; height=&quot;1010&quot; data-origin-width=&quot;2300&quot; data-origin-height=&quot;1010&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;데이터 기입 후, [Submit] 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2301&quot; data-origin-height=&quot;755&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IS5Np/btsH87QY5hK/ze6zILqW6Orgp15NVoKk4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IS5Np/btsH87QY5hK/ze6zILqW6Orgp15NVoKk4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IS5Np/btsH87QY5hK/ze6zILqW6Orgp15NVoKk4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIS5Np%2FbtsH87QY5hK%2Fze6zILqW6Orgp15NVoKk4k%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;2301&quot; height=&quot;755&quot; data-origin-width=&quot;2301&quot; data-origin-height=&quot;755&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MySQL DB 컨테이너 접속&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfAs0w/btsIbowKmpa/JWgTppoz418Aq3fPOrtxB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfAs0w/btsIbowKmpa/JWgTppoz418Aq3fPOrtxB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfAs0w/btsIbowKmpa/JWgTppoz418Aq3fPOrtxB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfAs0w%2FbtsIbowKmpa%2FJWgTppoz418Aq3fPOrtxB0%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;1216&quot; height=&quot;76&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;76&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;1419&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cy4RY/btsH9XfMBTQ/ZXIrFH3lVlNxpultXjGmXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cy4RY/btsH9XfMBTQ/ZXIrFH3lVlNxpultXjGmXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cy4RY/btsH9XfMBTQ/ZXIrFH3lVlNxpultXjGmXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCy4RY%2FbtsH9XfMBTQ%2FZXIrFH3lVlNxpultXjGmXK%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;1419&quot; height=&quot;473&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;473&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;1508&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uKFWM/btsIaEGQrL3/0Vn7yxgNUKUch1usishO8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uKFWM/btsIaEGQrL3/0Vn7yxgNUKUch1usishO8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uKFWM/btsIaEGQrL3/0Vn7yxgNUKUch1usishO8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuKFWM%2FbtsIaEGQrL3%2F0Vn7yxgNUKUch1usishO8K%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;1508&quot; height=&quot;768&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;768&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V8FKc/btsH9YMwbp1/rhj85UskFQRHJeOMfvUCr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V8FKc/btsH9YMwbp1/rhj85UskFQRHJeOMfvUCr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V8FKc/btsH9YMwbp1/rhj85UskFQRHJeOMfvUCr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV8FKc%2FbtsH9YMwbp1%2Frhj85UskFQRHJeOMfvUCr1%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;1790&quot; height=&quot;278&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이상으로 &lt;b&gt;&quot;Docker&quot;&lt;/b&gt; &amp;amp; &quot;&lt;b&gt;Docker Network&quot;&lt;/b&gt; 에 대해 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러분들이 생각하는 의견을 자유롭게 댓글로 남겨주세요:)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음에도 도움이 되는 자료로 찾아뵙겠습니다!&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>Azure</category>
      <category>cloud</category>
      <category>Docker</category>
      <category>docker network(bridge)</category>
      <category>docker-compose.yml</category>
      <category>dockerfile</category>
      <category>도커</category>
      <category>도커 flask-mysql 컨테이너</category>
      <category>도커 네트워크</category>
      <category>도커 이미지</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/55</guid>
      <comments>https://with-cloud.tistory.com/55#entry55comment</comments>
      <pubDate>Mon, 24 Jun 2024 15:20:52 +0900</pubDate>
    </item>
    <item>
      <title>#1 Docker 그리고 Docker Network</title>
      <link>https://with-cloud.tistory.com/54</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;날이 점점 더워지고 있는 요즘입니다 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅의 주제로 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Docker&lt;span&gt; 그리고&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Docker Network를 준비하였습니다 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(아무래도 Docker 개념을 선행하는 것이 Network 영역을 이해하는데 도움이 되겠죠?!)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그럼 바로 시작하겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;001&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/001.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/001.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Docker&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. Docker 란?&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1537&quot; data-origin-height=&quot;1081&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4b1gk/btsHzdDyMJh/pgV0RuQJ1fnGdkL3puYFiK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4b1gk/btsHzdDyMJh/pgV0RuQJ1fnGdkL3puYFiK/img.webp&quot; data-alt=&quot;https://www.docker.com/wp-content/uploads/2023/05/symbol_blue-docker-logo.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4b1gk/btsHzdDyMJh/pgV0RuQJ1fnGdkL3puYFiK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4b1gk%2FbtsHzdDyMJh%2FpgV0RuQJ1fnGdkL3puYFiK%2Fimg.webp&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;307&quot; height=&quot;216&quot; data-origin-width=&quot;1537&quot; data-origin-height=&quot;1081&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.docker.com/wp-content/uploads/2023/05/symbol_blue-docker-logo.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;: Docker는 2013년 Docker사에서 Go 언어로 개발한 오픈소스 플랫폼입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는&amp;nbsp;Docker Engine 혹은 관련된 모든 프로젝트를 포함한 것을 의미하여, Docker Engine을 사용하여 *리눅스 컨테이너(Linux Container)를 제어하고, 다양한 기능을 사용하여 더 편리하고 쉽게 관리할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Docker라는 플랫폼은 컨테이너라는 격리된 환경에서 애플리케이션을 패키징하고 실행하는 기능을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;격리 및 보안을 통해 특정 호스트에서 동시에 많은 컨테이너를 실행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너는 가볍고 애플리케이션을 실행하는 데 필요한 모든 것을 포함하고 있으며, 이식성이라는 특징이 있어, 이는 개발환경, 테스트 환경, 서비스 환경을 모두 동일(Onprem, Cloud 또는 Hybird 환경 등에서도 실행 가능)하게 사용할 수 있기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*리눅스 컨테이너란?&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjiqHQ/btsHywYeveI/ty1tpUaMsnV7JGV26iecFk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjiqHQ/btsHywYeveI/ty1tpUaMsnV7JGV26iecFk/img.jpg&quot; data-alt=&quot;https://www.weave.works/blog/a-practical-guide-to-choosing-between-docker-containers-and-vms&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjiqHQ/btsHywYeveI/ty1tpUaMsnV7JGV26iecFk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjiqHQ%2FbtsHywYeveI%2Fty1tpUaMsnV7JGV26iecFk%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;1280&quot; height=&quot;648&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.weave.works/blog/a-practical-guide-to-choosing-between-docker-containers-and-vms&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 리눅스 컨테이너는 컨테이너 가상화 기술을 사용합니다. 리눅스 컨테이너에는 애플리케이션이나 이에 필요한 라이브러리 및 설정 파일 등이 포함되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;리눅스 컨테이너를 설명할 때 빠지지 않는 것이 바로 가상 머신과의 비교입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000;&quot;&gt;리눅스 컨테이너는 가상 머신과 다르게 가상화 계층이 없고 커널이 별로 존재하지 않기 때문에 가상 머신에 비해 가볍고 실행 속도 또한 빠르다는 특징을 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;즉, 도커는 리눅스 컨테이너를 다루는 도구이며, 컨테이너 런타임이라고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(위 그림의 Container Engine --&amp;gt; Docker Engine)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;리눅스 컨테이너를 사용할 때 가장 핵심 기술 두 가지는 cgroup과 namespace 입니다.&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;span style=&quot;color: #000000;&quot;&gt;cgroup&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: control group의 약자로, Process 또는 Thread를 그룹화하여 관리하는 기능과 시스템 리소스(CPU, 메모리, 디스크 입출력 등)의 사용을 제한하는 기술입니다. 리눅스 컨테이너는 호스트의 리소스를 공유하여 사용하는데, 이때 cgroup을 사용하여 컨테이너가 사용하는 리소스의 양을 제한할 수 있습니다. 또한 같은 호스트에서 동작하는 서로 다른 컨터이너에 영향을 주지 않도록 막아주는 역할을 합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;namespace&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: namespace는 직역하면 이름공간으로, 이 공간에 다수의 Object를 격리할 수 있습니다. 예를 들어 동일한 호스트에서 동일한 PID를 가칠 수 없지만 서로 다른 namespace에서는 동일한 PID를 가질 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2. Docker 구조&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WkxqY/btsHz4FWqo7/4WvoKCfIZm1Oqm4BdVx0I1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WkxqY/btsHz4FWqo7/4WvoKCfIZm1Oqm4BdVx0I1/img.webp&quot; data-alt=&quot;https://docs.docker.com/get-started/images/docker-architecture.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WkxqY/btsHz4FWqo7/4WvoKCfIZm1Oqm4BdVx0I1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWkxqY%2FbtsHz4FWqo7%2F4WvoKCfIZm1Oqm4BdVx0I1%2Fimg.webp&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;1233&quot; height=&quot;651&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://docs.docker.com/get-started/images/docker-architecture.webp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker 클라이언트(docker)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 클라이언트는 docker 커맨드를 통해 한 개 이상의 데몬과 통신할 수 있으며 사용자가 Docker와 상호작용할 수 있는 가장 우선적인 방법입니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker 데몬(dockerd)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 다른 Docker 데몬과 통신하거나 Docker API 요청을 기다리고 이미지, 컨테이너, 네트워크, 볼륨 등을 관리하는 역할을 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker 레지스트리&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Docker 이미지 저장소. 기본적으로 Docker Hub라는 퍼블릭 레지스트리로 설정되어 있고 프라이빗 레지스트리도 생성할 수 있으며, Docker Datacenter(DDC)를 사용하는 경우, Docker Trusted Registy(DTR)로부터 pull, push 할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;위 용어를 통해 그림의 흐름을 간략히 설명하면 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Clinet에서 Docker Command 실행&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Docker Host의 Daemon을 통해 동작하는데, Reigstry에 있는 images를 가져와 Container에게 전달(배포)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-3. Docker 개념 및 용어 정리&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Container(컨테이너)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 위에서도 언급한 것처럼, 컨테이너는 앱의 각 구성 요소에 대해 격리된 프로세스입니다.&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 컨테이너에는 호스트 시스템에 사전 설치된 종속성에 의존하지 않고, 작동하는 데 필요한 모든 요소가 포함되어 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너는&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;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각&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;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너는 어디에서나 실행될 수 있습니다. 실행되는 컨테이너는 On-Premise, Cloud 등 인프라 환경에 상관없이 동일한 방식으로 작동합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Image(이미지)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 컨테이너 이미지는 컨테이너를 실행하는 데 필요한 모든 파일, Binary, Library 및 구성을 포함하는 표준화된 패키지입니다. 다만, 이미지는 다음과 같은 특징이 있습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지는 이미지 생성 후, 변경(수정)할 수 없습니다. 새 이미지를 만들거나 그 위에 변경 사항을 추가하는 것만 가능합니다. 즉, 기존 이미지를 기반으로 새로운 이미지를 생성하는 것을 의미합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너&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;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 두 가지 특징을 기반으로 기존 이미지를 추가하거나 확장할 수 있습니다. 쉽게 표현하자면, Nginx 같은 기본 이미지(version 1.0)를 시작하고 추가 레이어를 추가하여 코드를 추가하여 새로운 이미지(version 2.0)를 만들 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Registry(레지스트리)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 말 그대로, 이미지를 저장하는 장소를 Registry라 말합니다. 저장소라는 용어와 구분하여 설명하자면 저장소는 레지스트리 내 관련 이미지의 모음이며, 레지스트리는 이미지를 저장하고 관리하는 상위 개념입니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;text-align: left;&quot;&gt;개발을 위한 소스코드를 저장하고, 다른 사람들과 공유할 수 있는 Github와 같이 이미지를 저장하고 공유할 수 있는&amp;nbsp;&lt;/span&gt; Docker Hub 공용 레지스트리가 있으며, CSP 사에서 제공하는 Azure Container Registry, Amazon Elastic Container Registy 같은 Private 레지스트리 혹은 Harbor, JFrog Artifactory, GitLab 컨테이너 레지스트리 등이 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker Compose&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Docker사의 권장 사항으로 각 컨테이너가 한 가지 작업을 수행하는 것입니다. 다만, 하나의 컨테이너에 여러 작업을 실행할 수 있는데, 바로 Docker Compose를 수행하는 방법입니다. 즉, 앱을 구성하는 서비스를 docker-compose.yml에 정의하여 격리된 환경에서 함께 실행할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Dockerfile&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Dockerfile은 컨테이너 이미지를 빌드하기 위한 지침을 제공합니다. 즉, 사용자가 이미지를 생성하는데, 해당 이미지를 통해 실행될 애플리케이션의 필요한 종속성을 포함합니다. 이는 단일 이미지를 빌드하기 위한 명세서이며, 나열된 명령어(텍스트)가 차례대로 수행되는데, 베이직 이미지, 환경 변수, 수행 명령어 등 이미지를 빌드하기 위한 명령어가 포함되어 있습니다.&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1716795367150&quot; class=&quot;dockerfile&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;FROM python:3.12
WORKDIR /usr/local/app

# Install the application dependencies
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# Copy in the source code
COPY src ./src
EXPOSE 5000

# Setup an app user so the container doesn't run as the root user
RUN useradd app
USER app

CMD [&quot;uvicorn&quot;, &quot;app.main:app&quot;, &quot;--host&quot;, &quot;0.0.0.0&quot;, &quot;--port&quot;, &quot;8080&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 요소는 다음을 의미합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FROM &amp;lt;image&amp;gt; : 빌드가 확장될 기본 이미지를 지정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WORKDIR &amp;lt;path&amp;gt; : 이 명령은 &quot;작업 디렉터리&quot; 또는 파일이 복사되고 명령이 실행될 이미지의 경로를 지정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;COPY &amp;lt;host-path&amp;gt; &amp;lt;image-path&amp;gt; : 이 명령은 빌더에게 호스트에서 파일을 복사하여 컨테이너 이미지에 넣으라고 지시합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RUN &amp;lt;command&amp;gt; : 이 명령은 빌더에게 지정된 명령을 실행하도록 지시합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ENV &amp;lt;name&amp;gt; &amp;lt;value&amp;gt; : 이 명령은 실행 중인 컨테이너가 사용할 환경 변수를 설정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;EXPOSE &amp;lt;port-number&amp;gt; : 이 명령은 이미지가 노출하려는 포트를 나타내는 이미지 구성을 설정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;USER &amp;lt;user-or-uid&amp;gt; : 이 명령은 모든 후속 명령에 대한 기본 사용자를 설정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CMD [&quot;&amp;lt;command&amp;gt;&quot;, &quot;&amp;lt;arg1&amp;gt;&quot;] : 이 지침은 이 이미지를 사용하는 컨테이너가 실행할 기본 명령을 설정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4. Docker 설치 및 구성 확인&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Azure VM(Ubuntu 22.04)에서 테스트 진행하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 2부에서 자세히 설명하겠지만, Docker의 경우, 기본적으로 &lt;b&gt;172.17.0.0/16&lt;/b&gt; &amp;nbsp;으로 설정&lt;span style=&quot;text-align: start;&quot;&gt;(!변경 가능!)&lt;/span&gt;되어 있습니다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;실습에서(Default Network를 변경하지 않을 예정), 해당 대역과 중첩하게 된다면 컨테이너 통신이 되지 않기 때문에 유의하시기 바랍니다.&lt;/b&gt;&lt;b&gt;&lt;/b&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;1428&quot; data-origin-height=&quot;1188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B4zBI/btsHEUDWWlk/GcjZJhrk1m18pmrZ1MDUe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B4zBI/btsHEUDWWlk/GcjZJhrk1m18pmrZ1MDUe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B4zBI/btsHEUDWWlk/GcjZJhrk1m18pmrZ1MDUe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB4zBI%2FbtsHEUDWWlk%2FGcjZJhrk1m18pmrZ1MDUe1%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;1428&quot; height=&quot;1188&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;1188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관련하여 보다 자세한 내용은 2편에서 진행할 예정입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4-1. Docker Command&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker에서 주로 사용되는 기본 명령어를 다음과 같이 정리하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(보다 자세한 명령어는 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.docker.com/reference/cli/docker/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;공식 문서&lt;/a&gt;를 참고해 주세요!)&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 286px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 18.3333%; height: 114px; text-align: center;&quot; rowspan=&quot;6&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Docker Image&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.2635%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 검색(From Docker Hub)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker&amp;nbsp;search&amp;nbsp;{이미지&amp;nbsp;이름}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 다운로드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker&amp;nbsp;image&amp;nbsp;pull&amp;nbsp;{이미지명:태그}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;(다운로드 된)&amp;nbsp;&lt;/span&gt;이미지 조회&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker&amp;nbsp;images&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 빌드(Dockerfile)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker build -t {이미지명:태그명} {dockerfile의 경로}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 삭제&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker image rm {이미지 ID or 이름}&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 업로드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker image push {이미지명:태그}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.3333%; height: 104px; text-align: center;&quot; rowspan=&quot;6&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Docker Container&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.2635%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실행중인 컨테이너 목록 조회&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker&amp;nbsp;ps&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너 생성 후, 실행&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker run -it --name {컨테이너 이름} -p {Host 포트} : {컨테이너 포트} {이미지 Repository}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨네이너 실행&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker&amp;nbsp;start&amp;nbsp;{이미지&amp;nbsp;이름:태그}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너 중지&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker stop {컨테이너 ID or 이름}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이터 삭제&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker rm {컨테이너 ID or 이름}&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 16px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너 내부 접속&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 16px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker&amp;nbsp;exec&amp;nbsp;-it&amp;nbsp;{컨테이너&amp;nbsp;ID&amp;nbsp;또는&amp;nbsp;이름}&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;/bin/bash&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.3333%; height: 68px; text-align: center;&quot; rowspan=&quot;4&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Docker Compose&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.2635%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;빌드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;docker-compose build&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;빌드 후, 실행&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;docker-compose up&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조회&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;docker-compose ps&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 29.2635%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;삭제&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.4031%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;docker-compose down&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4-2.&amp;nbsp;Docker 설치&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;설치를 위한 apt 레포지토리 설정&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1716796959966&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
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

# Add the repository to Apt sources:
echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release &amp;amp;&amp;amp; echo &quot;$VERSION_CODENAME&quot;) stable&quot; | \
  sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;패키지 설치&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1716796991511&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치 확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 서비스 등록되어 Status(Active) 확&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2215&quot; data-origin-height=&quot;363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/prXnJ/btsHCxJzQL6/AKqKPt21ICKaNEt4zOs4p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/prXnJ/btsHCxJzQL6/AKqKPt21ICKaNEt4zOs4p0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/prXnJ/btsHCxJzQL6/AKqKPt21ICKaNEt4zOs4p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FprXnJ%2FbtsHCxJzQL6%2FAKqKPt21ICKaNEt4zOs4p0%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;2215&quot; height=&quot;363&quot; data-origin-width=&quot;2215&quot; data-origin-height=&quot;363&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 이미지 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1344&quot; data-origin-height=&quot;859&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/comCTO/btsHCVwx2OM/eP6QcrFb56F9OnORAWJrx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/comCTO/btsHCVwx2OM/eP6QcrFb56F9OnORAWJrx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/comCTO/btsHCVwx2OM/eP6QcrFb56F9OnORAWJrx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcomCTO%2FbtsHCVwx2OM%2FeP6QcrFb56F9OnORAWJrx1%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;1344&quot; height=&quot;859&quot; data-origin-width=&quot;1344&quot; data-origin-height=&quot;859&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 목록 확인(조회)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wol9G/btsHDL1aBbp/3OSIsA2hKV0ZMK9pjzHoik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wol9G/btsHDL1aBbp/3OSIsA2hKV0ZMK9pjzHoik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wol9G/btsHDL1aBbp/3OSIsA2hKV0ZMK9pjzHoik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwol9G%2FbtsHDL1aBbp%2F3OSIsA2hKV0ZMK9pjzHoik%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;1046&quot; height=&quot;115&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;115&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4-3. Image Pull (다운로드)&amp;nbsp; - Run&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 일반적으로 이미지를 Push/Pull 하는 단계에서 Docker Hub의 이미지를 사용하기 위해서넌 Login이 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, Push의 경우, Commit 을 위한 Docker Hub의 User ID와 저장소인 Repository 를 명령어에 사용하기 때문에 반드시 필요합니다. Pull의 경우, 이미지를 다운로드할 때 Docker Hub Login 없이 가능하지만, 기능의 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.docker.com/docker-hub/download-rate-limit/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;일부 제약&lt;/a&gt;이 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞서 설명한 것처럼, Docker Hub는 Public 합니다. 따라서 공개된 이미지나 Pull 가능하며, Push 가능합니다. 다만, 보안 위험 등 존재할 수 있는 사고를 줄이고자 공식 이미지(Official Imgae), 인증된 게시자(Verified Publisher) 이미지 혹은 자신이 만든 이미지를 사용하는 것을 권장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Trusted content&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2817&quot; data-origin-height=&quot;1243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2MUw7/btsHFqbWReQ/vOHIOEwHiKVYvpyGN7pixK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2MUw7/btsHFqbWReQ/vOHIOEwHiKVYvpyGN7pixK/img.png&quot; data-alt=&quot;https://hub.docker.com/explore&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2MUw7/btsHFqbWReQ/vOHIOEwHiKVYvpyGN7pixK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2MUw7%2FbtsHFqbWReQ%2FvOHIOEwHiKVYvpyGN7pixK%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;2817&quot; height=&quot;1243&quot; data-origin-width=&quot;2817&quot; data-origin-height=&quot;1243&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://hub.docker.com/explore&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1922&quot; data-origin-height=&quot;741&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djnC8g/btsHF0RiLjV/E1LIZTkCYZEUxsKoLkSQbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djnC8g/btsHF0RiLjV/E1LIZTkCYZEUxsKoLkSQbK/img.png&quot; data-alt=&quot;명령어로 이미지 검색 시, 확인되는 OFFICIAL CHECK&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djnC8g/btsHF0RiLjV/E1LIZTkCYZEUxsKoLkSQbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjnC8g%2FbtsHF0RiLjV%2FE1LIZTkCYZEUxsKoLkSQbK%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;1922&quot; height=&quot;741&quot; data-origin-width=&quot;1922&quot; data-origin-height=&quot;741&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;명령어로 이미지 검색 시, 확인되는 OFFICIAL CHECK&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx 공식 이미지 다운로드&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 태그(tag)의 경우, 별도 지정하지 않는다면, 자동적으로 latest 기본값으로 사용됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1442&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sWfUU/btsHGbSIRiS/KmKZSh1nT7uJJ0IvNIPEc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sWfUU/btsHGbSIRiS/KmKZSh1nT7uJJ0IvNIPEc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sWfUU/btsHGbSIRiS/KmKZSh1nT7uJJ0IvNIPEc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsWfUU%2FbtsHGbSIRiS%2FKmKZSh1nT7uJJ0IvNIPEc0%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;1442&quot; height=&quot;200&quot; data-origin-width=&quot;1442&quot; data-origin-height=&quot;200&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;1244&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/STrM0/btsHEyV0CGo/wz42SDrGcxTtVqEcMWbWk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/STrM0/btsHEyV0CGo/wz42SDrGcxTtVqEcMWbWk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/STrM0/btsHEyV0CGo/wz42SDrGcxTtVqEcMWbWk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSTrM0%2FbtsHEyV0CGo%2Fwz42SDrGcxTtVqEcMWbWk1%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;1244&quot; height=&quot;140&quot; data-origin-width=&quot;1244&quot; data-origin-height=&quot;140&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Container 생성 및 실행&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Conatiner 생성 및 실행을 위해서는 docker run 명령어를 실행합니다. 해당 명령어는 이미지에서 새 컨테이너를 생성 및 실행하는 명령어입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자주 사용되는 옵션과 예시는 다음과 같으며, 보다 자세한 옵션과 설명은 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.docker.com/reference/cli/docker/container/run/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;공식 문서&lt;/a&gt;를 참고해 주세요.&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1716956168261&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;docker (container) run [OPTIONS] IMAGE [COMMAND] [ARG...]&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;-d( --detach)&lt;/b&gt; : 컨테이너를 백그라운드에서 실행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;-p(--publish)&lt;/b&gt; : 호스트 포트와 컨테이너 포트 연결&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;--name&lt;/b&gt; : 컨테이너 이름 지정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; -it(--interatice &amp;amp; --tty)&lt;/b&gt; : 컨테이너와 상호 작용하는 대화형 모드로 컨테이너 안에서 터미널을 사용하는 것처럼 명령어를 입력하고 출력을 확인 가능. 주로 컨테이너 내부에서 Shell에 접근하기 위해 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;-v(--volume) &lt;/b&gt;: 호스트의 디렉터리를 컨테이너의 디렉터리로 마운트&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;-e(--env) &lt;/b&gt;: 환경 변수 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&lt;b&gt;-network&lt;/b&gt; : 특정 네트워크에 컨테이너 연결&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1716957361646&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# nginx 라는 이미지를 
# nginx_svr 라는 컨테이너 이름으로 백그라운드 실행
# 호스트 포트(8000)와 컨테이터 포트(80) 연결

sudo docker run -d --name=nginx_svr -p 8000:80 nginx&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;1359&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsuInI/btsHFzfXxUa/dvsUCAcQ6CcYv2B8uCLks0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsuInI/btsHFzfXxUa/dvsUCAcQ6CcYv2B8uCLks0/img.png&quot; data-alt=&quot;정상 실행 시, 컨테이터 ID 출력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsuInI/btsHFzfXxUa/dvsUCAcQ6CcYv2B8uCLks0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsuInI%2FbtsHFzfXxUa%2FdvsUCAcQ6CcYv2B8uCLks0%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;1359&quot; height=&quot;65&quot; data-origin-width=&quot;1359&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정상 실행 시, 컨테이터 ID 출력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2275&quot; data-origin-height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uhhsU/btsHGa7Pdvy/7zkoGWYbXKj0RZHetGLkU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uhhsU/btsHGa7Pdvy/7zkoGWYbXKj0RZHetGLkU0/img.png&quot; data-alt=&quot;현재 실행중인지 확인(Status : Up)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uhhsU/btsHGa7Pdvy/7zkoGWYbXKj0RZHetGLkU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuhhsU%2FbtsHGa7Pdvy%2F7zkoGWYbXKj0RZHetGLkU0%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;2275&quot; height=&quot;111&quot; data-origin-width=&quot;2275&quot; data-origin-height=&quot;111&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;현재 실행중인지 확인(Status : Up)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6pz1t/btsHHkIeNdW/nuyy5JWzuST2JVTEFqRpBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6pz1t/btsHHkIeNdW/nuyy5JWzuST2JVTEFqRpBK/img.png&quot; data-alt=&quot;curl 명령어로 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6pz1t/btsHHkIeNdW/nuyy5JWzuST2JVTEFqRpBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6pz1t%2FbtsHHkIeNdW%2Fnuyy5JWzuST2JVTEFqRpBK%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;1402&quot; height=&quot;756&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;756&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;curl 명령어로 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2556&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eaxGDE/btsHGW148Fb/gyKaNE6MwjFKuoziKjOIq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eaxGDE/btsHGW148Fb/gyKaNE6MwjFKuoziKjOIq1/img.png&quot; data-alt=&quot;인터넷에서 액세스 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eaxGDE/btsHGW148Fb/gyKaNE6MwjFKuoziKjOIq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeaxGDE%2FbtsHGW148Fb%2FgyKaNE6MwjFKuoziKjOIq1%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;2556&quot; height=&quot;655&quot; data-origin-width=&quot;2556&quot; data-origin-height=&quot;655&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인터넷에서 액세스 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*Azure VM에서 실행 중이므로 외부에서 해당 웹 페이지를 액세스 하기 위해서는 NSG의 인바운드 정책을 추가하여야 합니다.&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;2807&quot; data-origin-height=&quot;1264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVdR2c/btsHGazUVhs/0YHPzwfkw2WjkKYtxDnyr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVdR2c/btsHGazUVhs/0YHPzwfkw2WjkKYtxDnyr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVdR2c/btsHGazUVhs/0YHPzwfkw2WjkKYtxDnyr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVdR2c%2FbtsHGazUVhs%2F0YHPzwfkw2WjkKYtxDnyr0%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;2807&quot; height=&quot;1264&quot; data-origin-width=&quot;2807&quot; data-origin-height=&quot;1264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4-4. Image Push (업로드)&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 이미지를 Docker Hub와 같은 레지스트리에 Push(업로드) 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 단계에서 Pull(다운로드)한 nginx 이미지를 기반으로 Content를 일부 수정 후, 새로운 이미지를 생성하여 Docker Hub의 레지스트리에 Push 하는 과정입니다.&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;span style=&quot;color: #000000;&quot;&gt;기존 이미지 수정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: HTML 파일 수정을 위해, 실행 중인 컨테이너 내부에 접근하여 Nginx가 바라보는 &lt;span style=&quot;text-align: start;&quot;&gt;HTML &lt;/span&gt;파일이 저장된 경로를 파악합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1716961406443&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker exec -it nginx_svr /bin/bash&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;2355&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o58tq/btsHFwwUGo0/SygJgisBZRiz7rkHFRnHV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o58tq/btsHFwwUGo0/SygJgisBZRiz7rkHFRnHV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o58tq/btsHFwwUGo0/SygJgisBZRiz7rkHFRnHV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo58tq%2FbtsHFwwUGo0%2FSygJgisBZRiz7rkHFRnHV0%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;2355&quot; height=&quot;166&quot; data-origin-width=&quot;2355&quot; data-origin-height=&quot;166&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;pre id=&quot;code_1716961740564&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 이미지는 삽입하기 위해 컨테이너 내부에 디렉터리 생성
sudo docker exec nginx_svr mkdir -p /usr/share/nginx/html/images

# 이미지 파일을 컨테이너 내부로 복사
sudo docker cp ./IMG_4559.JPG\?type\=w773 nginx_svr:/usr/share/nginx/html/images/
&amp;gt; Successfully copied 29.2kB to nginx_svr:/usr/share/nginx/html/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;994&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coovej/btsHFMl6Zrt/It9kzEJ3oHNx4WoWBO8v70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coovej/btsHFMl6Zrt/It9kzEJ3oHNx4WoWBO8v70/img.png&quot; data-alt=&quot;컨테이너 내부 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coovej/btsHFMl6Zrt/It9kzEJ3oHNx4WoWBO8v70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcoovej%2FbtsHFMl6Zrt%2FIt9kzEJ3oHNx4WoWBO8v70%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;994&quot; height=&quot;77&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;컨테이너 내부 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NGINX에서 정적 파일을 제공할 때, 쿼리 문자열을 무시하고 파일 이름만 사용하기에 이미지를 제대로 서빙하기 위해서 파일 이름 변경&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1716962394503&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 해당 이미지가 저장된 경로(./images/)에서 변경
mv 'IMG_4559.JPG?type=w773' IMG_4559.JPG&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마지막으로 HTML 파일을 수정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1716961966553&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# index.html 파일 수정
echo &quot;&amp;lt;h1&amp;gt;Hello, Tak's World&amp;lt;/h1&amp;gt;&amp;lt;img src='images/IMG_4559.JPG?type=w773' alt='My Image'&amp;gt;&quot; &amp;gt; /usr/share/nginx/html/index.html&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;2564&quot; data-origin-height=&quot;1002&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SQyVN/btsHHICcfJV/fzFSyTEU4WI8vELd2b2wk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SQyVN/btsHHICcfJV/fzFSyTEU4WI8vELd2b2wk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SQyVN/btsHHICcfJV/fzFSyTEU4WI8vELd2b2wk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSQyVN%2FbtsHHICcfJV%2FfzFSyTEU4WI8vELd2b2wk1%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;2564&quot; height=&quot;1002&quot; data-origin-width=&quot;2564&quot; data-origin-height=&quot;1002&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새로운 이미지 정의하여 Docker Hub에 Push&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 위 단계까지 변경 작업한 사항을 반영하여 새로운 이미지를 생성하여 이미지를 Push 합니다. 레지스트리에 이미지를 Push 하기 위해서는 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://hub.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Docker Hub 로그인&lt;/a&gt;이 필수입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수정한 내용을 새로운 Docker 이미지로 Commit 합니다.&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;1236&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0nTtA/btsHHjJySPW/pkQFjH1vx1zE4xMJsnELrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0nTtA/btsHHjJySPW/pkQFjH1vx1zE4xMJsnELrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0nTtA/btsHHjJySPW/pkQFjH1vx1zE4xMJsnELrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0nTtA%2FbtsHHjJySPW%2FpkQFjH1vx1zE4xMJsnELrk%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;1236&quot; height=&quot;76&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변경 사항을 Docker Hub에 Push 하기 위해 login 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;계정 정보를 기입하여 로그인을 시도합니다. warning이 표시되는 이유는 로그인 정보다 해당 호스트(서버)에 남기에 주의하라는 내용이며, 해당 테스트에서는 개인용 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;2343&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qXyAz/btsHFqp4XtN/a0H0Jeofb8ZKkLEoai5ma1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qXyAz/btsHFqp4XtN/a0H0Jeofb8ZKkLEoai5ma1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qXyAz/btsHFqp4XtN/a0H0Jeofb8ZKkLEoai5ma1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqXyAz%2FbtsHFqp4XtN%2Fa0H0Jeofb8ZKkLEoai5ma1%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;2343&quot; height=&quot;420&quot; data-origin-width=&quot;2343&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제, 해당 이미지를 본인의 저장소(레포지토리)에 Push 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 통해 레포지토리에 이미지를 Push 하기 위해서는 Docker hub에 레지스트리를 생성하여야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로그인 후, [Repositories] - [Create repository] 를 선택합니다.&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;2570&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L5AsA/btsHGR04xOs/ln6os4xLicwhX25WmsT000/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L5AsA/btsHGR04xOs/ln6os4xLicwhX25WmsT000/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L5AsA/btsHGR04xOs/ln6os4xLicwhX25WmsT000/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL5AsA%2FbtsHGR04xOs%2Fln6os4xLicwhX25WmsT000%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;2570&quot; height=&quot;398&quot; data-origin-width=&quot;2570&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Namespace는 본인의 Account를 의미하며, 그 안에 포함되는 레포지토리 이름을 정의하여 생성합니다.&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;2402&quot; data-origin-height=&quot;1082&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V0ivr/btsHGC33d9Z/yfsfzQ54ECBvWAyLziXmx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V0ivr/btsHGC33d9Z/yfsfzQ54ECBvWAyLziXmx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V0ivr/btsHGC33d9Z/yfsfzQ54ECBvWAyLziXmx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV0ivr%2FbtsHGC33d9Z%2FyfsfzQ54ECBvWAyLziXmx0%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;2402&quot; height=&quot;1082&quot; data-origin-width=&quot;2402&quot; data-origin-height=&quot;1082&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;2429&quot; data-origin-height=&quot;1358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k7qj0/btsHGjwUqMG/olhWPbOsTOiEknGNw3Q640/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k7qj0/btsHGjwUqMG/olhWPbOsTOiEknGNw3Q640/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k7qj0/btsHGjwUqMG/olhWPbOsTOiEknGNw3Q640/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk7qj0%2FbtsHGjwUqMG%2FolhWPbOsTOiEknGNw3Q640%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;2429&quot; height=&quot;1358&quot; data-origin-width=&quot;2429&quot; data-origin-height=&quot;1358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마지막으로 이미지를 Push 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1716963867706&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 이미지 식별 등 버전 관리를 위한 tag 명령어 사용
# 호스트(로컬)에 있는 'nginx_svr:modified001' 이미지를 Docker hub에 생성한 레포지토리 'tak2da/taks-blog:v1' 태그 설정

docker tag nginx_svr:modified001 tak2da/taks-blog:v1&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;1189&quot; data-origin-height=&quot;189&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdyZgv/btsHHae4RU0/VxsAaKZuimNOMIsvkksxv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdyZgv/btsHHae4RU0/VxsAaKZuimNOMIsvkksxv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdyZgv/btsHHae4RU0/VxsAaKZuimNOMIsvkksxv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdyZgv%2FbtsHHae4RU0%2FVxsAaKZuimNOMIsvkksxv0%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;1189&quot; height=&quot;189&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;189&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;**docker login을 통해 login 여부를 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1716965863833&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# tag가 설정된 이미지를 Docker hub에 Push

docker push tak2da/taks-blog:v1&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;1739&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqdKKD/btsHFMNhUrC/kSXwRJKk3QZ5u5Rl9dYnL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqdKKD/btsHFMNhUrC/kSXwRJKk3QZ5u5Rl9dYnL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqdKKD/btsHFMNhUrC/kSXwRJKk3QZ5u5Rl9dYnL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqdKKD%2FbtsHFMNhUrC%2FkSXwRJKk3QZ5u5Rl9dYnL1%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;1739&quot; height=&quot;358&quot; data-origin-width=&quot;1739&quot; data-origin-height=&quot;358&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;업로드 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;962&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTRTpq/btsHFxCIHb4/J9wgx8UfyKuEkX00rx1jr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTRTpq/btsHFxCIHb4/J9wgx8UfyKuEkX00rx1jr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTRTpq/btsHFxCIHb4/J9wgx8UfyKuEkX00rx1jr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTRTpq%2FbtsHFxCIHb4%2FJ9wgx8UfyKuEkX00rx1jr0%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;1352&quot; height=&quot;962&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;962&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;1380&quot; data-origin-height=&quot;745&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F2rWM/btsHF9BlBj0/z3df4T628DtOwdG19N3K9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F2rWM/btsHF9BlBj0/z3df4T628DtOwdG19N3K9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F2rWM/btsHF9BlBj0/z3df4T628DtOwdG19N3K9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF2rWM%2FbtsHF9BlBj0%2Fz3df4T628DtOwdG19N3K9K%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;1380&quot; height=&quot;745&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;745&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 이미지를 통해 Pull을 시도하여 새로운 Container를 생성 및 실행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-4-5. Dockerfile - Build&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 이번에는 Docker Hub에서 만들어진 이미지 같은 표준화된 이미지나 빠른 배포를 위해 사용하는 Pull-Run 방식이 아닌, Dockerfile을 작성하여 커스터마이징 된 이미지를 빌드하고 실행하는 테스트를 해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Python 애플리케이션인 Flask 를 Docker 컨테이너로 생성 및 실행하는 과정입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Python 및 Flask 설치의 경우, 해당 과정에서는 생략합니다. 간단하고 기본적인 Flask만 구성하시면 됩니다!)&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;641&quot; data-origin-height=&quot;231&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKvmvZ/btsHHLyVU29/OXQkLpdODIS88gMGAuY2L1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKvmvZ/btsHHLyVU29/OXQkLpdODIS88gMGAuY2L1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKvmvZ/btsHHLyVU29/OXQkLpdODIS88gMGAuY2L1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKvmvZ%2FbtsHHLyVU29%2FOXQkLpdODIS88gMGAuY2L1%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;641&quot; height=&quot;231&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;231&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의존성 파일 작성&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 설치한 Flask의 버전을 확인하여, 의존성을 명시한 requirement.txt 파일에 기입합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AjK1z/btsHHO3ubvV/0Bp8t49HAyIr8kNSNy07fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AjK1z/btsHHO3ubvV/0Bp8t49HAyIr8kNSNy07fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AjK1z/btsHHO3ubvV/0Bp8t49HAyIr8kNSNy07fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAjK1z%2FbtsHHO3ubvV%2F0Bp8t49HAyIr8kNSNy07fk%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;1240&quot; height=&quot;135&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Dockerfile 생성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1716968088508&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 베이스 이미지로 Python 3.9 사용
FROM python:3.9-slim

# 작업 디렉토리 설정
WORKDIR /usr/src/app

# 의존성 파일 복사 및 설치
COPY docker-flask/requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# 애플리케이션 파일 복사
COPY docker-flask/. .

# Flask 애플리케이션 실행
CMD [&quot;python&quot;, &quot;app.py&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 Build&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1716968307609&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 이미지 빌드 시, tag(1.0) 적용
# docker-flask 는 이미지의 이름이고, .(마침표)는 Dockerfile이 있는 현재 디렉토리를 의미

docker build -t docker-flask:1.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;2354&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk9ywe/btsHF2h8Fmd/eO6lVpZK32L0PYeu8ZCfok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk9ywe/btsHF2h8Fmd/eO6lVpZK32L0PYeu8ZCfok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk9ywe/btsHF2h8Fmd/eO6lVpZK32L0PYeu8ZCfok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk9ywe%2FbtsHF2h8Fmd%2FeO6lVpZK32L0PYeu8ZCfok%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;2354&quot; height=&quot;948&quot; data-origin-width=&quot;2354&quot; data-origin-height=&quot;948&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;1342&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nrkDD/btsHHrnbLtI/XGE72XzPLf1KtzZhOChaSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nrkDD/btsHHrnbLtI/XGE72XzPLf1KtzZhOChaSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nrkDD/btsHHrnbLtI/XGE72XzPLf1KtzZhOChaSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnrkDD%2FbtsHHrnbLtI%2FXGE72XzPLf1KtzZhOChaSk%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;1342&quot; height=&quot;229&quot; data-origin-width=&quot;1342&quot; data-origin-height=&quot;229&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker 컨테이너 생성 및 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1716968859383&quot; class=&quot;shell&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# docker-flask:1.0 라는 이미지를 
# flaks_svr 라는 컨테이너 이름으로 백그라운드 실행
# 호스트 포트(8080)와 컨테이터 포트(5000) 연결

sudo docker run -d --name=flaks_svr -p 8080:5000 docker-flask:1.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;1819&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2eX6f/btsHGCQIkh3/8jNqJoXHAUKmFzMRXeWEuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2eX6f/btsHGCQIkh3/8jNqJoXHAUKmFzMRXeWEuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2eX6f/btsHGCQIkh3/8jNqJoXHAUKmFzMRXeWEuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2eX6f%2FbtsHGCQIkh3%2F8jNqJoXHAUKmFzMRXeWEuK%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;1819&quot; height=&quot;74&quot; data-origin-width=&quot;1819&quot; data-origin-height=&quot;74&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;2345&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JsMAp/btsHHfOe8V4/0ubWVIB6pB1QuihW9ludHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JsMAp/btsHHfOe8V4/0ubWVIB6pB1QuihW9ludHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JsMAp/btsHHfOe8V4/0ubWVIB6pB1QuihW9ludHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJsMAp%2FbtsHHfOe8V4%2F0ubWVIB6pB1QuihW9ludHk%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;2345&quot; height=&quot;149&quot; data-origin-width=&quot;2345&quot; data-origin-height=&quot;149&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;2345&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvhu5o/btsHHazwsQi/ifxrK7cY3OgTZJhqSCgySK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvhu5o/btsHHazwsQi/ifxrK7cY3OgTZJhqSCgySK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvhu5o/btsHHazwsQi/ifxrK7cY3OgTZJhqSCgySK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdvhu5o%2FbtsHHazwsQi%2FifxrK7cY3OgTZJhqSCgySK%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;2345&quot; height=&quot;406&quot; data-origin-width=&quot;2345&quot; data-origin-height=&quot;406&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*위 Nginx와 마찬가지로 외부(인터넷)에서 액세스 하기 위해서는 NSG 인바운드 정책에 8080 포트를 Open 해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금까지 &quot; #1 Docker 그리고 Docker Network 중 &lt;b&gt;Docker&lt;/b&gt;&quot; 에 대해 알아보았습니다. &lt;br /&gt;&lt;br /&gt;다음 편에는 &quot; #02 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Docker Network&lt;/span&gt; &quot;으로 돌아오겠습니다   (!!많관부!!)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;여러분의&amp;nbsp;생각하는&amp;nbsp;부족한&amp;nbsp;점,&amp;nbsp;궁금한&amp;nbsp;점&amp;nbsp;등&amp;nbsp;자유로운&amp;nbsp;의견을&amp;nbsp;남겨주세요!&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>Azure</category>
      <category>cloud</category>
      <category>container</category>
      <category>Docker</category>
      <category>flask</category>
      <category>Linux</category>
      <category>nginx</category>
      <category>도커</category>
      <category>컨테이너</category>
      <category>컨테이너 이미지</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/54</guid>
      <comments>https://with-cloud.tistory.com/54#entry54comment</comments>
      <pubDate>Wed, 29 May 2024 17:19:05 +0900</pubDate>
    </item>
    <item>
      <title>Azure Route Table (Private Endpoint VS VNet Integration)</title>
      <link>https://with-cloud.tistory.com/53</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Route Table 공부하기 시리즈가 끝이 났으나, 마지막에 한 가지 제대로 마무리하지 않은 게 있어 오늘은 간단하게 그 부분에 대해 다뤄보고자 합니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지난 글 : &lt;a href=&quot;https://with-cloud.tistory.com/52&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/52&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715579210486&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;Azure Route Table 공부하기 (5)&quot; data-og-description=&quot;안녕하세요.&amp;nbsp;HYEN입니다.시나리오 세 번째 글이자 이번 Route Table 공부하기의 마지막 글입니다~~~ 물론 마지막 시나리오의 내용 중 추가적으로 다룰 부분은 새로운 글로 적을 예정이지만!&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/52&quot; data-og-url=&quot;https://with-cloud.tistory.com/52&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bKV41O/hyV2A5Hveq/kf4OK1zMwqlxmMBpFTiGp1/img.png?width=800&amp;amp;height=591&amp;amp;face=0_0_800_591,https://scrap.kakaocdn.net/dn/Cwnsy/hyV57Hwvxp/AISYNp9deLpMHBQNwA8EC1/img.png?width=800&amp;amp;height=591&amp;amp;face=0_0_800_591,https://scrap.kakaocdn.net/dn/biIBNj/hyV6kz6puf/CGxur1Jax0CXKTQXGqvs41/img.png?width=1217&amp;amp;height=900&amp;amp;face=0_0_1217_900&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/52&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/52&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bKV41O/hyV2A5Hveq/kf4OK1zMwqlxmMBpFTiGp1/img.png?width=800&amp;amp;height=591&amp;amp;face=0_0_800_591,https://scrap.kakaocdn.net/dn/Cwnsy/hyV57Hwvxp/AISYNp9deLpMHBQNwA8EC1/img.png?width=800&amp;amp;height=591&amp;amp;face=0_0_800_591,https://scrap.kakaocdn.net/dn/biIBNj/hyV6kz6puf/CGxur1Jax0CXKTQXGqvs41/img.png?width=1217&amp;amp;height=900&amp;amp;face=0_0_1217_900');&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;Azure Route Table 공부하기 (5)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요.&amp;nbsp;HYEN입니다.시나리오 세 번째 글이자 이번 Route Table 공부하기의 마지막 글입니다~~~ 물론 마지막 시나리오의 내용 중 추가적으로 다룰 부분은 새로운 글로 적을 예정이지만!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;지난 글에서 Spoke 대역 간 통신 시 Azure Firewall을 거쳐 가도록 구성해 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그중&lt;span&gt;&amp;nbsp;&lt;/span&gt;Spoke 가상 머신 &amp;rarr; Azure Firewall&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr; Private Endpoint&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr; Azure Database for PostgreSQL Flexible Server로 흐르는 트래픽 플로우와&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Spoke 가상 머신&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr; Azure Firewall&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr; Azure Database for PostgreSQL Flexible Server(VNet Integration)로 흐르는 트래픽 플로우 사이에 차이가 있다는 것을 발견하였습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Private Endpoint와 연결된 PostgreSQL 서버의 경우&amp;nbsp;&lt;/span&gt;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;Azure Route Table에 경로 추가 (Destionation을 Private Endpoint subnet으로 하며, 다음 홉이 Azure Firewall인 경로 추가)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Firewall에 VM이 배포된 subnet과 Private Endpoint용 subnet 간 통신이 가능하도록 Network 규칙 추가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 두 가지 과정을 수행해 주면 접근이 되었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그러나 VNet&lt;span&gt;&amp;nbsp;&lt;/span&gt;Integration 된&lt;span&gt;&amp;nbsp;&lt;/span&gt;PostgreSQL 서버의 경우 위의 두 과정을 거쳐도 접근이 되지 않았는데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그 이유는 하기와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Private Endpoint와 연결된 PostgreSQL 서버는 PaaS이기 때문에 가상 네트워크에 포함되지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 이러한 PostgreSQL 서버는 Microsoft 내 구독에 안전하게 배포되어&lt;span&gt;&amp;nbsp;&lt;/span&gt;서비스됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke 가상 머신에서 Azure Firewall을 거쳐 Private Endpoint를 통해서 PostgreSQL 서버에 접근하면 그 트래픽은 PostgreSQL 서버에서 Spoke 가상 머신으로 직접 전달되게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇기 때문에 Azure Route Table에 Spoke 가상 머신이 배포된 subnet을 destination으로 하는 경로를 추가해 주지 않아도 되는 것이죠.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;반면 VNet Integration된 PostgreSQL 서버는 제 VNet 내에 배포되어 있기 때문에 사용자가 직접 모든 경로를 구성해 주어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 Spoke 가상 머신에서 Azure Firewall을 거쳐 PostgreSQL에 접근하는 경로를 생성해 주었다면 PostgreSQL에서 Azure Firewall을 거쳐 Spoke 가상 머신으로 향하는 경로도 생성해 주어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;지금부터 PostgreSQL 서버의 입장에서 Spoke 가상 머신으로 가기 위한 경로를 생성해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Spoke 경로 테이블에서 경로를 추가해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[경로 테이블] &amp;gt; [설정] 블레이드 &amp;gt; [경로] 탭 &amp;gt; [+ 추가]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zF8LH/btsHpeuTBtv/06tlwehZzjZEyyK9g5N6Y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zF8LH/btsHpeuTBtv/06tlwehZzjZEyyK9g5N6Y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zF8LH/btsHpeuTBtv/06tlwehZzjZEyyK9g5N6Y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzF8LH%2FbtsHpeuTBtv%2F06tlwehZzjZEyyK9g5N6Y0%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;783&quot; height=&quot;468&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&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;1534&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnKmbw/btsHo3G9A1Y/wClepwJLQUr4cmn69XJBvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnKmbw/btsHo3G9A1Y/wClepwJLQUr4cmn69XJBvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnKmbw/btsHo3G9A1Y/wClepwJLQUr4cmn69XJBvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnKmbw%2FbtsHo3G9A1Y%2FwClepwJLQUr4cmn69XJBvK%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;1534&quot; height=&quot;266&quot; data-origin-width=&quot;1534&quot; data-origin-height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;경로를 추가해 주고 난 뒤에는 정상적으로 PostgreSQL 서버에 접근이 가능한 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 찜찜한 부분까지 싹 없애보았습니다!! &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음에는 더더욱 유익한 글로 돌아오도록 하겠습니다 ~~~ &lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>Azure</category>
      <category>azure database for postgresql flexible server</category>
      <category>Private Endpoint</category>
      <category>Route table</category>
      <category>vnet integration</category>
      <category>경로 테이블</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/53</guid>
      <comments>https://with-cloud.tistory.com/53#entry53comment</comments>
      <pubDate>Mon, 13 May 2024 14:49:07 +0900</pubDate>
    </item>
    <item>
      <title>Azure Route Table 공부하기 (5)</title>
      <link>https://with-cloud.tistory.com/52</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시나리오 세 번째 글이자 이번 Route Table 공부하기의 마지막 글입니다~~~ &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물론 마지막 시나리오의 내용 중 추가적으로 다룰 부분은 새로운 글로 적을 예정이지만!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;드디어 마무리라니...  감회가 새롭습니다.&lt;/span&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;&lt;span style=&quot;color: #000000;&quot;&gt;이전 글 : &lt;a href=&quot;https://with-cloud.tistory.com/51&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/51&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715322975569&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;Azure Route Table 공부하기 (4)&quot; data-og-description=&quot;안녕하세요.&amp;nbsp;HYEN입니다. 시나리오 두 번째 글로 찾아왔습니다!&amp;nbsp;연휴와 개인 사정이 겹쳐 이전 글과 다소 시간 차가 있지만 양해 부탁드리며, 두 개의 시나리오에 대해 다뤄보았습니다.&amp;nbsp;이전 글&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/51&quot; data-og-url=&quot;https://with-cloud.tistory.com/51&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/B1cch/hyV2zrltYe/wISyptwgfxkpvJ9hGegwI0/img.png?width=800&amp;amp;height=631&amp;amp;face=0_0_800_631,https://scrap.kakaocdn.net/dn/rMGL8/hyV2ElSMxq/j9tKxMcpVvvP77sDUq0I50/img.png?width=800&amp;amp;height=631&amp;amp;face=0_0_800_631,https://scrap.kakaocdn.net/dn/bvbfe4/hyV2up2N3w/XRpx1K8X01FZMkpkZKi6yK/img.png?width=1217&amp;amp;height=960&amp;amp;face=0_0_1217_960&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/51&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/51&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/B1cch/hyV2zrltYe/wISyptwgfxkpvJ9hGegwI0/img.png?width=800&amp;amp;height=631&amp;amp;face=0_0_800_631,https://scrap.kakaocdn.net/dn/rMGL8/hyV2ElSMxq/j9tKxMcpVvvP77sDUq0I50/img.png?width=800&amp;amp;height=631&amp;amp;face=0_0_800_631,https://scrap.kakaocdn.net/dn/bvbfe4/hyV2up2N3w/XRpx1K8X01FZMkpkZKi6yK/img.png?width=1217&amp;amp;height=960&amp;amp;face=0_0_1217_960');&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;Azure Route Table 공부하기 (4)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요.&amp;nbsp;HYEN입니다. 시나리오 두 번째 글로 찾아왔습니다!&amp;nbsp;연휴와 개인 사정이 겹쳐 이전 글과 다소 시간 차가 있지만 양해 부탁드리며, 두 개의 시나리오에 대해 다뤄보았습니다.&amp;nbsp;이전 글&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 시나리오&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.5&amp;nbsp;Spoke VM &amp;rarr; Spoke 대역의 PostgreSQL&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;시나리오 아키텍처 및 구성하고자 하는 트래픽 플로우는 다음과 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;SpokeVM-PostgreSQL.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xFjs7/btsHj1jSN4r/00QVXO8w4vo7dsLJhviMJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xFjs7/btsHj1jSN4r/00QVXO8w4vo7dsLJhviMJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xFjs7/btsHj1jSN4r/00QVXO8w4vo7dsLJhviMJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxFjs7%2FbtsHj1jSN4r%2F00QVXO8w4vo7dsLJhviMJ0%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;745&quot; height=&quot;551&quot; data-filename=&quot;SpokeVM-PostgreSQL.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;현재 Spoke 가상 네트워크 내에서의 통신은 Azure Firewall을 거치지 않고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;경로 테이블의 유효 경로를 확인해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;621&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwFtHE/btsHlHYZRgW/fKiLnKoG3G2CaOn3gkUh81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwFtHE/btsHlHYZRgW/fKiLnKoG3G2CaOn3gkUh81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwFtHE/btsHlHYZRgW/fKiLnKoG3G2CaOn3gkUh81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwFtHE%2FbtsHlHYZRgW%2FfKiLnKoG3G2CaOn3gkUh81%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;806&quot; height=&quot;421&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;621&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke 가상 머신이 배포된 서브넷의 유효 경로는 상기 스크린샷과 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 홉이 가상 네트워크인 경로가 활성화되어 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, Spoke 가상 네트워크 내에서는 Azure Firewall을 거치지 않고 가상 네트워크 내에서 각 서브넷으로 라우팅이 되게 되는 것이죠.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;가상 머신의 [연결 문제 해결] 탭에서도 다음 홉 형식을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke 가상 머신에서 VNet Integration된 Azure Database for PostgreSQL Flexible Server로 향하는 트래픽에 대한 다음 홉을 테스트해 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnrJBQ/btsHmDuMcNe/rHnfhFiF3DuD15wQSaDcMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnrJBQ/btsHmDuMcNe/rHnfhFiF3DuD15wQSaDcMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnrJBQ/btsHmDuMcNe/rHnfhFiF3DuD15wQSaDcMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnrJBQ%2FbtsHmDuMcNe%2FrHnfhFiF3DuD15wQSaDcMk%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;656&quot; height=&quot;277&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상기 스크린샷과 같이 사용자 지정 경로를 따르는 것이 아니라 default로 정의된 시스템 경로를 따르는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그렇다면 Private Endpoint와 연결된 Azure Database for PostgreSQL Flexible Server는 어떨까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;경로 테이블의 유효 경로에는 하기와 같이 InterfaceEndpoint 즉 Private Endpoint를 다음 홉으로 하는 시스템 경로가 존재하는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;621&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnc1ib/btsHjTsD728/PPoWRceDzLPiUkS9fokKyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnc1ib/btsHjTsD728/PPoWRceDzLPiUkS9fokKyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnc1ib/btsHjTsD728/PPoWRceDzLPiUkS9fokKyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcnc1ib%2FbtsHjTsD728%2FPPoWRceDzLPiUkS9fokKyK%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;801&quot; height=&quot;418&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;621&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;가상 머신의 [연결 문제 해결] 탭에서도 Private Endpoint의 Private IP를 목적지로 설정하여 다음 홉에 대한 진단을 실행하면 하기와 같이 트래픽이 다음 홉이 PrivateEndpoint인 시스템 경로를 따르는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBXWFl/btsHkJXzHCv/7B2zChKK3FKaz3rWUKBcFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBXWFl/btsHkJXzHCv/7B2zChKK3FKaz3rWUKBcFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBXWFl/btsHkJXzHCv/7B2zChKK3FKaz3rWUKBcFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBXWFl%2FbtsHkJXzHCv%2F7B2zChKK3FKaz3rWUKBcFk%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;286&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;406&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Hub와 통신할 때에는 Azure Firewall을 거치고 Spoke 내에서는 각 서브넷끼리 직접 통신할 수 있도록 구성이 잘 되어 있음을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.6&amp;nbsp;Spoke VM &amp;rarr; Azure Firewall &amp;rarr; Spoke 대역의 PostgreSQL&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면, Spoke 내에서의 통신도 Azure Firewall을 거쳐가게 할 수 있을까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;답은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;YES&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;앞서 Azure의 경로 테이블은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;Longest Prefix Match&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;알고리즘을 따른다고 했는데요.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 Spoke 내에서의 통신에 대한 경로는 다음과 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;621&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EM9Er/btsHmFzmAqo/OYytmXiTmLsUcXCaudfEy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EM9Er/btsHmFzmAqo/OYytmXiTmLsUcXCaudfEy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EM9Er/btsHmFzmAqo/OYytmXiTmLsUcXCaudfEy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEM9Er%2FbtsHmFzmAqo%2FOYytmXiTmLsUcXCaudfEy1%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;816&quot; height=&quot;426&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;621&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이보다 더 대역이 작은 사용자 지정 경로를 지정하여 다음 홉 유형을 가상 어플라이언스로 지정해 준다면 Spoke 대역 내에서의 통신도 Azure Firewall을 거치게 될 것입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;먼저, Spoke 가상 머신에서 Azure Firewall을 거쳐, Private Endpoint와 연결된 Azure Database for PostgreSQL Flexible Server에 접근하도록 테스트해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시나리오 아키텍처 및 구성하고자 하는 트래픽 플로우는 다음과 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;SpokeVM-FW-PostgreSQL①.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;1110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dc1Ueh/btsHmQt3Vqt/lDtT3z4AtwgJ5ac1kanukk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dc1Ueh/btsHmQt3Vqt/lDtT3z4AtwgJ5ac1kanukk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dc1Ueh/btsHmQt3Vqt/lDtT3z4AtwgJ5ac1kanukk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdc1Ueh%2FbtsHmQt3Vqt%2FlDtT3z4AtwgJ5ac1kanukk%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;708&quot; data-filename=&quot;SpokeVM-FW-PostgreSQL①.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;1110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이를 위해 Spoke 경로 테이블에 서브넷 단위의 사용자 지정 경로를 추가해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[경로 테이블] &amp;gt; [설정] 블레이드 &amp;gt; [경로] 탭 &amp;gt; [+ 추가]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YysLc/btsHkVjyJNC/4gUklk7PRtI2K7DJocIku1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YysLc/btsHkVjyJNC/4gUklk7PRtI2K7DJocIku1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YysLc/btsHkVjyJNC/4gUklk7PRtI2K7DJocIku1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYysLc%2FbtsHkVjyJNC%2F4gUklk7PRtI2K7DJocIku1%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;791&quot; height=&quot;458&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위의 경로를 생성하면, 해당 경로 테이블과 연결된 서브넷들 중 대상 IP 주소로 가려고 하는 트래픽이 있을 경우 이 트래픽은 Azure Firewall로 보내지게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇게 되면 Azure Firewall과 연결된 방화벽 정책에 연결된 규칙에 기반하여 트래픽이 라우팅 되게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;따라서 Azure Firewall로 보내진 트래픽이 목적지를 찾아갈 수 있도록 이번에는 방화벽 정책에 Network 규칙을 생성해 주겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 기존 규칙 컬렉션 (Hub-Spoke 간 통신 관련)과 다른 새로운 규칙 컬렉션을 생성합니다. ([설정] 블레이드 &amp;gt; [규칙 컬렉션] 탭 &amp;gt; [+ Add] &amp;gt; [Rule Collection])&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPQdPx/btsHj0SN3Lb/k7j91LevKDSGzFSuvGrudk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPQdPx/btsHj0SN3Lb/k7j91LevKDSGzFSuvGrudk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPQdPx/btsHj0SN3Lb/k7j91LevKDSGzFSuvGrudk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPQdPx%2FbtsHj0SN3Lb%2Fk7j91LevKDSGzFSuvGrudk%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;829&quot; height=&quot;316&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설정이 완료되었으니 가상 머신의 [연결 문제 해결] 탭에서 연결 진단을 통해 다음 홉에 대해 확인해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKmB1p/btsHl4TXldd/jkMD1kSRKC4klBSXF3fwk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKmB1p/btsHl4TXldd/jkMD1kSRKC4klBSXF3fwk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKmB1p/btsHl4TXldd/jkMD1kSRKC4klBSXF3fwk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKmB1p%2FbtsHl4TXldd%2FjkMD1kSRKC4klBSXF3fwk0%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;764&quot; height=&quot;328&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;진단 결과 다음 홉 유형이 가상 어플라이언스(Azure Firewall)로 트래픽이 시스템 경로가 아닌 방금 전 지정해 준 사용자 지정 경로를 따라 흐르는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Spoke 가상 머신에서도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;PostgreSQL 서버에&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;접근해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ydNhV/btsHkMfIQrP/qRCjwv8Me7eT2QMpNFRkkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ydNhV/btsHkMfIQrP/qRCjwv8Me7eT2QMpNFRkkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ydNhV/btsHkMfIQrP/qRCjwv8Me7eT2QMpNFRkkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FydNhV%2FbtsHkMfIQrP%2FqRCjwv8Me7eT2QMpNFRkkk%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;818&quot; height=&quot;137&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;255&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;잘 접근되는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;다음은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Spoke 가상 머신에서 Azure Firewall을 거쳐,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;VNet Integration 된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Azure Database for PostgreSQL Flexible Server에 접근하도록 테스트해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시나리오 아키텍처 및 구성하고자 하는 트래픽 플로우는 다음과 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;SpokeVM-FW-PostgreSQL①.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;1170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8dRYk/btsHjXodQD9/AbUgcRiVz1E9hhdLkFjfrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8dRYk/btsHjXodQD9/AbUgcRiVz1E9hhdLkFjfrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8dRYk/btsHjXodQD9/AbUgcRiVz1E9hhdLkFjfrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8dRYk%2FbtsHjXodQD9%2FAbUgcRiVz1E9hhdLkFjfrk%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;761&quot; height=&quot;732&quot; data-filename=&quot;SpokeVM-FW-PostgreSQL①.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;1170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;이를 위해 Spoke 경로 테이블에 서브넷 단위의 사용자 지정 경로를 추가해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[경로 테이블] &amp;gt; [설정] 블레이드 &amp;gt; [경로] 탭 &amp;gt; [+ 추가]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1297&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MxPNo/btsHlFfN6bC/AESWlubnZPdonQPKGOiX7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MxPNo/btsHlFfN6bC/AESWlubnZPdonQPKGOiX7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MxPNo/btsHlFfN6bC/AESWlubnZPdonQPKGOiX7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMxPNo%2FbtsHlFfN6bC%2FAESWlubnZPdonQPKGOiX7K%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;812&quot; height=&quot;476&quot; data-origin-width=&quot;1297&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;다음으로 Azure Firewall에 가상 머신 &amp;harr; Azure Database for PostgreSQL Flexible Server (VNet Integration) 간 통신에 필요한 Network 규칙을 추가해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXRRm8/btsHjX2RJv2/Dk6Kzla1sXwOh0tzZ0doi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXRRm8/btsHjX2RJv2/Dk6Kzla1sXwOh0tzZ0doi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXRRm8/btsHjX2RJv2/Dk6Kzla1sXwOh0tzZ0doi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXRRm8%2FbtsHjX2RJv2%2FDk6Kzla1sXwOh0tzZ0doi0%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;798&quot; height=&quot;348&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;설정이 완료되었으니 가상 머신의 [연결 문제 해결] 탭에서 연결 진단을 통해 다음 홉에 대해 확인해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD3yxr/btsHmcEsQX7/eSlVQD5JEbTaPlT0gPlXgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD3yxr/btsHmcEsQX7/eSlVQD5JEbTaPlT0gPlXgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD3yxr/btsHmcEsQX7/eSlVQD5JEbTaPlT0gPlXgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD3yxr%2FbtsHmcEsQX7%2FeSlVQD5JEbTaPlT0gPlXgk%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;955&quot; height=&quot;406&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;406&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;진단 결과 다음 홉 유형이 가상 어플라이언스(Azure Firewall)로 트래픽이 시스템 경로가 아닌 방금 전 지정해 준 사용자 지정 경로를 따라 흐르는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Spoke 가상 머신에서도 PostgreSQL 서버에 접근해 보겠습니다.&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;1535&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cp5q3B/btsHjXaI8jc/rYoyuB1Fkqphjle4lrorH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cp5q3B/btsHjXaI8jc/rYoyuB1Fkqphjle4lrorH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cp5q3B/btsHjXaI8jc/rYoyuB1Fkqphjle4lrorH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcp5q3B%2FbtsHjXaI8jc%2FrYoyuB1Fkqphjle4lrorH0%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;1535&quot; height=&quot;149&quot; data-origin-width=&quot;1535&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Private Endpoint와 연결된 PostgreSQL 서버와는 다르게 접근이 안 되는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이 이유에 대해서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;다음 글에서 다루도록 하겠습니다!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;긴 글 읽어주셔서 감사합니다!&amp;nbsp;&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>Azure</category>
      <category>azure database for postgresql flexible server</category>
      <category>Route table</category>
      <category>UDR</category>
      <category>경로 테이블</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/52</guid>
      <comments>https://with-cloud.tistory.com/52#entry52comment</comments>
      <pubDate>Fri, 10 May 2024 15:37:39 +0900</pubDate>
    </item>
    <item>
      <title>Azure Route Table 공부하기 (4)</title>
      <link>https://with-cloud.tistory.com/51</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시나리오 두 번째 글로 찾아왔습니다!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연휴와 개인 사정이 겹쳐 이전 글과 다소 시간 차가 있지만 양해 부탁드리며, 두 개의 시나리오에 대해 다뤄보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이전 글 : &lt;a href=&quot;https://with-cloud.tistory.com/50&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/50&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715232971568&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;Azure Route Table 공부하기 (3)&quot; data-og-description=&quot;안녕하세요.&amp;nbsp;HYEN입니다. 드디어 시나리오 별 UDR을 구성하는 테스트에 대한 글을 쓰게 되었습니다.  물론, 이 글도 길어져서 시나리오를 두, 세 개씩 쪼개어 시리즈 물로 작성될 예정입니다.&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/50&quot; data-og-url=&quot;https://with-cloud.tistory.com/50&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bygwrc/hyVZkPNHRk/vp8d9XQk0xlE3HQv58ty2k/img.png?width=800&amp;amp;height=454&amp;amp;face=0_0_800_454,https://scrap.kakaocdn.net/dn/bVN2hk/hyV2wuiewH/cccbKurSJEy7a1hOx8HtQk/img.png?width=800&amp;amp;height=454&amp;amp;face=0_0_800_454,https://scrap.kakaocdn.net/dn/eYhRh/hyV2CnIVOl/sFInYcyfXywWeXRIoXnPI0/img.png?width=1323&amp;amp;height=752&amp;amp;face=0_0_1323_752&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/50&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/50&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bygwrc/hyVZkPNHRk/vp8d9XQk0xlE3HQv58ty2k/img.png?width=800&amp;amp;height=454&amp;amp;face=0_0_800_454,https://scrap.kakaocdn.net/dn/bVN2hk/hyV2wuiewH/cccbKurSJEy7a1hOx8HtQk/img.png?width=800&amp;amp;height=454&amp;amp;face=0_0_800_454,https://scrap.kakaocdn.net/dn/eYhRh/hyV2CnIVOl/sFInYcyfXywWeXRIoXnPI0/img.png?width=1323&amp;amp;height=752&amp;amp;face=0_0_1323_752');&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;Azure Route Table 공부하기 (3)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요.&amp;nbsp;HYEN입니다. 드디어 시나리오 별 UDR을 구성하는 테스트에 대한 글을 쓰게 되었습니다.  물론, 이 글도 길어져서 시나리오를 두, 세 개씩 쪼개어 시리즈 물로 작성될 예정입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 시나리오&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.3 Hub VM &amp;rarr; Azure Firewall &amp;rarr; PostgreSQL (VNet Integration)&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시나리오 아키텍처 및 구성하고자 하는 트래픽 플로우는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;HubVM-FW-PostgreSQL01.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bI7TN6/btsHkWIoTXt/KUzg2QpUhO30ndvBWUyntK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bI7TN6/btsHkWIoTXt/KUzg2QpUhO30ndvBWUyntK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bI7TN6/btsHkWIoTXt/KUzg2QpUhO30ndvBWUyntK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbI7TN6%2FbtsHkWIoTXt%2FKUzg2QpUhO30ndvBWUyntK%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;766&quot; height=&quot;604&quot; data-filename=&quot;HubVM-FW-PostgreSQL01.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 위해 3.2 에서 수행했던 과정을 동일하게 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그 전에 Azure Database for PostgreSQL Flexible Server에 대한 Private DNS Zone에 Hub 대역의 가상 네트워크를 연결해 주어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;privatelink.postgres.database.azure.com&lt;/b&gt;이라는 이름의 Private DNS Zone을 찾아 [설정] 블레이드의 [가상 네트워크 링크] 탭을 클릭합니다. [+ 추가] 버튼을 클릭하여 가상 네트워크 링크를 진행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ch4p2t/btsHg57QPpf/ZNavBFi1dhZWxTIz8ysKWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ch4p2t/btsHg57QPpf/ZNavBFi1dhZWxTIz8ysKWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch4p2t/btsHg57QPpf/ZNavBFi1dhZWxTIz8ysKWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fch4p2t%2FbtsHg57QPpf%2FZNavBFi1dhZWxTIz8ysKWk%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;799&quot; height=&quot;236&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;353&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;링크 이름과 연결할 가상 네트워크(Hub VNet)를 선택한 후 [확인] 버튼을 클릭하여 링크 생성을 마무리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beMl1J/btsHiF8o0dZ/FV2qT4zH28khkk92pUhozk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beMl1J/btsHiF8o0dZ/FV2qT4zH28khkk92pUhozk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beMl1J/btsHiF8o0dZ/FV2qT4zH28khkk92pUhozk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeMl1J%2FbtsHiF8o0dZ%2FFV2qT4zH28khkk92pUhozk%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;571&quot; height=&quot;367&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 다음, 각 대역의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;&lt;b&gt;사용자 지정 경로&lt;/b&gt;&lt;/u&gt;에 서브넷을 연결하고 경로를 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Hub 대역의 경로 테이블]&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;Hub 가상 머신이 배포되어 있는 서브넷은 이미 Hub 대역의 경로 테이블과 연결되어 있기 때문에 서브넷 연결 과정은 진행하지 않아도 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경로 역시 이미 0.0.0.0/0, 즉 모든 트래픽에 대해 Azure Firewall로 라우팅되도록 구성되어 있기 때문에 해당 과정은 진행하지 않아도 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Spoke 대역의 경로 테이블]&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;[설정] 블레이드 &amp;gt; [서브넷] 탭 &amp;gt; [+ 연결]&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AueQ6/btsHjVo6nwc/wRQv0WrHQ2kGIwboA5ll90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AueQ6/btsHjVo6nwc/wRQv0WrHQ2kGIwboA5ll90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AueQ6/btsHjVo6nwc/wRQv0WrHQ2kGIwboA5ll90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAueQ6%2FbtsHjVo6nwc%2FwRQv0WrHQ2kGIwboA5ll90%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;548&quot; height=&quot;232&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;257&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke 대역에서 Hub 가상 머신으로 가기 위한 경로는 이미 구성되어 있기 때문에 경로는 추가로 생성하지 않아도 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경로를 추가한 후 방화벽 정책으로 이동하여 Network 규칙을 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[설정] 블레이드 &amp;gt; [규칙 컬렉션] 탭에서 Network 규칙 컬렉션을 선택합니다. (규칙을 한번에 추가하기 위함입니다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2N44I/btsHjXgbpdK/H32glDXHK68nzuAiBFM0v0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2N44I/btsHjXgbpdK/H32glDXHK68nzuAiBFM0v0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2N44I/btsHjXgbpdK/H32glDXHK68nzuAiBFM0v0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2N44I%2FbtsHjXgbpdK%2FH32glDXHK68nzuAiBFM0v0%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;673&quot; height=&quot;309&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;352&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub &amp;harr; Postgre01(VNet Integration) 연결을 위해 Network 규칙을 생성해 줍니다.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;483&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boEAeX/btsHjTSmXiT/XTxgGz87JRHptpSPIk2YqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boEAeX/btsHjTSmXiT/XTxgGz87JRHptpSPIk2YqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boEAeX/btsHjTSmXiT/XTxgGz87JRHptpSPIk2YqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboEAeX%2FbtsHjTSmXiT%2FXTxgGz87JRHptpSPIk2YqK%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;769&quot; height=&quot;336&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;483&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;From-Hub-to-Postgre01 규칙만 추가하면 Hub 가상 머신에서 Azure Firewall을 거쳐 Postgre01까지 가는 트래픽만 허용됩니다. 따라서,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;From-Postgre01-to-Hub 규칙을 추가해서 Postgre01에서 Azure Firewall을 거쳐 Hub 가상 머신으로 가는 트래픽이 허용될 수 있도록 해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규칙 생성이 완료된 후, Hub 가상 머신에서 Postgre01에 접근해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;접근하기 위한 명령어는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Azure Database for PostgreSQL Flexible Server의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;[설정] 블레이드 &amp;gt; [연결] 탭의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;브라우저에서 또는 로컬에서 연결&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;섹션을 확인하면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1007&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NZlJy/btsHieXx2ng/8R5EwcsXQ6wiI9wCioTYLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NZlJy/btsHieXx2ng/8R5EwcsXQ6wiI9wCioTYLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NZlJy/btsHieXx2ng/8R5EwcsXQ6wiI9wCioTYLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNZlJy%2FbtsHieXx2ng%2F8R5EwcsXQ6wiI9wCioTYLk%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;743&quot; height=&quot;393&quot; data-origin-width=&quot;1007&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(아키텍처 상에는 VNet Integration된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Azure Database for PostgreSQL Flexible Server 명이 postgre-hyein-01로 되어 있으나 실제 리소스 생성 명은 postgre-hyein-02인 점 양해 부탁드립니다.  )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 복사하여 Hub 가상 머신에서 실행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6uvPc/btsHi4mxoXq/PVojW5TLpNuNFme7KWmkyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6uvPc/btsHi4mxoXq/PVojW5TLpNuNFme7KWmkyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6uvPc/btsHi4mxoXq/PVojW5TLpNuNFme7KWmkyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6uvPc%2FbtsHi4mxoXq%2FPVojW5TLpNuNFme7KWmkyk%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;755&quot; height=&quot;136&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;접근이 잘 되는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신의 [도움말] &amp;gt; [연결 문제 해결] 탭에서 다음 홉을 확인하여 트래픽이 예상한 대로 흐르는지 확인해 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 확인하기 위해서는 먼저 IP 주소 확인이 필요한데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;privatelink.postgres.database.azure.com이라는 이름의 Private DNS Zone으로 이동하여 레코드를 확인합니다.&amp;nbsp;&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;1275&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5No1m/btsHjZkJrZH/wE7iOaFZggFCfWNAK4gVIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5No1m/btsHjZkJrZH/wE7iOaFZggFCfWNAK4gVIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5No1m/btsHjZkJrZH/wE7iOaFZggFCfWNAK4gVIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5No1m%2FbtsHjZkJrZH%2FwE7iOaFZggFCfWNAK4gVIK%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;1275&quot; height=&quot;535&quot; data-origin-width=&quot;1275&quot; data-origin-height=&quot;535&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 IP 주소를 복사해 둡니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다시 [연결 문제 해결] 탭으로 이동하여 대상 주소 섹션 중 &quot;URI, FQDN 또는 IP 주소&quot; 칸에 복사해 둔 IP 주소를 입력합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oMoSB/btsHi3Bdfhz/SqKGvqNWOQXxD5P3h5Er9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oMoSB/btsHi3Bdfhz/SqKGvqNWOQXxD5P3h5Er9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oMoSB/btsHi3Bdfhz/SqKGvqNWOQXxD5P3h5Er9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoMoSB%2FbtsHi3Bdfhz%2FSqKGvqNWOQXxD5P3h5Er9k%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;649&quot; height=&quot;611&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;724&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;995&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxd6RB/btsHkLzLm6z/vr6cXMVBjYB9FEB1An2Bik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxd6RB/btsHkLzLm6z/vr6cXMVBjYB9FEB1An2Bik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxd6RB/btsHkLzLm6z/vr6cXMVBjYB9FEB1An2Bik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdxd6RB%2FbtsHkLzLm6z%2Fvr6cXMVBjYB9FEB1An2Bik%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;838&quot; height=&quot;340&quot; data-origin-width=&quot;995&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;진단 테스트 결과 현재 다음 홉이 VirtualNetworkPeering으로 지정되어 있는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 테스트 시나리오대로 트래픽이 흐르고 있지 않은 것을 의미합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;무엇이 문제일까요?  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;답은 경로에 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure는 Longest Prefix Match 알고리즘을 따르기 때문에 접두사가 더 긴, 즉 주소 대역이 더 작은 경로를 따르게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 udr-hub-hyein이라는 경로 테이블의 유효 경로 테이블은 하기와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bq9Vhu/btsHkW8SMli/YjkMgG9MFnckvdN7tsqj7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bq9Vhu/btsHkW8SMli/YjkMgG9MFnckvdN7tsqj7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bq9Vhu/btsHkW8SMli/YjkMgG9MFnckvdN7tsqj7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbq9Vhu%2FbtsHkW8SMli%2FYjkMgG9MFnckvdN7tsqj7k%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;823&quot; height=&quot;179&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;0.0.0.0/0 즉 모든 트래픽에 대한 다음 홉이 Azure Firewall로 지정되어 있지만 그 보다 더 작은 범위인 10.100.0.0/24 즉, Spoke 대역의 가상 네트워크에 대한 다음 홉이 VNet 피어링으로 지정되어 있기 때문에 트래픽은 Azure Firewall이 아니라 VNet Peering이 다음 홉인 경로를 따라가고 있음을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 경로 테이블에 Spoke 가상 네트워크 대역보다 작거나 동일한 크기의 대역에 대한 경로를 명시해 주어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[경로 테이블] &amp;gt; [설정] 블레이드 &amp;gt; [경로] 탭에서 경로를 추가해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9p5BU/btsHg6lmZFy/8i0toOfB7aLVcbIOxTKd0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9p5BU/btsHg6lmZFy/8i0toOfB7aLVcbIOxTKd0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9p5BU/btsHg6lmZFy/8i0toOfB7aLVcbIOxTKd0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9p5BU%2FbtsHg6lmZFy%2F8i0toOfB7aLVcbIOxTKd0K%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;473&quot; height=&quot;393&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;649&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경로를 추가한 후 다시 연결 진단을 실행하면 이번에는 트래픽이 하기와 같이 다음 홉 유형이 Azure Firewall인 경로를 따라 흐르는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPS4Rc/btsHhULOe2U/BlYzTlpogOObKKFkChUVvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPS4Rc/btsHhULOe2U/BlYzTlpogOObKKFkChUVvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPS4Rc/btsHhULOe2U/BlYzTlpogOObKKFkChUVvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPS4Rc%2FbtsHhULOe2U%2FBlYzTlpogOObKKFkChUVvk%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;637&quot; height=&quot;359&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;410&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.4 Hub VM &amp;rarr; Azure Firewall &amp;rarr; PostgreSQL (Private Endpoint)&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;시나리오 아키텍&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;처 및 구성하고자 하는 트래픽 플로우는 다음과 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;HubVM-FW-PostgreSQL02.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X6Dj1/btsHi6FeBRv/T37TlMsUYe6uFcD2h3wot0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X6Dj1/btsHi6FeBRv/T37TlMsUYe6uFcD2h3wot0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X6Dj1/btsHi6FeBRv/T37TlMsUYe6uFcD2h3wot0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX6Dj1%2FbtsHi6FeBRv%2FT37TlMsUYe6uFcD2h3wot0%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;783&quot; height=&quot;618&quot; data-filename=&quot;HubVM-FW-PostgreSQL02.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경로 테이블을 구성하기에 앞서 먼저 서브넷의&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&quot;프라이빗 엔드포인트에 대한 네트워크 정책&quot;&lt;/i&gt;&lt;/b&gt;을 활성화 시켜야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 정책은 Private Endpoint에 대해 사용자 정의 경로 및 네트워크 보안 그룹과 같은 네트워크 정책을 사용하고자 할 경우 활성화 시켜야 하는 정책입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단, 해당 설정은 서브넷의 Private Endpoint에만 적용되며 서브넷의 모든 Private Endpoint에 영향을 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[가상 네트워크] &amp;gt; [설정] 블레이드 &amp;gt; [서브넷] 탭에서 해당 정책을 활성화할 서브넷을 선택합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 후, 가장 하단에 있는 프라이빗 엔드포인트에 대한 네트워크 정책 탭에서 [경로 테이블]을 선택합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYJZo4/btsHhStHuqC/HkYw8zzbOl6gZvGs9igYF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYJZo4/btsHhStHuqC/HkYw8zzbOl6gZvGs9igYF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYJZo4/btsHhStHuqC/HkYw8zzbOl6gZvGs9igYF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYJZo4%2FbtsHhStHuqC%2FHkYw8zzbOl6gZvGs9igYF1%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;780&quot; height=&quot;390&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;464&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Hub 대역의 경로 테이블]&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;Hub 가상 머신이 배포되어 있는 서브넷은 이미 Hub 대역의 경로 테이블과 연결되어 있기 때문에 서브넷 연결 과정은 진행하지 않아도 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경로 역시 이미 0.0.0.0/0, 즉 모든 트래픽에 대해 Azure Firewall로 라우팅되도록 구성되어 있기 때문에 해당 과정은 진행하지 않아도 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Spoke 대역의 경로 테이블]&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;[설정] 블레이드 &amp;gt; [서브넷] 탭 &amp;gt; [+ 연결]&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFa4w1/btsHjWO6PX3/fL4wl2SwSjYhQN6Oz59GO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFa4w1/btsHjWO6PX3/fL4wl2SwSjYhQN6Oz59GO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFa4w1/btsHjWO6PX3/fL4wl2SwSjYhQN6Oz59GO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFa4w1%2FbtsHjWO6PX3%2FfL4wl2SwSjYhQN6Oz59GO0%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;528&quot; height=&quot;249&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke 대역에서 Hub 가상 머신으로 가기 위한 경로는 이미 구성되어 있기 때문에 경로는 추가로 생성하지 않아도 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;경로를 추가한 후 방화벽 정책으로 이동하여 Network 규칙을 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[설정] 블레이드 &amp;gt; [규칙 컬렉션] 탭에서 Network 규칙 컬렉션을 선택합니다. (규칙을 한번에 추가하기 위함입니다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deyLXI/btsHg57QQVc/jnuF788ZMzJd2KcbKzhobk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deyLXI/btsHg57QQVc/jnuF788ZMzJd2KcbKzhobk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deyLXI/btsHg57QQVc/jnuF788ZMzJd2KcbKzhobk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeyLXI%2FbtsHg57QQVc%2FjnuF788ZMzJd2KcbKzhobk%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;795&quot; height=&quot;425&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;From-Hub-to-Postgre02 규칙의 대상에는 Postgre02와 연결된 Private Endpoint가 배포되어 있는 서브넷의 대역을 입력해 주면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.3 과정과 동일하게 Postgre02에 접근해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pjgFs/btsHkKOoUI4/WZU4rxIk7r0dYatYmPt1H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pjgFs/btsHkKOoUI4/WZU4rxIk7r0dYatYmPt1H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pjgFs/btsHkKOoUI4/WZU4rxIk7r0dYatYmPt1H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpjgFs%2FbtsHkKOoUI4%2FWZU4rxIk7r0dYatYmPt1H0%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;795&quot; height=&quot;110&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;접근이 잘 되는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;다음으로 가상 머신 쪽에서 연결 진단을 실행해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nIZi7/btsHiGe9qTh/wy9bePIgkquNrX1ViwirN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nIZi7/btsHiGe9qTh/wy9bePIgkquNrX1ViwirN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nIZi7/btsHiGe9qTh/wy9bePIgkquNrX1ViwirN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnIZi7%2FbtsHiGe9qTh%2Fwy9bePIgkquNrX1ViwirN0%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;250&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 홉이 Azure Firewall인 경로로 트래픽이 잘 흐르는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Hub 가상 머신에서 Spoke 대역으로 접근하는 부분에 대한 테스트를 마무리하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 Spoke 대역 간의 통신에 대해 다뤄보도록 하겠습니다.  &lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>Azure</category>
      <category>azure database for postgresql flexible server</category>
      <category>azure route table</category>
      <category>longest prefix match</category>
      <category>UDR</category>
      <category>경로 테이블</category>
      <category>사용자 지정 경로</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/51</guid>
      <comments>https://with-cloud.tistory.com/51#entry51comment</comments>
      <pubDate>Thu, 9 May 2024 14:36:47 +0900</pubDate>
    </item>
    <item>
      <title>Azure Route Table 공부하기 (3)</title>
      <link>https://with-cloud.tistory.com/50</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;드디어 시나리오 별 UDR을 구성하는 테스트에 대한 글을 쓰게 되었습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물론, 이 글도 길어져서 시나리오를 두, 세 개씩 쪼개어 시리즈 물로 작성할 예정입니다.  &lt;/span&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;&lt;span style=&quot;color: #000000;&quot;&gt;지난 글 :&lt;span&gt; &lt;a href=&quot;https://with-cloud.tistory.com/49&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/49&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1714632335351&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;Azure Route Table 공부하기 (2)&quot; data-og-description=&quot;안녕하세요.&amp;nbsp;HYEN입니다. 지난 글에서는 Azure Route Table의 개념과 동작 로직에 대해 알아보았습니다.&amp;nbsp;&amp;nbsp;지난 글 :&amp;nbsp;https://with-cloud.tistory.com/47&amp;nbsp;Azure Route Table 공부하기 (1)안녕하세요.&amp;nbsp;HYEN입니다.어제,&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/49&quot; data-og-url=&quot;https://with-cloud.tistory.com/49&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/brD2zm/hyVZgLJvpM/Rs6bz4oso0kN3KXxk4p9lk/img.png?width=765&amp;amp;height=599&amp;amp;face=0_0_765_599,https://scrap.kakaocdn.net/dn/hGooj/hyVZibJsDX/w4FsNPsCJQDVkUuljWTjm1/img.png?width=765&amp;amp;height=599&amp;amp;face=0_0_765_599,https://scrap.kakaocdn.net/dn/b4vMEA/hyVVIC9jUY/54KJuZnNpMU2WewFY1MZqK/img.png?width=762&amp;amp;height=603&amp;amp;face=0_0_762_603&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/49&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/49&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/brD2zm/hyVZgLJvpM/Rs6bz4oso0kN3KXxk4p9lk/img.png?width=765&amp;amp;height=599&amp;amp;face=0_0_765_599,https://scrap.kakaocdn.net/dn/hGooj/hyVZibJsDX/w4FsNPsCJQDVkUuljWTjm1/img.png?width=765&amp;amp;height=599&amp;amp;face=0_0_765_599,https://scrap.kakaocdn.net/dn/b4vMEA/hyVVIC9jUY/54KJuZnNpMU2WewFY1MZqK/img.png?width=762&amp;amp;height=603&amp;amp;face=0_0_762_603');&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;Azure Route Table 공부하기 (2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요.&amp;nbsp;HYEN입니다. 지난 글에서는 Azure Route Table의 개념과 동작 로직에 대해 알아보았습니다.&amp;nbsp;&amp;nbsp;지난 글 :&amp;nbsp;https://with-cloud.tistory.com/47&amp;nbsp;Azure Route Table 공부하기 (1)안녕하세요.&amp;nbsp;HYEN입니다.어제,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 시나리오&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트할 시나리오는 총 6개로 하기와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Local PC &amp;rarr; Azure Firewall &amp;rarr; Hub VM (DNAT Rule)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub VM &amp;rarr; Azure Firewall &amp;rarr; Spoke VM&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub VM &amp;rarr; Azure Firewall &amp;rarr; PostgreSQL (VNet Integration)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub VM &amp;rarr; Azure Firewall &amp;rarr; PostgreSQL (Private Endpoint)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke VM &amp;rarr; Azure Firewall &amp;rarr; Spoke 대역의 PostgreSQL&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke VM &amp;rarr; Spoke 대역의 PostgreSQL&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.1 Local PC &amp;rarr; Azure Firewall &amp;rarr; Hub VM (DNAT Rule)&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시나리오 아키텍처 및 구성하고자 하는 트래픽 플로우는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Local PC-to-HubVM.png&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQiTQy/btsG8CJp076/IkBjYvUTZTguGE3wR4k21K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQiTQy/btsG8CJp076/IkBjYvUTZTguGE3wR4k21K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQiTQy/btsG8CJp076/IkBjYvUTZTguGE3wR4k21K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQiTQy%2FbtsG8CJp076%2FIkBjYvUTZTguGE3wR4k21K%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;796&quot; height=&quot;452&quot; data-filename=&quot;Local PC-to-HubVM.png&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이를 위해서는 Azure Firewall에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DNAT 규칙&lt;/b&gt;을 생성해 주어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, Local PC에서 Hub VM에 접근하기 위해 Azure Firewall의 공인 IP 주소를 입력하면 해당 주소가 Hub 가상 머신의 사설 IP로 DNAT 될 수 있도록 규칙을 생성해야 하는 것이죠.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;먼저, 가상 머신과 공인 IP를 분리합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[가상 머신] &amp;gt; [네트워킹] 블레이드 &amp;gt; [네트워크 설정] 탭에서 네트워크 인터페이스를 클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWSDLU/btsG7CQVsse/bEKhB2nUyilzcA1cayO6o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWSDLU/btsG7CQVsse/bEKhB2nUyilzcA1cayO6o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWSDLU/btsG7CQVsse/bEKhB2nUyilzcA1cayO6o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWSDLU%2FbtsG7CQVsse%2FbEKhB2nUyilzcA1cayO6o1%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;596&quot; height=&quot;352&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그 후 [IP 구성] 탭에서 IP 구성 편집을 위해 ipconfig1을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CpZhD/btsG7CpS2xp/In0HWKbW7TG27VKM9WEf11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CpZhD/btsG7CpS2xp/In0HWKbW7TG27VKM9WEf11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CpZhD/btsG7CpS2xp/In0HWKbW7TG27VKM9WEf11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCpZhD%2FbtsG7CpS2xp%2FIn0HWKbW7TG27VKM9WEf11%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;682&quot; height=&quot;408&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;하기와 같이 [공용 IP 주소 설정] 섹션의 &quot;공용 IP 주소 연결&quot; 항목의 체크 박스를 해제하거나, 해제가 되어 있는지 확인합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnRpAk/btsG5HTf7VP/xsnFNfbeVX9sQVLK6dtUZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnRpAk/btsG5HTf7VP/xsnFNfbeVX9sQVLK6dtUZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnRpAk/btsG5HTf7VP/xsnFNfbeVX9sQVLK6dtUZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnRpAk%2FbtsG5HTf7VP%2FxsnFNfbeVX9sQVLK6dtUZ1%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;386&quot; height=&quot;385&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이 과정이 완료되면 가상 머신의 [개요] 탭에서 공용 IP 주소에 대한 값이 &quot;-&quot;인 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XJzCn/btsG52it7jF/WiSX71REleDA4dA2Uh1nf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XJzCn/btsG52it7jF/WiSX71REleDA4dA2Uh1nf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XJzCn/btsG52it7jF/WiSX71REleDA4dA2Uh1nf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXJzCn%2FbtsG52it7jF%2FWiSX71REleDA4dA2Uh1nf0%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;664&quot; height=&quot;321&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음으로, Azure Firewall과 연결된 방화벽 정책으로 이동하여 DNAT 규칙을 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규칙 컬렉션이 없다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;규칙 컬렉션&lt;/b&gt;을 먼저 생성해 주어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1880&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uglJE/btsG7zzUTSz/sV6GrrOJlosE95vKK0KNgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uglJE/btsG7zzUTSz/sV6GrrOJlosE95vKK0KNgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uglJE/btsG7zzUTSz/sV6GrrOJlosE95vKK0KNgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuglJE%2FbtsG7zzUTSz%2FsV6GrrOJlosE95vKK0KNgK%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;1880&quot; height=&quot;484&quot; data-origin-width=&quot;1880&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상기&lt;span&gt;&amp;nbsp;스크린샷과&amp;nbsp;&lt;/span&gt;같이 규칙 컬렉션과 규칙을 생성합니다.&amp;nbsp;&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;span style=&quot;color: #000000;&quot;&gt;원본 : Local PC의 공인 IP 주소&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대상 포트 : 22 (원하는 포트를 지정해 줘도 됩니다.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대상 (방화벽 IP 주소) : Azure Firewall의 공인 IP 주소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변환된 주소 또는 FQDN : Hub 가상 머신의 사설 IP 주소&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;번역된 포트 : 실제로 해당 서버에 접근하기 위해 열려 있는 포트&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;실제로 접근이 되는지&lt;span&gt;&amp;nbsp;테스트해 보겠습니다.&amp;nbsp;&lt;/span&gt;(&lt;span style=&quot;background-color: #dddddd; color: #456771;&quot;&gt;ssh hyein@{Azure Firewall의 공인 IP 주소}&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvTWzl/btsG76Yyjo5/Tvx292wagOCFklQvc3vsZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvTWzl/btsG76Yyjo5/Tvx292wagOCFklQvc3vsZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvTWzl/btsG76Yyjo5/Tvx292wagOCFklQvc3vsZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvTWzl%2FbtsG76Yyjo5%2FTvx292wagOCFklQvc3vsZ1%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;481&quot; height=&quot;48&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상기 스크린샷과 같이 방화벽의 공인 IP 주소를 사용하여 Hub 가상 머신에 접속할 수 있는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.2 Hub VM &amp;rarr; Azure Firewall &amp;rarr; Spoke VM&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;HubVM-FW-SpokeVM.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df6Dsr/btsHjbTFxWZ/Q7M4oVdkCQ57w4NACQeFH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df6Dsr/btsHjbTFxWZ/Q7M4oVdkCQ57w4NACQeFH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df6Dsr/btsHjbTFxWZ/Q7M4oVdkCQ57w4NACQeFH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf6Dsr%2FbtsHjbTFxWZ%2FQ7M4oVdkCQ57w4NACQeFH0%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;794&quot; height=&quot;626&quot; data-filename=&quot;HubVM-FW-SpokeVM.png&quot; data-origin-width=&quot;1217&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음은 Hub 가상 머신에서 Azure Firewall을 지나 Spoke 가상 머신에 접근하는 테스트를 해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 Hub 가상 네트워크와 Spoke 가상 네트워크에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;VNet Peering이 구성되어 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇기 때문에 Hub 가상 머신과 Spoke 가상 머신이 배포되어 있는 각 서브넷의 경로 테이블에는 상대 서브넷에 대해, 다음 홉이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;VNet Peering&lt;/i&gt;인 경로를 가지고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 가상 네트워크 간 직접 통신이 아닌, Azure Firewall 쪽으로 트래픽이 꺾이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;b&gt;&lt;u&gt;사용자 지정 경로&lt;/u&gt;&lt;/b&gt;를 구성해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;지금부터는 사용자 지정 경로를 구성해 보겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Hub 대역의 경로 테이블]&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;span style=&quot;color: #000000;&quot;&gt;[설정] 블레이드 &amp;gt; [서브넷] 탭 &amp;gt; [+ 연결]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn4iuw/btsG6XA0ytm/Udl5kDr8D2bIdqRuDJWWw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn4iuw/btsG6XA0ytm/Udl5kDr8D2bIdqRuDJWWw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn4iuw/btsG6XA0ytm/Udl5kDr8D2bIdqRuDJWWw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn4iuw%2FbtsG6XA0ytm%2FUdl5kDr8D2bIdqRuDJWWw1%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;480&quot; height=&quot;291&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub 가상 머신이 배포되어 있는 서브넷을 선택하여 경로 테이블과 연결합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[설정] 블레이드 &amp;gt; [경로] 탭 &amp;gt; [+ 추가]&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1353&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1kW1A/btsG7Ccmbif/gxIXDKrybN7iQ7kduss7tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1kW1A/btsG7Ccmbif/gxIXDKrybN7iQ7kduss7tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1kW1A/btsG7Ccmbif/gxIXDKrybN7iQ7kduss7tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1kW1A%2FbtsG7Ccmbif%2FgxIXDKrybN7iQ7kduss7tk%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;751&quot; height=&quot;435&quot; data-origin-width=&quot;1353&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub 가상 머신이 Spoke 가상 머신으로 가기 위한 경로를 생성해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대상 주소는 Spoke 가상 머신이 배포되어 있는 서브넷 대역을 입력해 주면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음&lt;span&gt;&amp;nbsp;&lt;/span&gt;홉 형식을 [가상 어플라이언스]로 지정하고 다음 홉 주소에는 Azure Firewall의 사설 IP 주소를 입력합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Spoke 대역의 경로 테이블]&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;span style=&quot;color: #000000;&quot;&gt;[설정] 블레이드 &amp;gt; [서브넷] 탭 &amp;gt; [+ 연결]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPRHu9/btsG7Alh2VZ/P8Q16mburjr9U8MPoHWVVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPRHu9/btsG7Alh2VZ/P8Q16mburjr9U8MPoHWVVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPRHu9/btsG7Alh2VZ/P8Q16mburjr9U8MPoHWVVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPRHu9%2FbtsG7Alh2VZ%2FP8Q16mburjr9U8MPoHWVVk%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;481&quot; height=&quot;306&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke 가상 머신이 배포되어 있는 서브넷을 선택하여 경로 테이블과 연결합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[설정] 블레이드 &amp;gt; [경로] 탭 &amp;gt; [+ 추가]&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1409&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8PHst/btsG747v4Lv/HcXwvMStWm8og7KukUsOLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8PHst/btsG747v4Lv/HcXwvMStWm8og7KukUsOLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8PHst/btsG747v4Lv/HcXwvMStWm8og7KukUsOLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8PHst%2FbtsG747v4Lv%2FHcXwvMStWm8og7KukUsOLK%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;751&quot; height=&quot;426&quot; data-origin-width=&quot;1409&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke 가상 머신이 Hub 가상 머신으로 가기 위한 경로를 생성해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대상 주소는 Hub 가상 머신이 배포되어 있는 서브넷 대역을 입력해 주면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음&lt;span&gt;&amp;nbsp;&lt;/span&gt;홉 형식을 [가상 어플라이언스]로 지정하고 다음 홉 주소에는 Azure Firewall의 사설 IP 주소를 입력합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;또한 Spoke 가상 네트워크 대역을&amp;nbsp;&lt;span style=&quot;text-align: start;&quot;&gt;대상 주소로 가지는 경로를 하나 더 추가해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;이 경로 또한 다음 홉 형식을 &quot;가상 어플라이언스&quot;로 선택하고 다음 홉 주소를 Azure Firewall의 사설 IP로 지정해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jy7e8/btsHjsVd8Ii/DuxNdsa42PxkZ4EEMsJO7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jy7e8/btsHjsVd8Ii/DuxNdsa42PxkZ4EEMsJO7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jy7e8/btsHjsVd8Ii/DuxNdsa42PxkZ4EEMsJO7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJy7e8%2FbtsHjsVd8Ii%2FDuxNdsa42PxkZ4EEMsJO7k%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;417&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 역시 Longest Prefix Match 알고리즘을 따르는 Azure 경로 테이블의 동작 방식으로 인해 추가가 필요합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;경로를 추가하였으니 접근이 제대로 되는지 확인해 보겠습니다. (Hub 가상 머신 &amp;rarr; Spoke 가상 머신)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;Hub 가상 머신에서&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #456771;&quot;&gt;ssh hyein@10.100.0.4&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 입력하여 Spoke 가상 머신에&lt;span&gt;&amp;nbsp;&lt;/span&gt;접근합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 결과, 하기와 같이 접근이 불가한 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bksx3L/btsG6YGHTeH/rlZbR23ETgBbrJcTp4ICY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bksx3L/btsG6YGHTeH/rlZbR23ETgBbrJcTp4ICY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bksx3L/btsG6YGHTeH/rlZbR23ETgBbrJcTp4ICY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbksx3L%2FbtsG6YGHTeH%2FrlZbR23ETgBbrJcTp4ICY1%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;441&quot; height=&quot;114&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;왜 그런 걸까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;현재 Hub 가상 머신은 Spoke 가상 머신에 도달하기 위해 Azure Firewall로 이동합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이때 Azure Firewall은 Spoke 가상 머신에 해당 트래픽을 보낼 수 있을까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;답은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그 이유는 아직 Azure Firewall에 해당 트래픽에 대한 네트워크 규칙이 생성되어 있지 않기 때문입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;트래픽이 Azure Firewall까지 도착했지만 Spoke 가상 머신으로 트래픽이 도달하기 위한 규칙이 현재 Azure Firewall에는 없습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;지금부터는 방화벽 정책에서 네트워크 규칙을 생성해 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1106&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjLa6y/btsG5JjcWDx/DXCGEb0KEM2cWjW4gBwv31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjLa6y/btsG5JjcWDx/DXCGEb0KEM2cWjW4gBwv31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjLa6y/btsG5JjcWDx/DXCGEb0KEM2cWjW4gBwv31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjLa6y%2FbtsG5JjcWDx%2FDXCGEb0KEM2cWjW4gBwv31%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;1106&quot; height=&quot;416&quot; data-origin-width=&quot;1106&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상기 스크린샷과 같이 규칙 컬렉션과 규칙을 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub 대역을&lt;span&gt;&amp;nbsp;&lt;/span&gt;원본(Source)으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;하는 규칙과 Spoke 대역을&lt;span&gt;&amp;nbsp;&lt;/span&gt;원본(Source)으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;하는 규칙, 이렇게 두 가지의 규칙을 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(이렇게 해야 Spoke 가상 머신에서 Hub 가상 머신으로도 접근이 가능하기 때문입니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;규칙 생성이 완료된 후, 다시 한번 Hub 가상 머신에서 Spoke 가상 머신에 접속해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1073&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbyCeD/btsG7BxMApm/zW5iRkFFSkAGIEzLT7tajK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbyCeD/btsG7BxMApm/zW5iRkFFSkAGIEzLT7tajK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbyCeD/btsG7BxMApm/zW5iRkFFSkAGIEzLT7tajK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbyCeD%2FbtsG7BxMApm%2FzW5iRkFFSkAGIEzLT7tajK%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;611&quot; height=&quot;113&quot; data-origin-width=&quot;1073&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이전과 다르게 Spoke 가상 머신에 접근이 가능한 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;[경로 테이블] &amp;gt; [도움말] &amp;gt; [유효 경로] 탭에서도 하기 스크린샷과 같이 사용자 지정 경로가 생성된 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0xjv9/btsG54AEv9n/d9JJFdPsnPkt1Fweai3wyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0xjv9/btsG54AEv9n/d9JJFdPsnPkt1Fweai3wyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0xjv9/btsG54AEv9n/d9JJFdPsnPkt1Fweai3wyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0xjv9%2FbtsG54AEv9n%2Fd9JJFdPsnPkt1Fweai3wyk%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;720&quot; height=&quot;294&quot; data-origin-width=&quot;1191&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;나머지 시나리오에 대한 테스트 글도 후다닥 정리해서 돌아오겠습니다.  &lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>Azure</category>
      <category>Azure Firewall</category>
      <category>Azure VM</category>
      <category>DNAT</category>
      <category>Route tables</category>
      <category>UDR</category>
      <category>가상 머신</category>
      <category>경로 테이블</category>
      <category>사용자 정의 경로</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/50</guid>
      <comments>https://with-cloud.tistory.com/50#entry50comment</comments>
      <pubDate>Thu, 2 May 2024 15:50:19 +0900</pubDate>
    </item>
    <item>
      <title>Azure Route Table 공부하기 (2)</title>
      <link>https://with-cloud.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;지난 글에서는 Azure Route Table의 개념과 동작 로직에 대해 알아보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지난 글 :&amp;nbsp;&lt;a href=&quot;https://with-cloud.tistory.com/47&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/47&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1714461682403&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;Azure Route Table 공부하기 (1)&quot; data-og-description=&quot;안녕하세요.&amp;nbsp;HYEN입니다.어제, Azure Route Table을 사용하여 경로를&amp;nbsp;라우팅하는&amp;nbsp;테스트를 진행해 보았는데요.&amp;nbsp;&amp;nbsp;네트워크도 어려운데 Route Table에 UDR을 정의해서 원하는 대로 통신이 되게 하려고 하&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/47&quot; data-og-url=&quot;https://with-cloud.tistory.com/47&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c5uTyK/hyVVEf37T0/la869FtfumBwS17xNkbAA0/img.png?width=800&amp;amp;height=253&amp;amp;face=0_0_800_253,https://scrap.kakaocdn.net/dn/jtdTg/hyVZhjcKUK/IXnQpl6z3VIXYlh5bnvOR1/img.png?width=800&amp;amp;height=253&amp;amp;face=0_0_800_253,https://scrap.kakaocdn.net/dn/c3Epmf/hyVZq8iJGj/a7kKdMO67D3Yajfi5gJ8uK/img.png?width=946&amp;amp;height=483&amp;amp;face=0_0_946_483&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/47&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/47&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c5uTyK/hyVVEf37T0/la869FtfumBwS17xNkbAA0/img.png?width=800&amp;amp;height=253&amp;amp;face=0_0_800_253,https://scrap.kakaocdn.net/dn/jtdTg/hyVZhjcKUK/IXnQpl6z3VIXYlh5bnvOR1/img.png?width=800&amp;amp;height=253&amp;amp;face=0_0_800_253,https://scrap.kakaocdn.net/dn/c3Epmf/hyVZq8iJGj/a7kKdMO67D3Yajfi5gJ8uK/img.png?width=946&amp;amp;height=483&amp;amp;face=0_0_946_483');&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;Azure Route Table 공부하기 (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요.&amp;nbsp;HYEN입니다.어제, Azure Route Table을 사용하여 경로를&amp;nbsp;라우팅하는&amp;nbsp;테스트를 진행해 보았는데요.&amp;nbsp;&amp;nbsp;네트워크도 어려운데 Route Table에 UDR을 정의해서 원하는 대로 통신이 되게 하려고 하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는 시나리오 별 트래픽을 라우팅하는 방법에 대한 테스트를 진행할 환경을 구성하는 과정에 대해 다뤄보도록 하겠습니다. (다음 글부터 시나리오 별 테스트를 진행해 보도록 하겠습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 환경 구성&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본 테스트를 위해 구성해야 하는 환경은 하기와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub, Spoke 가상 네트워크 생성&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub, Spoke 간 가상 네트워크 피어링 구성&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Firewall 배포&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경로 테이블 (Hub, Spoke에 각각 하나씩) 배포&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신 (Hub, Spoke에 각각 하나씩) 배포&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Database for PostgreSQL Flexible Server (VNet Integration / Private Endpoint) 배포&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;차례대로 구성해 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.1 Hub,&amp;nbsp;Spoke&amp;nbsp;가상&amp;nbsp;네트워크&amp;nbsp;생성&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;※ Hub용 리소스 / Spoke용 리소스 리스트를 보다 쉽게 확인하기 위해 리소스 그룹을 분리하여 생성하겠습니다.※&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;첫 번째로 Hub, Spoke 가상 네트워크를 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Hub 대역]&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;599&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3Rnxj/btsG6KgEzJX/DoTprxgkxAk90dAg7HKmKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3Rnxj/btsG6KgEzJX/DoTprxgkxAk90dAg7HKmKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3Rnxj/btsG6KgEzJX/DoTprxgkxAk90dAg7HKmKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3Rnxj%2FbtsG6KgEzJX%2FDoTprxgkxAk90dAg7HKmKK%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;585&quot; height=&quot;458&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;599&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[보안] 탭&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[보안] 탭에서 Azure Firewall을 생성할 수 있지만 별도로 배포를 진행할 예정이기 때문에 해당 과정은 생략합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[IP 주소] 탭&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W6IX1/btsG3MAtiFs/WfIPzQ7kgYl0MUQKDYG2aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W6IX1/btsG3MAtiFs/WfIPzQ7kgYl0MUQKDYG2aK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W6IX1/btsG3MAtiFs/WfIPzQ7kgYl0MUQKDYG2aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW6IX1%2FbtsG3MAtiFs%2FWfIPzQ7kgYl0MUQKDYG2aK%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;596&quot; height=&quot;459&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub 가상 네트워크에서 필요한 서브넷은 상기 스크린샷에서 볼 수 있듯이 2개입니다. (VM용, Azure Firewall용)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Firewall용 서브넷을 생성하는 방법은 하기와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnNqci/btsG6KAZpk2/KuCkDGdlcAZjd6MBZqwrO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnNqci/btsG6KAZpk2/KuCkDGdlcAZjd6MBZqwrO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnNqci/btsG6KAZpk2/KuCkDGdlcAZjd6MBZqwrO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnNqci%2FbtsG6KAZpk2%2FKuCkDGdlcAZjd6MBZqwrO1%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;593&quot; height=&quot;311&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서브넷 용도 중 [Azure Firewall]을 선택합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;/26만큼의 주소 범위가 필요하므로 적당한 시작 주소를 입력합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [가상 네트워크] 생성을 마무리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Spoke 대역]&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2AcPS/btsG5914iLw/9tOzsuY1yOYtT1GK7IgOX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2AcPS/btsG5914iLw/9tOzsuY1yOYtT1GK7IgOX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2AcPS/btsG5914iLw/9tOzsuY1yOYtT1GK7IgOX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2AcPS%2FbtsG5914iLw%2F9tOzsuY1yOYtT1GK7IgOX0%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;602&quot; height=&quot;476&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[IP 주소] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caKFzG/btsG6I4fgMr/fqokfXv8z4bCnmmJZ76mq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caKFzG/btsG6I4fgMr/fqokfXv8z4bCnmmJZ76mq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caKFzG/btsG6I4fgMr/fqokfXv8z4bCnmmJZ76mq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaKFzG%2FbtsG6I4fgMr%2FfqokfXv8z4bCnmmJZ76mq0%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;602&quot; height=&quot;502&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Spoke 가상 네트워크에서 필요한 서브넷은 상기 스크린샷에서 볼 수 있듯이 3개입니다. (VM용, Private Endpoint용, Azure Database for PostgreSQL에 대한 위임된 서브넷 용)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;해당 탭에서 snet-postgre-dedicated 서브넷을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Azure Database for PostgreSQL에 위임할 수 있으나 해당 리소스를 생성할 때 구성하도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [가상 네트워크] 생성을 마무리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.2 Hub, Spoke 간 가상 네트워크 피어링 구성&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성한 두 가상 네트워크 간 가상 네트워크 피어링을 구성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[가상 네트워크] &amp;gt; [설정] &amp;gt; [피어링] 탭 &amp;gt; [+ 추가]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmKkGU/btsG6Ls7gKP/qNFMKj8vwWITcTy6VJcF70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmKkGU/btsG6Ls7gKP/qNFMKj8vwWITcTy6VJcF70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmKkGU/btsG6Ls7gKP/qNFMKj8vwWITcTy6VJcF70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmKkGU%2FbtsG6Ls7gKP%2FqNFMKj8vwWITcTy6VJcF70%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;446&quot; height=&quot;224&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[피어링 추가] 페이지&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;827&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZX8UR/btsG5V312S1/1ALDSUZm54yx5RnJsuaVR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZX8UR/btsG5V312S1/1ALDSUZm54yx5RnJsuaVR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZX8UR/btsG5V312S1/1ALDSUZm54yx5RnJsuaVR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZX8UR%2FbtsG5V312S1%2F1ALDSUZm54yx5RnJsuaVR0%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;650&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;827&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;피어링 이름과, 피어링 할 네트워크를 선택한 후 [추가] 버튼을 클릭하여 피어링 구성을 완료합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1076&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0OQHL/btsG4U5TLTa/Dnxzldm9v3jtFQeg5gfCiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0OQHL/btsG4U5TLTa/Dnxzldm9v3jtFQeg5gfCiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0OQHL/btsG4U5TLTa/Dnxzldm9v3jtFQeg5gfCiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0OQHL%2FbtsG4U5TLTa%2FDnxzldm9v3jtFQeg5gfCiK%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;755&quot; height=&quot;215&quot; data-origin-width=&quot;1076&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상기 스크린샷과 같이 피어링 상태가 &quot;연결됨&quot;일 경우 구성이 제대로 된 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.3&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Azure Firewall 배포&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Hub 대역에 Azure Firewall을 배포합니다.&amp;nbsp;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sQAcp/btsG7lVfWat/fK05QRXJlCtOTaTOb92pek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sQAcp/btsG7lVfWat/fK05QRXJlCtOTaTOb92pek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sQAcp/btsG7lVfWat/fK05QRXJlCtOTaTOb92pek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsQAcp%2FbtsG7lVfWat%2FfK05QRXJlCtOTaTOb92pek%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;629&quot; height=&quot;565&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;675&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;752&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UnVCI/btsG4hmIGfC/pSch3UCHq0npJTO7l3hK41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UnVCI/btsG4hmIGfC/pSch3UCHq0npJTO7l3hK41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UnVCI/btsG4hmIGfC/pSch3UCHq0npJTO7l3hK41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUnVCI%2FbtsG4hmIGfC%2FpSch3UCHq0npJTO7l3hK41%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;278&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [Azure Firewall] 배포를 마무리합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.4 경로 테이블 배포&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 지정 경로를 구성하기 위해 우선 Route Tables를 배포합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub, Spoke 각 대역에 한 개씩 배포합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Hub 대역]&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;[기본] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7jPlw/btsG4gVHPtG/EWDULIfyFBEvAh2Yokg5a1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7jPlw/btsG4gVHPtG/EWDULIfyFBEvAh2Yokg5a1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7jPlw/btsG4gVHPtG/EWDULIfyFBEvAh2Yokg5a1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7jPlw%2FbtsG4gVHPtG%2FEWDULIfyFBEvAh2Yokg5a1%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;637&quot; height=&quot;416&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [경로 테이블] 생성을 마무리합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Spoke 대역]&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;[기본] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1DLMn/btsG4ULBoJp/9pOUVN4OvyQxjRhecrgZzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1DLMn/btsG4ULBoJp/9pOUVN4OvyQxjRhecrgZzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1DLMn/btsG4ULBoJp/9pOUVN4OvyQxjRhecrgZzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1DLMn%2FbtsG4ULBoJp%2F9pOUVN4OvyQxjRhecrgZzk%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;420&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&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;마무리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;여기서, &quot;게이트웨이 경로 전파&quot;에 대해 좀 더 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;게이트웨이 경로 전파란?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VPN이나 ExpressRoute를 통해 들어온 트래픽이 Azure 내 리소스와 통신할 때 사용합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 설정이 활성화되어 있으면 라우트 테이블을 자동으로 전달해 주기 때문에 VPN이나 ExpressRoute를 통해 Azure의 네트워크로 갈 때, 이 경로에 대해서 별도의 구성을 하지 않아도 됩니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 설정이 비활성화되어 있을 경우, 도달해야 하는 목적지에 대한 정보가 자동으로 제공되지 않기 때문에 직접 경로에 대한 구성을 해 주어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.5 가상 머신 배포&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신을 배포한 후에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Azure Database for PostgreSQL에 접근할 수 있도록&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;psql (PostgreSQL과 상호 작용하기 위한 명령줄 도구)를 설치합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;※ 가상 머신 배포 과정은 Hub용, Spoke용 모두 동일합니다. (리소스 그룹 명, 가상 네트워크/서브넷 대역만 다르게 지정)&lt;br /&gt;본 테스트는 Hub 기준으로 작성하도록 하겠습니다.※&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oby7b/btsG7l8Nd3x/ing15LpQSyHlVcc1KYGLK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oby7b/btsG7l8Nd3x/ing15LpQSyHlVcc1KYGLK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oby7b/btsG7l8Nd3x/ing15LpQSyHlVcc1KYGLK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foby7b%2FbtsG7l8Nd3x%2Fing15LpQSyHlVcc1KYGLK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;645&quot; height=&quot;597&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;712&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;771&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qN0xi/btsG4hG0wNG/0JHDKhc2zvePlaT9F1Ldy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qN0xi/btsG4hG0wNG/0JHDKhc2zvePlaT9F1Ldy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qN0xi/btsG4hG0wNG/0JHDKhc2zvePlaT9F1Ldy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqN0xi%2FbtsG4hG0wNG%2F0JHDKhc2zvePlaT9F1Ldy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;653&quot; height=&quot;578&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[네트워킹] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b24pLv/btsG5EuHoyd/NGYri6ozOQqxeXE4OLhoR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b24pLv/btsG5EuHoyd/NGYri6ozOQqxeXE4OLhoR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b24pLv/btsG5EuHoyd/NGYri6ozOQqxeXE4OLhoR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb24pLv%2FbtsG5EuHoyd%2FNGYri6ozOQqxeXE4OLhoR1%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;652&quot; height=&quot;512&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공용 IP의 경우 psql 설치를 위해 Hub용 가상 머신에만 잠시 attach 합니다. (추후, Azure Firewall 규칙 및 UDR 구성 시 공용 IP는 필요하지 않습니다.)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [가상 머신] 생성을 마무리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;위와 같은 방식으로 Spoke용 가상 머신도 생성합니다. (공용 IP는 붙이지 않습니다.)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신 배포가 완료된 후에는 psql 설치를 진행합니다. (Hub, Spoke용 가상 머신 모두에 설치합니다.)&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;span style=&quot;color: #000000;&quot;&gt;psql 설치를 위해 Hub용 가상 머신에 접근합니다. (&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #456771;&quot;&gt;ssh hyein@{hub용 가상 머신 공용 IP}&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/download/&quot;&gt;https://www.postgresql.org/download/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;페이지로 이동하여 Linux &amp;gt; Ubuntu를 선택한 후 해당 페이지의 install 과정을 따라 psql 설치를 진행합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1515&quot; data-origin-height=&quot;599&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnyIGg/btsG4WbANLd/XNLhDyxQLn4MwQWlBhkA8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnyIGg/btsG4WbANLd/XNLhDyxQLn4MwQWlBhkA8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnyIGg/btsG4WbANLd/XNLhDyxQLn4MwQWlBhkA8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnyIGg%2FbtsG4WbANLd%2FXNLhDyxQLn4MwQWlBhkA8K%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;799&quot; height=&quot;316&quot; data-origin-width=&quot;1515&quot; data-origin-height=&quot;599&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke용 가상 머신에 접근하여 상기 과정을 진행합니다. (&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #456771;&quot;&gt;ssh hyein@10.100.0.4&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.6 Azure Database for PostgreSQL Flexibel Server 배포&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;환경 구성의 마지막 단계로 Azure Database for PostgreSQL Flexibel Server를 배포합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워킹 옵션이 각각 VNet Integration, Private Endpoint인 Azure Database for PostgreSQL Flexibel Server를 배포해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Private Endpoint와 VNet Integration에 대한 설명은 하기 글을 참고해 주세요!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/48&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/48&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1714613035434&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;프라이빗 엔드포인트 VS VNET 통합 (프라이빗 액세스)&quot; data-og-description=&quot;안녕하세요.&amp;nbsp;HYEN입니다.라우팅 테스트를 하는 중 Azure Database for PostgreSQL Flexible Server를 생성할 때 선택할 수 있는 네트워킹 옵션에 대해 정리해 봐야겠다는 생각이 들어 이번 글을 작성하게 되었&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/48&quot; data-og-url=&quot;https://with-cloud.tistory.com/48&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Q34qQ/hyVZfTy4Iz/cr2JHnUmBnSATqCmYWvtvK/img.png?width=800&amp;amp;height=345&amp;amp;face=0_0_800_345,https://scrap.kakaocdn.net/dn/dvZmsO/hyVVMrWoeJ/YkizxnYmYmQRxLgooKQLk1/img.png?width=800&amp;amp;height=345&amp;amp;face=0_0_800_345,https://scrap.kakaocdn.net/dn/c3rmEP/hyVVGSOuso/GDrD9sL0dKn0EaYA3rRyJK/img.jpg?width=1800&amp;amp;height=1202&amp;amp;face=0_0_1800_1202&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/48&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/48&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Q34qQ/hyVZfTy4Iz/cr2JHnUmBnSATqCmYWvtvK/img.png?width=800&amp;amp;height=345&amp;amp;face=0_0_800_345,https://scrap.kakaocdn.net/dn/dvZmsO/hyVVMrWoeJ/YkizxnYmYmQRxLgooKQLk1/img.png?width=800&amp;amp;height=345&amp;amp;face=0_0_800_345,https://scrap.kakaocdn.net/dn/c3rmEP/hyVVGSOuso/GDrD9sL0dKn0EaYA3rRyJK/img.jpg?width=1800&amp;amp;height=1202&amp;amp;face=0_0_1800_1202');&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;프라이빗 엔드포인트 VS VNET 통합 (프라이빗 액세스)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요.&amp;nbsp;HYEN입니다.라우팅 테스트를 하는 중 Azure Database for PostgreSQL Flexible Server를 생성할 때 선택할 수 있는 네트워킹 옵션에 대해 정리해 봐야겠다는 생각이 들어 이번 글을 작성하게 되었&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Private Endpoint]&amp;nbsp;&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;[기본] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;683&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mcrhu/btsG5mHRrgQ/Jzsmw549DhWEa1bK9jlpc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mcrhu/btsG5mHRrgQ/Jzsmw549DhWEa1bK9jlpc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mcrhu/btsG5mHRrgQ/Jzsmw549DhWEa1bK9jlpc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMcrhu%2FbtsG5mHRrgQ%2FJzsmw549DhWEa1bK9jlpc0%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;638&quot; height=&quot;599&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;683&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;725&quot; data-origin-height=&quot;660&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLOcI5/btsG5mgMgWl/rTgsqK1zebk5SMgogW3bW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLOcI5/btsG5mgMgWl/rTgsqK1zebk5SMgogW3bW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLOcI5/btsG5mgMgWl/rTgsqK1zebk5SMgogW3bW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLOcI5%2FbtsG5mgMgWl%2FrTgsqK1zebk5SMgogW3bW1%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;639&quot; height=&quot;582&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;660&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[네트워킹] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWIfcV/btsG3NTJUwl/YkpNbsy3NAd5IWmoMqIUQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWIfcV/btsG3NTJUwl/YkpNbsy3NAd5IWmoMqIUQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWIfcV/btsG3NTJUwl/YkpNbsy3NAd5IWmoMqIUQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWIfcV%2FbtsG3NTJUwl%2FYkpNbsy3NAd5IWmoMqIUQk%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;641&quot; height=&quot;478&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[공용 액세스] 섹션에서 &quot;공용 IP 주소를 사용하여 인터넷을 통해 이 리소스에 공용 액세스 허용&quot;에 대한 체크 박스를 해제합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그다음 하단의 [프라이빗 엔드포인트] 섹션에서 [+ 프라이빗 엔드포인트]를 클릭하여 프라이빗 엔드포인트 생성을 진행합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpGjTB/btsG4TsomIE/ReVL5MXDJ7rsrmjPlIKST0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpGjTB/btsG4TsomIE/ReVL5MXDJ7rsrmjPlIKST0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpGjTB/btsG4TsomIE/ReVL5MXDJ7rsrmjPlIKST0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpGjTB%2FbtsG4TsomIE%2FReVL5MXDJ7rsrmjPlIKST0%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;668&quot; height=&quot;191&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;204&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;839&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4M8H3/btsG3PqsIXp/nBQ6L5ns0gZqXg2JCbeKa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4M8H3/btsG3PqsIXp/nBQ6L5ns0gZqXg2JCbeKa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4M8H3/btsG3PqsIXp/nBQ6L5ns0gZqXg2JCbeKa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4M8H3%2FbtsG3PqsIXp%2FnBQ6L5ns0gZqXg2JCbeKa0%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;670&quot; height=&quot;545&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [Azure Database for PostgreSQL Flexible Server] 생성을 마무리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[만들기] 버튼을 클릭하면 하기와 같은 창이 뜹니다. [방화벽 규칙 없이 서버 만들기] 버튼을 클릭하여 생성을 진행합니다. (이 부분은 구성할 필요가 없습니다.)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTGjZc/btsG5mufLi8/N34J7WZ9WmeiVnH9oycoY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTGjZc/btsG5mufLi8/N34J7WZ9WmeiVnH9oycoY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTGjZc/btsG5mufLi8/N34J7WZ9WmeiVnH9oycoY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTGjZc%2FbtsG5mufLi8%2FN34J7WZ9WmeiVnH9oycoY1%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;317&quot; height=&quot;212&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;다음은 VNet Integration 된 Azure Database for PostgreSQL Flexible Server를 배포해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[VNet Integration (Private Access)]&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;[기본] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;733&quot; data-origin-height=&quot;679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0PRTM/btsG5TrCUtk/kUNxDMkjatFBkMKa3SfJb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0PRTM/btsG5TrCUtk/kUNxDMkjatFBkMKa3SfJb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0PRTM/btsG5TrCUtk/kUNxDMkjatFBkMKa3SfJb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0PRTM%2FbtsG5TrCUtk%2FkUNxDMkjatFBkMKa3SfJb1%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;638&quot; height=&quot;591&quot; data-origin-width=&quot;733&quot; data-origin-height=&quot;679&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;726&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E9KGz/btsG5mHRrhJ/inuIRkPsDNTk4klGthRv3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E9KGz/btsG5mHRrhJ/inuIRkPsDNTk4klGthRv3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E9KGz/btsG5mHRrhJ/inuIRkPsDNTk4klGthRv3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE9KGz%2FbtsG5mHRrhJ%2FinuIRkPsDNTk4klGthRv3k%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;635&quot; height=&quot;583&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[네트워킹] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUchYV/btsG3MUKUWZ/Ts7k18yO4rr7Ozpqye8vok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUchYV/btsG3MUKUWZ/Ts7k18yO4rr7Ozpqye8vok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUchYV/btsG3MUKUWZ/Ts7k18yO4rr7Ozpqye8vok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUchYV%2FbtsG3MUKUWZ%2FTs7k18yO4rr7Ozpqye8vok%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;627&quot; height=&quot;641&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;742&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;718&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EGUvS/btsG3L9oL8o/GkWdu2qGYQbhRDsRhavcCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EGUvS/btsG3L9oL8o/GkWdu2qGYQbhRDsRhavcCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EGUvS/btsG3L9oL8o/GkWdu2qGYQbhRDsRhavcCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEGUvS%2FbtsG3L9oL8o%2FGkWdu2qGYQbhRDsRhavcCk%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;632&quot; height=&quot;183&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [Azure Database for PostgreSQL Flexible Server] 생성을 마무리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;</description>
      <category>TOPIC/Cloud</category>
      <category>Azure</category>
      <category>azure database for postgresql flexible server</category>
      <category>Private Endpoint</category>
      <category>Route table</category>
      <category>vnet integration</category>
      <category>vnet 통합</category>
      <category>경로 테이블</category>
      <category>프라이빗 엔드포인트</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/49</guid>
      <comments>https://with-cloud.tistory.com/49#entry49comment</comments>
      <pubDate>Tue, 30 Apr 2024 16:27:28 +0900</pubDate>
    </item>
    <item>
      <title>프라이빗 엔드포인트 VS VNET 통합 (프라이빗 액세스)</title>
      <link>https://with-cloud.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;라우팅 테스트를 하는 중 Azure Database for PostgreSQL Flexible Server를 생성할 때 선택할 수 있는 네트워킹 옵션에 대해 정리해 봐야겠다는 생각이 들어 이번 글을 작성하게 되었습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;가상 네트워크에 배포할 수 있는 Azure 서비스는 다양하며 리소스마다 VNET 통합도 성격이 조금씩 다르기 때문에 하기 링크를 참고하시어 각 &lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;리소스에 대한 자세한 설명을 확인하시기 바랍니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;참고 링크 :&amp;nbsp;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/azure/virtual-network/virtual-network-for-azure-services#services-that-can-be-deployed-into-a-virtual-network&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/ko-kr/azure/virtual-network/virtual-network-for-azure-services#services-that-can-be-deployed-into-a-virtual-network&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1714459598168&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Azure 서비스에 대한 가상 네트워크&quot; data-og-description=&quot;전용 Azure 서비스를 가상 네트워크에 배포하는 방법과 해당 배포에서 제공하는 기능을 알아봅니다.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/azure/virtual-network/virtual-network-for-azure-services#services-that-can-be-deployed-into-a-virtual-network&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/azure/virtual-network/virtual-network-for-azure-services&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RLHD2/hyVZi3uPmI/LKiv938xNJZ6Auyv8GgzV1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/sqQem/hyVVAdHQvk/3Mg1fVwab4FKGdPeAc1Rb0/img.png?width=1383&amp;amp;height=1136&amp;amp;face=0_0_1383_1136&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/azure/virtual-network/virtual-network-for-azure-services#services-that-can-be-deployed-into-a-virtual-network&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/azure/virtual-network/virtual-network-for-azure-services#services-that-can-be-deployed-into-a-virtual-network&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RLHD2/hyVZi3uPmI/LKiv938xNJZ6Auyv8GgzV1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/sqQem/hyVVAdHQvk/3Mg1fVwab4FKGdPeAc1Rb0/img.png?width=1383&amp;amp;height=1136&amp;amp;face=0_0_1383_1136');&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;Azure 서비스에 대한 가상 네트워크&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;전용 Azure 서비스를 가상 네트워크에 배포하는 방법과 해당 배포에서 제공하는 기능을 알아봅니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.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;color: #000000;&quot;&gt;※ 본 글은 Azure Database for PostgreSQL Flexible Server의 네트워킹 옵션에 대해 다루고 있습니다.※&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.&amp;nbsp;프라이빗 엔드포인트 (Private Endpoint)&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PaaS 서비스를 위해 가상 네트워크에 NIC를 생성합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 가상 네트워크에 하나의 PaaS 서비스를 위한 프라이빗 엔드포인트를 생성할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특징&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PaaS 서비스에 대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인바운드 연결&lt;/b&gt;만 지원합니다. 따라서 PaaS 서비스는 가상 네트워크의 리소스에 액세스 할 수 없습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프라이빗 엔드포인트 사용 시 가상 네트워크, 피어링된 가상 네트워크, VPN 또는 ExpressRoute를 사용하는 온프레미스 환경 등에서 PaaS 리소스에 연결이 가능합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure 서비스에 프라이빗하게 액세스할 수 있는 IP 주소를 제공하지만 프라이빗 엔드포인트를 구성한다고 공용 네트워크 액세스가 반드시 제한되는 것은 아닙니다. 각 리소스의 [네트워킹] 탭에서 &quot;공용 액세스&quot; 사용을 비활성화하는 작업이 추가로 필요할 수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프라이빗 엔드포인트가 배포되어 있는 서브넷에 대해 [프라이빗 엔드포인트에 대한 네트워크 정책]을&lt;span&gt;&amp;nbsp;&lt;/span&gt;활성화할&lt;span&gt;&amp;nbsp;&lt;/span&gt;경우, NSG(네트워크 보안 그룹), UDR(사용자 정의 경로), ASG(애플리케이션 보안 그룹)를 지원합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 플로우&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;pe01.png&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9esuV/btsG3fWvYyn/N0P4t4qk11SkZP9jr10pZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9esuV/btsG3fWvYyn/N0P4t4qk11SkZP9jr10pZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9esuV/btsG3fWvYyn/N0P4t4qk11SkZP9jr10pZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9esuV%2FbtsG3fWvYyn%2FN0P4t4qk11SkZP9jr10pZk%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;331&quot; data-filename=&quot;pe01.png&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;468&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주황색 선의 경우 온프레미스에서 VPN이나 ExpressRoute를 통해 Azure 대역으로 들어가서 프라이빗 엔드포인트를 거쳐 PaaS 서비스에 진입하는 트래픽을 나타 냅니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파란색 선의 경우 Azure의 가상 네트워크 내에 배포된 가상 머신에서 프라이빗 엔드포인트를 거쳐 PaaS 서비스에 진입하는 트래픽을 나타 냅니다. (이 경우 가상 머신이 배포된 가상 네트워크와 PaaS 서비스가 존재하는 가상 네트워크 간 피어링이 구성되어 있어야 합니다.)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;검은색 선의 경우 인터넷을 통해 PaaS 서비스에 접근하는 트래픽을 나타냅니다. 프라이빗 엔드포인트를 생성한다고 해서 인터넷을 통해 액세스할 수 있는 퍼블릭 엔드포인트가 사라지는 것은 아니며 PaaS 서비스의 방화벽 정책에서 해당 부분을 허용/차단함에 따라 액세스가 가능/불가능합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. VNET 통합 (VNET Integration), 프라이빗 액세스 (Private Access)&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위임된 서브넷의 주소를 사용하는 가상 인터페이스를 생성하여 작동합니다. (사용되는 가상 인터페이스는 사용자가 직접 액세스할 수 없습니다.)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하나의 PaaS 서비스는 하나의 가상 네트워크에만 통합할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특징&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PaaS 서비스와 가상 네트워크의 리소스는 개인 IP 주소를 통해 프라이빗하게 서로 통신할 수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프라이빗 엔드포인트를 구성할 필요 없이&lt;span&gt;&amp;nbsp;&lt;/span&gt;피어링 된&lt;span&gt;&amp;nbsp;&lt;/span&gt;가상 네트워크나 가상 네트워크 내 존재하는 Azure 리소스들에서 PaaS 서비스로 연결이 가능합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;온프레미스 리소스는 VPN 또는 ExpressRoute를 통해 개인 IP 주소를 사용하여 가상 네트워크의 리소스에&lt;span&gt;&amp;nbsp;&lt;/span&gt;액세스 할&lt;span&gt;&amp;nbsp;&lt;/span&gt;수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PaaS 서비스 인스턴스는 가상 네트워크의 서브넷에 배포되기 때문에 서브넷에 대한 인바운드 및 아웃바운드 네트워크 액세스를 별도로 설정해 주어야 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인터넷을 통해 액세스 할 수 있는 퍼블릭 엔드포인트가 존재하지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 트래픽&amp;nbsp;&lt;/span&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;vnet-integration.png&quot; data-origin-width=&quot;965&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfmrPo/btsG4jRrF6w/LrtQwkkOgUywdLRvphK0rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfmrPo/btsG4jRrF6w/LrtQwkkOgUywdLRvphK0rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfmrPo/btsG4jRrF6w/LrtQwkkOgUywdLRvphK0rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfmrPo%2FbtsG4jRrF6w%2FLrtQwkkOgUywdLRvphK0rk%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;760&quot; height=&quot;369&quot; data-filename=&quot;vnet-integration.png&quot; data-origin-width=&quot;965&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주황색 선의 경우 온프레미스에서 VPN이나 ExpressRoute를 통해 Azure 대역으로 들어가서 서브넷 내에 있는 PaaS 서비스에 접근하는 트래픽을 나타냅니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파란색 선의 경우 Azure의 가상 네트워크 내에 배포된 가상 머신에서 서브넷 내에 있는 PaaS 서비스에 진입하는 트래픽을 나타 냅니다. (이 경우 가상 머신이 배포된 가상 네트워크와 PaaS 서비스가 존재하는 가상 네트워크 간 피어링이 구성되어 있어야 합니다.)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;검은색 선의 경우 인터넷을 통해 PaaS 서비스에 접근하는 트래픽을 나타냅니다. VNet 통합 옵션 사용 시, PaaS 서비스에 인터넷을 통해 액세스 할 수 있는 퍼블릭 엔드포인트가 존재하지 않게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이상으로 이번 글을 마치도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음에는 Routing 테스트 관련 환경 구성 글로 돌아오겠습니다!&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>azure database for postgresql flexible server</category>
      <category>Private Endpoint</category>
      <category>vnet integration</category>
      <category>vnet 통합</category>
      <category>프라이빗 엔드포인트</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/48</guid>
      <comments>https://with-cloud.tistory.com/48#entry48comment</comments>
      <pubDate>Tue, 30 Apr 2024 15:49:16 +0900</pubDate>
    </item>
    <item>
      <title>Azure Route Table 공부하기 (1)</title>
      <link>https://with-cloud.tistory.com/47</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어제, Azure Route Table을 사용하여 경로를&amp;nbsp;라우팅하는&amp;nbsp;테스트를 진행해 보았는데요.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크도 어려운데 Route Table에 UDR을 정의해서 원하는 대로 통신이 되게 하려고 하다보니 이래저래 시행착오를 많이 겪었습니다. &lt;span style=&quot;text-align: start;&quot;&gt; &lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 까먹지 않도록 정리해 보고자 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 내용을 정리하기 전 먼저 Azure Route Table에 대한 개념과 Azure의 라우팅 로직에 대해 알아보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Azure의 가상 네트워크 트래픽 라우팅 로직&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.1 기본 경로&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 Azure에서 Azure, 온프레미스, 인터넷 등으로 트래픽을&lt;span&gt;&amp;nbsp;&lt;/span&gt;라우팅하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;로직에 대해 알아보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Azure는 기본적으로 가상 네트워크 내 각 서브넷에 대한 경로 테이블을 자동으로 생성하고&amp;nbsp;생성한 경로 테이블에 시스템 기본 경로를 자동으로 추가합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시스템 기본 경로를 추가로 만들거나 시스템 경로를 제거할 수는 없기 때문에 시스템 경로를 재정의 하기 위해서는 사용자 지정 경로 (UDR; User-defined Routes)을 사용해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;가상 네트워크가 생성될 때마다 각 서브넷에 대해 하기와 같은 기본 시스템 경로가 자동으로 생성됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6yTNS/btsGXtneGZV/TrLrkytjPVmQ7ydkJkiFH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6yTNS/btsGXtneGZV/TrLrkytjPVmQ7ydkJkiFH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6yTNS/btsGXtneGZV/TrLrkytjPVmQ7ydkJkiFH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6yTNS%2FbtsGXtneGZV%2FTrLrkytjPVmQ7ydkJkiFH1%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;766&quot; height=&quot;243&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;위 테이블 중 다음 홉 유형(Next hop type)에 대해 좀 더&lt;span&gt;&amp;nbsp;&lt;/span&gt;알아보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Vitual network (가상 네트워크)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크의 주소 공간에 대한 트래픽을&lt;span&gt;&amp;nbsp;&lt;/span&gt;라우팅 하기&lt;span&gt;&amp;nbsp;&lt;/span&gt;위한 기본 경로입니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크가 여러 개 있다면 여러 개의 가상 네트워크에 대한 개별 경로가 생성됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure는 서브넷 주소 범위에 대한 기본 경로는 생성하지 않습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 가상 네트워크 내에 있는 서브넷 간의 트래픽은 자동으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;라우팅 됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서브넷 중 일부만 경로 테이블과 연결되어도 기본 시스템 경로의 주소 접두사&lt;span style=&quot;text-align: left;&quot;&gt;(Address prefixes)&lt;/span&gt;는 가상 네트워크의 대역으로 지정됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;실제로 UDR과 snet-vm(10.100.0.0/29)과 snet-pe(10.100.0.8/29)라는 이름의 서브넷을 연결한 후 유효 경로를 확인해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;([경로 테이블] &amp;gt; [도움말] &amp;gt; [유효 경로] 탭에서 확인이 가능합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bguiG6/btsGZzssAly/oglqllrKlVp8MocxgUUqL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bguiG6/btsGZzssAly/oglqllrKlVp8MocxgUUqL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bguiG6/btsGZzssAly/oglqllrKlVp8MocxgUUqL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbguiG6%2FbtsGZzssAly%2FoglqllrKlVp8MocxgUUqL1%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;712&quot; height=&quot;318&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;423&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상기 테이블과 같이 서브넷이 2개가 있지만 실제 경로 테이블에는 가상 네트워크의 대역인 (10.100.0.0/28)만 확인되는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인터넷&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주소 접두사로 지정된 트래픽을 인터넷으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;라우팅 합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시스템 기본 경로에는 0.0.0.0/0이 지정되어 있습니다. 따라서 Azure의 기본 경로를 재정의하지 않는 한, 가상 네트워크 주소 범위에 지정되지 않은 주소에 대한 트래픽은 인터넷으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;라우팅 됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약, 대상 주소가 Azure 서비스 중 하나라면 Azure는 트래픽을 인터넷으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;라우팅 하지&lt;span&gt;&amp;nbsp;&lt;/span&gt;않고 Azure의 백본 네트워크를 통해 트래픽을 해당 서비스로 직접&lt;span&gt;&amp;nbsp;&lt;/span&gt;라우팅 하게&lt;span&gt;&amp;nbsp;&lt;/span&gt;됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 Azure 서비스 간 트래픽은 인터넷을 거치지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;없음&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 홉이 &quot;없음&quot;인 트래픽의 경우 서브넷 밖으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;라우팅 되지&lt;span&gt;&amp;nbsp;&lt;/span&gt;않고 삭제됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure에서는 하기 주소 접두사에 대한 기본 경로를 자동으로 생성합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;10.0.0.0/8, 172.16.0.0/12 및 192.168.0.0/16: RFC 1918에서 프라이빗용으로 예약되어 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;100.64.0.0/10: RFC 6598에서 예약되어 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약, 상기 주소 범위 중 하나를 할당하면 Azure는 자동으로 다음 홉 유형을 &quot;없음&quot;에서 &quot;가상 네트워크&quot;로 변경합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;예를 들어, 10.0.0.0/8라는 주소에 대해서 Azure는 자동으로 시스템 기본 경로를 생성하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;다음 홉 유형&lt;/span&gt;을 &quot;없음&quot;으로 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이때, 사용자가 10.100.0.0/28라는 가상 네트워크를 생성하게 되면 Azure는 이 주소 대역에 대해서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;다음 홉 유형&lt;/span&gt;을 &quot;가상 네트워크&quot;로 변경합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;483&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP2g3K/btsGWOZG4Fy/2qwC6dtCI43DXh7kXEfpkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP2g3K/btsGWOZG4Fy/2qwC6dtCI43DXh7kXEfpkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP2g3K/btsGWOZG4Fy/2qwC6dtCI43DXh7kXEfpkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP2g3K%2FbtsGWOZG4Fy%2F2qwC6dtCI43DXh7kXEfpkk%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;709&quot; height=&quot;362&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;483&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상기&lt;span&gt;&amp;nbsp;&lt;/span&gt;스크린샷에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;보실 수 있듯이 10.100.0.0/28은 10.0.0.0/8에 속합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러나 해당 가상 네트워크의 서브넷이 [경로 테이블]에 연결되어 있기 때문에 10.100.0.0/28 대역에 대해서는 다음 홉 유형이 &quot;없음&quot;이 아닌 &quot;가상 네트워크&quot;가 되게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.2 선택적 기본 경로&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음은 선택적 기본 경로에 대해 알아보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure는 1.1에서 언급한 기본 경로 외에 특정 기능을 사용할 때만 추가되는 선택적 기본 경로를 제공하고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMXhAW/btsGYzG1862/rkN0obAxeqt4Pk7gWGUNM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMXhAW/btsGYzG1862/rkN0obAxeqt4Pk7gWGUNM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMXhAW/btsGYzG1862/rkN0obAxeqt4Pk7gWGUNM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMXhAW%2FbtsGYzG1862%2FrkN0obAxeqt4Pk7gWGUNM0%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;782&quot; height=&quot;242&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;선택적 기본 경로에서도 위의 테이블 중&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;다음 홉 유형(&lt;/span&gt;Next hop type)에 대해 좀 더&lt;span&gt;&amp;nbsp;&lt;/span&gt;알아보도록&lt;span&gt;&amp;nbsp;&lt;/span&gt;하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VNet 피어링&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 가상 네트워크 간 가상 네트워크 피어링이 구성되어 있는 경우 해당 경로가 추가됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;실제로 vnet-hyein-01(10.50.0.0/28)이라는 이름의 가상 네트워크와 vnet-hyein-02(10.100.0.0/28)라는 이름의 가상 네트워크 간 가상 네트워크 피어링을 구성해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/binGWb/btsGYBSm5Wz/Vh3TIiZzDSv9C4aNymNKb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/binGWb/btsGYBSm5Wz/Vh3TIiZzDSv9C4aNymNKb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/binGWb/btsGYBSm5Wz/Vh3TIiZzDSv9C4aNymNKb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbinGWb%2FbtsGYBSm5Wz%2FVh3TIiZzDSv9C4aNymNKb1%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;766&quot; height=&quot;196&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;그 후 경로 테이블에서 [유효 경로]를 다시 확인합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/193wc/btsGZneLymM/5kKrEY9H43HKWTOsvzkUJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/193wc/btsGZneLymM/5kKrEY9H43HKWTOsvzkUJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/193wc/btsGZneLymM/5kKrEY9H43HKWTOsvzkUJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F193wc%2FbtsGZneLymM%2F5kKrEY9H43HKWTOsvzkUJ1%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;764&quot; height=&quot;388&quot; data-origin-width=&quot;946&quot; data-origin-height=&quot;481&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이전과는 다르게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;다음 홉 유형&lt;/span&gt;을 VNet 피어링으로 가지는 경로가 추가되었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주소 접두사는 vnet-hyein-01이라는 이름의 가상 네트워크의 주소 대역인 10.50.0.0/28로 지정되어 있음을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크 게이트웨이&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크 게이트웨이가 가상 네트워크에 추가되면 생성되는 경로입니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;온프레미스에 대해 BGP로 광고된 대역이나 로컬 네트워크 게이트웨이에 구성된 접두사에 대한 경로가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;주소 접두사로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;지정됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;온프레미스 대역에 대해 가장 큰 주소 범위로 온프레미스에 대한 경로를 구성하는 것이 권장됩니다. (Azure 가상 네트워크 게이트웨이에 전파할 수 있는 경로의 수에 제한이 있기 때문)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VirtualNetworkServiceEndpoint&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 Azure 서비스에 대한 서비스 엔드포인트를 활성화할 경우 Azure는 특정 서비스에 대한 공용 IP 주소를 경로 테이블에 추가하게 됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스 엔드포인트는 가상 네트워크 내의 개별 서브넷에서 사용하기 때문에 서비스 엔드포인트가 활성화된 서브넷에 대한 주소 접두사가 경로로 지정됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure 서비스의 공용 IP 주소는 주기적으로 변경되지만 Azure가 이러한 주소를 관리하기 때문에 주소가 변경될 경우 경로 테이블의 주소도 자동으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;업데이트됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.3 사용자 정의 경로&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞서 Azure의 시스템 기본 경로는 추가나 삭제가 불가하다는 것을&lt;span&gt;&amp;nbsp;&lt;/span&gt;말씀드렸는데요.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 정의 경로를 통해 기본 시스템 경로를 재정의하거나 경로를 추가하는 것이 가능합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;하나의 경로 테이블에는 여러 개의 서브넷을 연결할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러나 하나의 서브넷에는 여러 개의 경로 테이블을 연결할 수는 없습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;만약 서브넷의 기본 경로와 사용자 정의 경로가 충돌하는 경우 사용자 정의 경로가&lt;span&gt;&amp;nbsp;&lt;/span&gt;우선순위를&lt;span&gt;&amp;nbsp;&lt;/span&gt;가집니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;지금부터는 사용자 정의 경로를 생성할 때 지정할 수 있는 다음 홉 유형에 대해 확인해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;하기&lt;span&gt;&amp;nbsp;&lt;/span&gt;스크린샷에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;볼 수 있듯이 사용자 정의 경로에 대한 다음 홉으로 지정할 수 있는 형식은 총 5개입니다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djQ6nN/btsGYfB1SoH/3O5mglsufhcPm9QMpnvIl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djQ6nN/btsGYfB1SoH/3O5mglsufhcPm9QMpnvIl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djQ6nN/btsGYfB1SoH/3O5mglsufhcPm9QMpnvIl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjQ6nN%2FbtsGYfB1SoH%2F3O5mglsufhcPm9QMpnvIl1%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;444&quot; height=&quot;391&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 어플라이언스&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방화벽 같은 네트워크 애플리케이션을 실행하는 가상 머신이나, Azure Firewall을 다음 홉으로 지정하고자 할 경우 사용할 수 있는 옵션입니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 옵션의 경우 IP 주소를 지정해 주어야 하며 IP 주소는 다음과&lt;span&gt;&amp;nbsp;&lt;/span&gt;같습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신의 private ip 주소 (NIC에 대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;IP 전달 사용 옵션&lt;/i&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;활성화 필요)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Internal Load Balancer의 private ip 주소&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Firewall의 private ip 주소&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주소 접두사를 0.0.0.0/0으로 지정한 후 가상 어플라이언스를 다음 홉으로 지정할 경우 모든 트래픽에 대해 가상 어플라이언스에서 allow/deny를 결정할 수 있도록 할 수 있습니다. &amp;larr; 다음 글에서 할 테스트 중 일부입니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크 게이트웨이&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크 게이트웨이로&lt;span&gt;&amp;nbsp;&lt;/span&gt;라우팅 되는&lt;span&gt;&amp;nbsp;&lt;/span&gt;특정 주소 접두사로 향하는 트래픽을 원할 때 해당 옵션을 사용합니다.&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크 게이트웨이 타입은 반드시 VPN으로 지정되어야 합니다. (ExpressRoute로 지정할 경우 사용자 지정 경로에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;BGP&lt;/b&gt;를 반드시 사용해야 하기 때문입니다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;없음&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지정된 주소 접두사로 향하는 트래픽을 삭제하기 위해 사용하는 옵션입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크 내 시스템 기본 경로를 재정의하고자 할 경우 해당 옵션을 사용합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인터넷&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지정된 주소 접두사로 향하는 트래픽을 명시적으로 인터넷으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;라우팅 하기&lt;span&gt;&amp;nbsp;&lt;/span&gt;위해 사용합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공용 IP를 가지고 있는 Azure의 서비스로 향하는 트래픽을 Azure 백본 네트워크 내에 유지하려는 경우에도 사용합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;추가적으로 사용자 정의 경로 생성 시 선택할 수 있는 대상 유형은 다음과 같습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bT1rZ5/btsGXeqhrEC/pil3euynrKQcLjIiwLUIOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bT1rZ5/btsGXeqhrEC/pil3euynrKQcLjIiwLUIOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bT1rZ5/btsGXeqhrEC/pil3euynrKQcLjIiwLUIOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbT1rZ5%2FbtsGXeqhrEC%2Fpil3euynrKQcLjIiwLUIOK%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;481&quot; height=&quot;282&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;331&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IP 주소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스 태그&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 오늘은 Azure의 라우팅 로직에 대해 세 가지로 나누어 알아보았는데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 글은 이러한 이해를 바탕으로 실제로 여러 가지 상황을 가정하여 테스트를 해보도록 하겠습니다!!&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>Azure</category>
      <category>azure route table</category>
      <category>UDR</category>
      <category>라우팅 테이블</category>
      <category>사용자 정의 경로</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/47</guid>
      <comments>https://with-cloud.tistory.com/47#entry47comment</comments>
      <pubDate>Fri, 26 Apr 2024 16:56:57 +0900</pubDate>
    </item>
    <item>
      <title>Azure Container Login 시 발생할 수 있는 에러 해결하기</title>
      <link>https://with-cloud.tistory.com/46</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글은 Azure Container Registry 이름에 대문자를 포함할 경우 발생할 수 있는 에러에 대해 다뤄 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;간단하게 해결이 되긴 했지만 처음 해당 이슈를 접했을 때에는 왜 안 되는지 모르겠었기 때문에 나중에 이런 일이 발생했을 때에는 놀라지 않도록 기록해 보겠습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 환경 구성&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 개의 Azure Container Registry를 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ACR에 접근할 가상 머신을 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.1 Azure Container Registry 생성&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저, 소문자만 포함하는 ACR을 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;611&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b52vjb/btsGVAmqc4Y/zHliKkyFRFsbrpWt8F5mD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b52vjb/btsGVAmqc4Y/zHliKkyFRFsbrpWt8F5mD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b52vjb/btsGVAmqc4Y/zHliKkyFRFsbrpWt8F5mD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb52vjb%2FbtsGVAmqc4Y%2FzHliKkyFRFsbrpWt8F5mD1%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;619&quot; height=&quot;501&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;611&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pricing plan은 &quot;표준&quot;을 선택합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프라이빗 액세스를 구성하고자 할 경우에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;프리미엄&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;plan을 선택해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [Azure Container Registry]를 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이름에 대문자를 포함하는 Azure Container Registry도 상기 과정과 동일하게 생성하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;611&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tKWik/btsGVxpHiIE/gJ1RKKTntRnDtb1gNGcFk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tKWik/btsGVxpHiIE/gJ1RKKTntRnDtb1gNGcFk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tKWik/btsGVxpHiIE/gJ1RKKTntRnDtb1gNGcFk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtKWik%2FbtsGVxpHiIE%2FgJ1RKKTntRnDtb1gNGcFk0%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;632&quot; height=&quot;509&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;611&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참고로, 컨테이너 레지스트리는 Azure 전역에서 고유한 이름이어야 합니다. (대소문자 구분 없음)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) acrhyein이라는 ACR이 존재할 경우 acrHyein이라는 이름으로는 ACR을 생성할 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [Azure Container Registry]를 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.2 가상 머신 생성 및 세부 구성&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Local PC에서도 접근이 가능하지만 가상 머신을 생성하여 이미지를 생성하고 Push를 진행해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNYkgH/btsGWNkZJe2/VR5X2ZnbEjzOYM5SJ7j2U1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNYkgH/btsGWNkZJe2/VR5X2ZnbEjzOYM5SJ7j2U1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNYkgH/btsGWNkZJe2/VR5X2ZnbEjzOYM5SJ7j2U1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNYkgH%2FbtsGWNkZJe2%2FVR5X2ZnbEjzOYM5SJ7j2U1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;564&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;697&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;765&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J4RV3/btsGVyoBd5N/HjYgkIZh8Vbxr03m25jjTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J4RV3/btsGVyoBd5N/HjYgkIZh8Vbxr03m25jjTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J4RV3/btsGVyoBd5N/HjYgkIZh8Vbxr03m25jjTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ4RV3%2FbtsGVyoBd5N%2FHjYgkIZh8Vbxr03m25jjTk%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;627&quot; height=&quot;327&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;본 테스트에서는 Ubuntu 20.04 이미지를 사용하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [가상 머신]을 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;가상 머신 생성이 완료되었으면 공인 IP로 접근합니다. (ssh hyein@{vm 공인 ip})&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daqHGK/btsGVxwn8vW/oK2PQY4gdtEvEpMlHEAlA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daqHGK/btsGVxwn8vW/oK2PQY4gdtEvEpMlHEAlA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daqHGK/btsGVxwn8vW/oK2PQY4gdtEvEpMlHEAlA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaqHGK%2FbtsGVxwn8vW%2FoK2PQY4gdtEvEpMlHEAlA1%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;688&quot; height=&quot;148&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;가상 머신에서 하기 과정을 진행해야 합니다. (설치 과정은 링크로 갈음합니다.)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;az cli를 설치합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker를 설치합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure CLI 설치&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt#install-azure-cli&quot;&gt;https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt#install-azure-cli&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1714093468749&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dxatzQ/hyVSYzafaw/JzltRSDQMaJVajBF4X940K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot; data-og-url=&quot;https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux&quot; data-og-source-url=&quot;https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt#install-azure-cli&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-description=&quot;Learn how to install and run the Azure CLI on Linux manually. You can install the Azure CLI on Linux computers with one command or a step-by-step process.&quot; data-og-title=&quot;Install the Azure CLI on Linux&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt#install-azure-cli&quot; data-source-url=&quot;https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt#install-azure-cli&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dxatzQ/hyVSYzafaw/JzltRSDQMaJVajBF4X940K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Install the Azure CLI on Linux&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Learn how to install and run the Azure CLI on Linux manually. You can install the Azure CLI on Linux computers with one command or a step-by-step process.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker 설치&lt;/span&gt;&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&quot;&gt;https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1714093468750&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/f2qE6/hyVVKsvSjT/LIQw8Wk9FfJMYrsOGpjp9k/img.jpg?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260&quot; data-og-url=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; data-og-source-url=&quot;https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&quot; data-og-host=&quot;docs.docker.com&quot; data-og-description=&quot;Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.&quot; data-og-title=&quot;Install Docker Engine on Ubuntu&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&quot; data-source-url=&quot;https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/f2qE6/hyVVKsvSjT/LIQw8Wk9FfJMYrsOGpjp9k/img.jpg?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Install Docker Engine on Ubuntu&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 대문자를 포함하지 않은 ACR에 컨테이너 이미지&lt;span&gt;&amp;nbsp;&lt;/span&gt;push 하기&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 대문자를 포함하지 않은 ACR에 컨테이너 이미지를 push해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker image를 Docker Hub에서 Pull 해옵니다. (&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker pull alpine&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BCyPn/btsGXQ2m3NB/0hy81S8RPth1KLpwIO9zwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BCyPn/btsGXQ2m3NB/0hy81S8RPth1KLpwIO9zwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BCyPn/btsGXQ2m3NB/0hy81S8RPth1KLpwIO9zwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBCyPn%2FbtsGXQ2m3NB%2F0hy81S8RPth1KLpwIO9zwK%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;667&quot; height=&quot;104&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;이미지를 Azure Container Registry에 push하기 위해 먼저&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;az login&lt;/b&gt;을 진행합니다.&lt;br /&gt;(멀티 테넌트를 소유하고 있는 경우 -t 옵션으로 tenantID를 입력해 주어야 합니다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F3sex/btsGVhOcAzb/WiAKDllln3AwIndhemxmYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F3sex/btsGVhOcAzb/WiAKDllln3AwIndhemxmYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F3sex/btsGVhOcAzb/WiAKDllln3AwIndhemxmYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF3sex%2FbtsGVhOcAzb%2FWiAKDllln3AwIndhemxmYk%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;686&quot; height=&quot;59&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;멀티 구독인 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;az account -s &quot;구독 명&quot;&lt;/b&gt;을 입력하여 Azure Container Registry가 존재하는 구독으로 활성 구독을 변경해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;acrhyein이라는 ACR에 로그인합니다. (&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;az acr login -n acrhyein&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brl8D8/btsGVyoBd6e/zGHaBotsXoPRcni9PTtxl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brl8D8/btsGVyoBd6e/zGHaBotsXoPRcni9PTtxl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brl8D8/btsGVyoBd6e/zGHaBotsXoPRcni9PTtxl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrl8D8%2FbtsGVyoBd6e%2FzGHaBotsXoPRcni9PTtxl0%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;506&quot; height=&quot;50&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ACR에 push할 컨테이너 이미지에 대한 tag를 지정합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #000000; color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;docker tag alpine:latest acrhyein.azurecr.io/hyein&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;&lt;b&gt;docker images&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;명령어를 통해 tag를 확인합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKsKdT/btsGWr3yXSA/J3L9eVXJ82BrQhU6fKUYNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKsKdT/btsGWr3yXSA/J3L9eVXJ82BrQhU6fKUYNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKsKdT/btsGWr3yXSA/J3L9eVXJ82BrQhU6fKUYNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKsKdT%2FbtsGWr3yXSA%2FJ3L9eVXJ82BrQhU6fKUYNk%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;608&quot; height=&quot;65&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;&lt;b&gt;docker push acrhyein.azurecr.io/hyein&lt;/b&gt;&amp;nbsp;명령어로 ACR에 push를 진행합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1371&quot; data-origin-height=&quot;145&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtUZOy/btsGXdqbefg/KSgOoyVqn2wWjVEY4XBVD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtUZOy/btsGXdqbefg/KSgOoyVqn2wWjVEY4XBVD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtUZOy/btsGXdqbefg/KSgOoyVqn2wWjVEY4XBVD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtUZOy%2FbtsGXdqbefg%2FKSgOoyVqn2wWjVEY4XBVD1%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;699&quot; height=&quot;74&quot; data-origin-width=&quot;1371&quot; data-origin-height=&quot;145&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Portal 상에서 ACR에 이미지가 정상적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;push 된&lt;span&gt;&amp;nbsp;&lt;/span&gt;것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDCfsN/btsGWQPydkq/D5BVUHkk6CMkZdWXKPSaQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDCfsN/btsGWQPydkq/D5BVUHkk6CMkZdWXKPSaQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDCfsN/btsGWQPydkq/D5BVUHkk6CMkZdWXKPSaQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDCfsN%2FbtsGWQPydkq%2FD5BVUHkk6CMkZdWXKPSaQ1%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;512&quot; height=&quot;294&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;상기 내용과 같이 소문자로 이루어진 ACR의 경우 어떠한 문제도 발생하지 않는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 대문자를 포함한 ACR에 컨테이너 이미지 Push 하기&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 대문자를 포함한 이름을 가지고 있는 ACR에 컨테이너 이미지를&lt;span&gt;&amp;nbsp;&lt;/span&gt;push 해&lt;span&gt;&amp;nbsp;&lt;/span&gt;보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;acrHyein이라는 ACR에 로그인합니다. (&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;az acr login -n acrHyein01&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1700&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bvvjn/btsGWOqFYPw/wMaS9HHxu6u0VivK4B88o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bvvjn/btsGWOqFYPw/wMaS9HHxu6u0VivK4B88o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bvvjn/btsGWOqFYPw/wMaS9HHxu6u0VivK4B88o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBvvjn%2FbtsGWOqFYPw%2FwMaS9HHxu6u0VivK4B88o1%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;1700&quot; height=&quot;112&quot; data-origin-width=&quot;1700&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Login Succeeded라는 문구가 출력되기는 하지만 2번 과정에서와는 다르게 노란색의 경고 문구가 함께 출력되어 있는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;  경고 문구  &lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Uppercase characters are detected in the registry name.&lt;br /&gt;When using its server url in docker commands, to avoid authentication errors, use all lowercase.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;ACR 이름에 대문자가 있을 경우,&amp;nbsp;docker command에서 server url을 사용할 때 authentication error를 피하기 위해서는 모두 대문자로 사용해라 라는 내용입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;실제로 ACR에 로그인 시 서버 명을 모두 소문자로 한 후 로그인을 시도하면 하기와 같이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;Login Succeeded&lt;/i&gt;라는 문구만 출력되는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bigl47/btsGXRmF0FD/gkuLJYrxloYsU4xh71ztqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bigl47/btsGXRmF0FD/gkuLJYrxloYsU4xh71ztqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bigl47/btsGXRmF0FD/gkuLJYrxloYsU4xh71ztqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbigl47%2FbtsGXRmF0FD%2FgkuLJYrxloYsU4xh71ztqk%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;481&quot; height=&quot;46&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;우선, 대문자가 포함되어 있는 서버명으로 하기 과정을 진행해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신에 빌드 되어 있는 alpine이라는 이미지에 대해 태그를 생성합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #000000; color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;docker tag alpine:latest acrHyein01.azurecr.io/hyein&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkUY9q/btsGWPC8ByK/rRNXUrCyu6rM7tVkiBJHeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkUY9q/btsGWPC8ByK/rRNXUrCyu6rM7tVkiBJHeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkUY9q/btsGWPC8ByK/rRNXUrCyu6rM7tVkiBJHeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkUY9q%2FbtsGWPC8ByK%2FrRNXUrCyu6rM7tVkiBJHeK%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;101&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;&lt;b&gt;docker push acrHyein01.azurecr.io/hyein&lt;/b&gt;&amp;nbsp;명령어로 ACR에 push를 진행합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1694&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIb3y5/btsGVzOyx3F/EY4zgDKwPE3riKHkAxkZo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIb3y5/btsGVzOyx3F/EY4zgDKwPE3riKHkAxkZo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIb3y5/btsGVzOyx3F/EY4zgDKwPE3riKHkAxkZo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIb3y5%2FbtsGVzOyx3F%2FEY4zgDKwPE3riKHkAxkZo0%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;1694&quot; height=&quot;174&quot; data-origin-width=&quot;1694&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상기 스크린샷과 같이 unauthorized로 시작하는 에러가 발생한 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;  에러 문구  &lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Using&amp;nbsp;default&amp;nbsp;tag:&amp;nbsp;latest&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The&amp;nbsp;push&amp;nbsp;refers&amp;nbsp;to&amp;nbsp;repository&amp;nbsp;[acrHyein01.azurecr.io/hyein]&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;d4fc045c9e3a:&amp;nbsp;Preparing&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;unauthorized: {&quot;errors&quot;: {&quot;code&quot;:&quot;UNAUTHORIZED&quot;,&quot;message&quot;:&quot;authentication required, visit &lt;a href=&quot;https://aka.ms/acr/authorization&quot;&gt;https://aka.ms/acr/authorization&lt;/a&gt;&amp;nbsp;for&amp;nbsp;more&amp;nbsp;information.&quot;}]}&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이를 방지하기 위해서는 server url을 모두 lowercase로 변경하여야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ACR의 서버 명에 있는 대문자를 모두 소문자로 바꾼 후 태그를 재 생성합니다.&amp;nbsp;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #000000; color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;docker tag alpine:latest acrhyein01.azurecr.io/hyein&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/64Xxg/btsGXf9p7Q6/qN29BsNHQyoQ3t0AEacx10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/64Xxg/btsGXf9p7Q6/qN29BsNHQyoQ3t0AEacx10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/64Xxg/btsGXf9p7Q6/qN29BsNHQyoQ3t0AEacx10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F64Xxg%2FbtsGXf9p7Q6%2FqN29BsNHQyoQ3t0AEacx10%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;659&quot; height=&quot;121&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;&lt;b&gt;docker push acrhyein01.azurecr.io/hyein&lt;/b&gt;&amp;nbsp;명령어로 ACR에 push를 진행합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1368&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MQuwu/btsGVxwn8wK/mWxzxdT0hjDRFDqnXdo7O1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MQuwu/btsGVxwn8wK/mWxzxdT0hjDRFDqnXdo7O1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MQuwu/btsGVxwn8wK/mWxzxdT0hjDRFDqnXdo7O1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMQuwu%2FbtsGVxwn8wK%2FmWxzxdT0hjDRFDqnXdo7O1%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;676&quot; height=&quot;70&quot; data-origin-width=&quot;1368&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아까와는 다르게 push가 정상적으로 진행되는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마지막으로, Azure Portal 상에서 ACR에 이미지가 정상적으로 push 되었는지 확인합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwTBQL/btsGWuFZsMn/Xu96M9KAsDGahpPfJWhwck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwTBQL/btsGWuFZsMn/Xu96M9KAsDGahpPfJWhwck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwTBQL/btsGWuFZsMn/Xu96M9KAsDGahpPfJWhwck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwTBQL%2FbtsGWuFZsMn%2FXu96M9KAsDGahpPfJWhwck%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;495&quot; height=&quot;287&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;acrHyein01이라는 이름의 ACR에 컨테이너 이미지가 제대로 push된 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;추가적으로,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 내용은 Microsoft Azure 공식 문서의 FAQ에도 적혀 있으니 참고하실 분들은 참고 부탁 드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/azure/container-registry/container-registry-faq#az-acr-login------------------------------docker--------&quot;&gt;https://learn.microsoft.com/ko-kr/azure/container-registry/container-registry-faq#az-acr-login------------------------------docker--------&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1714093468772&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dj2l1h/hyVVCahuzz/MuUegXbGNolGu6zM1Y6QI0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/azure/container-registry/container-registry-faq&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/azure/container-registry/container-registry-faq#az-acr-login------------------------------docker--------&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-description=&quot;Azure Container Registry 서비스와 관련된 질문과 대답입니다.&quot; data-og-title=&quot;Azure Container Registry&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://learn.microsoft.com/ko-kr/azure/container-registry/container-registry-faq#az-acr-login------------------------------docker--------&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/azure/container-registry/container-registry-faq#az-acr-login------------------------------docker--------&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dj2l1h/hyVVCahuzz/MuUegXbGNolGu6zM1Y6QI0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Azure Container Registry&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Azure Container Registry 서비스와 관련된 질문과 대답입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/46</guid>
      <comments>https://with-cloud.tistory.com/46#entry46comment</comments>
      <pubDate>Fri, 26 Apr 2024 10:11:35 +0900</pubDate>
    </item>
    <item>
      <title>#01 REST API - 개념과 보안</title>
      <link>https://with-cloud.tistory.com/45</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅은 관련&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 업무를 하면서 REST API 에 대해 정리할 필요성을 느꼈기에 작성하게 되었습니다 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래처럼 2편으로 나눠서 포스팅할 예정입니다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;#01&lt;/span&gt;&amp;nbsp;REST&amp;nbsp;API&amp;nbsp;-&amp;nbsp;개념과&amp;nbsp;보안&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;#02&lt;/span&gt; REST API - 활용&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;엄청난 내용을 다루진 않지만, 그래도 &lt;b&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;From ? To !&lt;/span&gt;&lt;/b&gt; 가 될 수 있는 내용이 될 수 있지 않을까 하는 생각과 함께&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시작합니다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;038&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/038.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/038.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. API 란?&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. 정의&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1-1. 개념&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: API는 Application Programming Interface의 약자로, 소프트웨어 응용 프로그램들이 서로 통신할 수 있도록 만들어진 인터페이스를 말합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 쉽게 표현하자면, &lt;b&gt;&quot;애플리케이션 간 상호 작용할 수 있는 중간 다리 역할을 한다&quot;&lt;/b&gt;라고 이해하시면 좋을 것 같네요.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(아래 출처에서 가져온 이미지로는 &quot;중간 다리 역할 = 점원&quot; 으로 표현하고 있네요 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 역할을 하는 API는 서로 통신할 수 있는 방법을 제공하며, 데이터 및 서비스에 접근하고 사용할 수 있게 하는 매개체입니다.&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;639&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbMndb/btsGMA7c68N/xPOEv8yINAiYlFfQY09Sx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbMndb/btsGMA7c68N/xPOEv8yINAiYlFfQY09Sx0/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://blog.wishket.com/wp-content/uploads/2019/10/API-%EC%89%BD%EA%B2%8C-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbMndb/btsGMA7c68N/xPOEv8yINAiYlFfQY09Sx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbMndb%2FbtsGMA7c68N%2FxPOEv8yINAiYlFfQY09Sx0%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;639&quot; height=&quot;628&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://blog.wishket.com/wp-content/uploads/2019/10/API-%EC%89%BD%EA%B2%8C-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1-2. API&amp;nbsp; 유형&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Private APIs&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Partner APIs&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Open(Public or External) APIs&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;말 그대로 Prviate API는 내부에서 사용되는 API입니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기업 내부에서 개발자나 사용이 허용되는 일부 사용자가 기업의 IT 시스템이나 애플리케이션을 통합, 구축 등의 목적으로 사용됩니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 외부(제3자)에게는 노출되지 않습니다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Partner API의 경우, 기업 간 계약을 통해 허용된 비즈니스 파트너가 사용가능한 API 입니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공통으로 앱을 개발하거나, 모니터링 및 성능 개선의 목적으로 타사의 솔루션을 사용할 때, 제공되는 API라고 할 수 있습니다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Open API는 무료(개방형)와 상용 2가지 유형이 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;무료(개방형)의 경우, 대부분의 기능이 공개되어 있으며, 별도의 제약 및 승인 없이 공개된 API를 사용하여 애플리케이션을 생성하고 테스트할 수 있습니다.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상용 API의 경우, 구독료 혹은 사용한 만큼 지불하는 Pay As You Go 방식을 통해 제공합니다.&amp;nbsp;&lt;/span&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1-3. API 방식&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 그림에서 보이는 것과 같이, 프로그램 - 프로그램 관계를 클라이언트 - 서버 관계로 아래의 그림처럼 표현할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들어, 사용자가 웹 브라우저에서 네이버에 접속했을 때&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네이버는 다양한 카테고리를 통해 정보를 확인하고 조작할 수 있도록 구성을 해두었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네이버의 뉴스 카테코리를 클릭했을 때, 뉴스라는 API를 호출(Request)하고 해당 요청에 대해 API라는 요청을 처리하는 규칙을 통해서 Web Server는 요청을 해석하고 데이터가 저장된 Database에 여러 섹션(정치, 문화, 스포츠 등) 다양한 데이터(정보)를 가져와 사용자에서 보여주는 응답(Reposne)하는 과정이라고 할 수 있습니다.&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;1025&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GOkrZ/btsGNEIQ03B/T6jbm8mXDpl7YMDjUkXJG0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GOkrZ/btsGNEIQ03B/T6jbm8mXDpl7YMDjUkXJG0/img.jpg&quot; data-alt=&quot;출처 : https://www.altexsoft.com/media/2019/06/1.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GOkrZ/btsGNEIQ03B/T6jbm8mXDpl7YMDjUkXJG0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGOkrZ%2FbtsGNEIQ03B%2FT6jbm8mXDpl7YMDjUkXJG0%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;1025&quot; height=&quot;370&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://www.altexsoft.com/media/2019/06/1.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2. REST API 란?&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2-1. REST API 개념 및 특징&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 그렇다면 REST API는 무엇일까요? 앞서 설명한 API는 여러 형태가 있을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가장 흔한 형태는 &lt;b&gt;웹(HTTP) API&lt;/b&gt;로, HTTP 프로토콜을 사용하며 네트워크를 통해 상호 작용 하도록 설계되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일반적으로 테스트 형식의 코드로 작성하면서 만드는 API가 웹 API에 해당합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 각 사용자들이 자기만의 API를 만드는 것은 다른 사람과 공통으로 적용할 수 없는 자기만의 규칙을 만든 다는 것으로 볼 수 있습니다. 즉, 기업에서 담당자가 변경되거나, 다른 파트너와의 API를 공유할 때 타인이 이해하기 어렵다는 문제점이 발생할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서에서 이러한 문제점을 개선하고자 그리고 API를 보다 잘 활용해 보고자 &quot;REST(Representational State Transfer) API&quot;가 등장하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;REST(Representational State Transfer) API 는 네트워크 아키텍처의 한 형태로, 자원을 URI로 표현하고 해당 자원에 대한 행위를 HTTP METHOD(GET, POST, PUT, DELETE 등)를 통해 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 블로그 서비를 REST API로 구현하고자 한다면 아래와 같이 표현할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 자원을 URL로 표현&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;블로그의 모든 글: GET /posts&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 글: GET /posts/{post_id}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새로운 글 생성: POST /posts&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;글 업데이트: PUT /posts/{post_id}&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;글 삭제: DELETE /posts/{post_id}&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; 2. 자원의 행위는 HTTP METHOD로 표현&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GET: 자원을 읽기 위해 사용됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;POST: 새로운 자원을 생성하기 위해 사용됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PUT: 자원을 업데이트하기 위해 사용됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DELETE: 자원을 삭제하기 위해 사용됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. 예시&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;블로그 API를 사용하여 특정 ID를 가진 글을 읽고자 한다면&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1713764266719&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;GET /posts/123&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;새로운 글을 작성하려면&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1713764304208&quot; class=&quot;jboss-cli&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;POST /posts&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이처럼 Represent 라는 의미에 맞게, &lt;b&gt;요청하는 내용만 보고 무엇을 요청하는 것인지 직관적으로 이해&lt;/b&gt;할 수 있어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위의 표현은 METHOD에 충실히 표현한 것이므로, HTTP 프로토콜을 사용하기에 정확히 표현하자면 아래처럼 표현할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713764912296&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;*예시
GET http(s)://with-cloud.tistory.com/posts/123&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, REST&amp;nbsp;API는&amp;nbsp;크게&amp;nbsp;4가지로&amp;nbsp;이루어져&amp;nbsp;있습니다.&amp;nbsp;①권한&amp;nbsp;인증&amp;nbsp;등에&amp;nbsp;활용되는&amp;nbsp;header,&amp;nbsp;②위치를&amp;nbsp;나타내는&amp;nbsp;path,&amp;nbsp;③쿼리문을&amp;nbsp;활용한&amp;nbsp;query&amp;nbsp;string,&amp;nbsp;④requsest&amp;nbsp;요청에&amp;nbsp;포함되는&amp;nbsp;body로&amp;nbsp;이루어져&amp;nbsp;있습니다.&amp;nbsp;일반적으로&amp;nbsp;③query&amp;nbsp;string은&amp;nbsp;GET&amp;nbsp;방식&amp;nbsp;④body는&amp;nbsp;POST&amp;nbsp;방식에&amp;nbsp;활용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞으로 진행할 보안 인증(Authorization) 테스트에서 인증을 위한 값들은 Header의 매개변수로써 사용되게 됩니다.&lt;/span&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;&lt;span style=&quot;color: #000000;&quot;&gt;1-2-2. REST API 설계 규칙&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;SE-ec184901-a22d-4706-8536-6a07c21f9189&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;URI는 명사를 사용한다.(리소스명은 동사가 아닌 명사를 사용해야한다.)&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;SE-5e7e0520-4940-4725-beac-7f9f2765e702&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;슬래시(/)로 계층 관계를 표현한다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;SE-52212027-de30-4646-8bcb-f43a1a0073a9&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;URI 마지막 문자로 슬래시(/)를 포함하지 않는다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;SE-af3ce892-c715-42ff-8d68-e347cd991776&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;밑줄(_)을 사용하지 않고, 하이픈(-)을 사용한다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;SE-c1b82721-23bb-41d3-b8e9-8bf47663ea2b&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;URI는 소문자로만 구성한다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;SE-97787335-32c7-48d7-9b94-ffe888f403d4&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTP 응답 상태 코드 사용 - 클라이언트는 해당 요청에 대한 실패, 처리 완료 또는 잘못된 요청 등에 대한 피드백을 받아야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;SE-6901bb9a-a892-42ed-afe9-a82e0ac977e9&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일 확장자는 URI에 포함하지 않는다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. API 보안 방식&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 그렇다면, 이러한 REST API는 어떻게 보호해야 하는 걸까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대부분의 서비스의 구현은 API를 기반으로 통신합니다. 앞서 설명한 것처럼 클라이언트 - 서버 간 대부분의 통신이 API 방식으로 이뤄지게 되는데, 이는 데이터 및 시스템을 보호하고 여러 위협으로 보호하기 위해 필수적인 영역입니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;인증 및 권한 부여&lt;/b&gt;: 사용자가 인증되지 않은 경우 API에 액세스 할 수 없도록 보장해야 합니다. 또한, 권한이 없는 사용자가 보호되는 자원에 액세스하지 못하도록 권한을 제어해야 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;데이터 무결성&lt;/b&gt;: API를 통해 전송되는 데이터는 무결성을 유지해야 합니다. 즉, 데이터가 중간에서 변경되거나 손상되는 것을 방지해야 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;기밀성&lt;/b&gt;: 민감한 정보가 포함된 데이터는 인가된 사용자만 액세스할 수 있어야 합니다. 이러한 정보가 노출되면 비즈니스나 개인에게 심각한 피해를 줄 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DDoS 및 악의적인 공격 방지&lt;/b&gt;: REST API는 인터넷을 통해 공개되므로 DDoS(분산 서비스 거부) 및 다양한 악의적인 공격에 취약합니다. 적절한 방어 메커니즘이 필요합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;데이터 검증 및 처리&lt;/b&gt;: API에 입력되는 데이터는 검증되어야 합니다. 이는 유효성 검사를 통해 잘못된 요청이나 악의적인 데이터를 방지하는 것을 의미합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;로그 및 감사&lt;/b&gt;: API에 대한 액세스 및 활동에 대한 로그를 유지하고 감사해야 합니다. 이를 통해 보안 사고가 발생했을 때 추적하고 대응할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 REST API의 보안을 위한 중요한 메커니즘인 &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;인증(Authentication)과 인가(Authorization) 개념에 대해서 살펴보겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-1. Authentication(인증)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 인증이란? &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;API의 보호된 리소스에 대한 액세스를 허용하기 위해 확인하는 절차로&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;사용자가 자신이 주장하는 신원(예: 사용자 이름과 비밀번호)을 확인하는 과정입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자가 시스템에 로그인할 때 인증이 이루어집니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대부분의 경우, 인증은 사용자 이름과 비밀번호를 사용하여 이루어지지만, 보다 안전한 방법으로는 토큰 기반 인증(JSON Web Token 등)이나 OAuth와 같은 프로토콜을 사용할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증이 성공하면 사용자는 시스템에 대한 액세스 권한을 부여받습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2. Authorization(인가)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 인가란? &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;인증된 사용자가 특정 자원이나 기능에 액세스 할 수 있는 권한을 가지고 있는지 확인하는 과정입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인가는 인증 이후에 이루어지며, 사용자의 역할이나 권한에 따라 자원에 대한 접근을 제어합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들어, 사용자가 관리자로 인증되었지만 특정 리소스에 대한 관리자 권한이 없는 경우, 해당 리소스에 대한 액세스가 거부됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인가는 일반적으로 역할 기반 접근 제어(Role-Based Access Control, RBAC)나 규칙 기반 접근 제어(Rule-Based Access Control)와 같은 방법을 사용하여 구현됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이외에도, 네트워크 레벨 암호화, 메시지 무결성 보장, 메시지 본문 암호화 등이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. REST API 인증 방법&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: REST API인증 테스트를 위해, Python(Flask) 활용하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용된 샘플 코드는 다음과 같습니다!&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713774672374&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;from flask import Flask, request, jsonify

app = Flask(__name__)

# GET 요청을 처리하는 엔드포인트
@app.route('/api/data', methods=['GET'])
def get_data():
    # GET 요청의 쿼리 파라미터 가져오기
    param = request.args.get('param')

    if not param:
        return jsonify({'error': 'Parameter is missing'}), 400

    return jsonify({'message': f'GET 요청이 성공적으로 처리되었습니다. Parameter: {param}'})

# POST 요청을 처리하는 엔드포인트
@app.route('/api/data', methods=['POST'])
def post_data():
    # POST 요청의 JSON 데이터 가져오기
    data = request.get_json()

    if not data:
        return jsonify({'error': 'JSON data is missing'}), 400

    return jsonify({'message': f'POST 요청이 성공적으로 처리되었습니다. Data: {data}'})

if __name__ == '__main__':
    app.run(host=&quot;0.0.0.0 or Private IP&quot;, Port=&quot;5000&quot; ,debug=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;span style=&quot;color: #000000;&quot;&gt;(GET) 파라미터값 입력 X&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1591&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d4NSxu/btsGPrh4gO6/cKu9OdkuN2HnLSFKy8Pli0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d4NSxu/btsGPrh4gO6/cKu9OdkuN2HnLSFKy8Pli0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d4NSxu/btsGPrh4gO6/cKu9OdkuN2HnLSFKy8Pli0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd4NSxu%2FbtsGPrh4gO6%2FcKu9OdkuN2HnLSFKy8Pli0%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;1591&quot; height=&quot;537&quot; data-origin-width=&quot;1591&quot; data-origin-height=&quot;537&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;(GET)&amp;nbsp;&lt;/span&gt; 파라미터값 입력 O&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2715&quot; data-origin-height=&quot;1206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ7EB9/btsGRikdSTY/gRTLO0EtI5KajkyQ40LcH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ7EB9/btsGRikdSTY/gRTLO0EtI5KajkyQ40LcH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ7EB9/btsGRikdSTY/gRTLO0EtI5KajkyQ40LcH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ7EB9%2FbtsGRikdSTY%2FgRTLO0EtI5KajkyQ40LcH1%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;2715&quot; height=&quot;1206&quot; data-origin-width=&quot;2715&quot; data-origin-height=&quot;1206&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(POST)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;Request Content-Type&lt;/span&gt; 제약으로, 만약 body 에 대해 Json 형식으로 값을 전달하지 않으면 &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;415 Unsupported Media Type 에러가 뜨게 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2710&quot; data-origin-height=&quot;1112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAHCCR/btsGQQaGkhS/ydGGK1ZKtiTfvTmBMgvwBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAHCCR/btsGQQaGkhS/ydGGK1ZKtiTfvTmBMgvwBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAHCCR/btsGQQaGkhS/ydGGK1ZKtiTfvTmBMgvwBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAHCCR%2FbtsGQQaGkhS%2FydGGK1ZKtiTfvTmBMgvwBK%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;2710&quot; height=&quot;1112&quot; data-origin-width=&quot;2710&quot; data-origin-height=&quot;1112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이처럼 &lt;b&gt;외부에서 별도의 제약 없이 API를 호출하는 것&lt;/b&gt;은 보안 이슈와 데이터 보호에 취약합니다. 따라서 아래 4가지 인증 방법에 대해서 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3-1. Basic&amp;nbsp;Authentication&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lew03/btsGN3oRn6L/Ik4nUDkpiQV9HCegekGDZ0/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lew03/btsGN3oRn6L/Ik4nUDkpiQV9HCegekGDZ0/tfile.svg&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://voyager.postman.com/illustration/http-basic-auth-diagram-postman.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lew03/btsGN3oRn6L/Ik4nUDkpiQV9HCegekGDZ0/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flew03%2FbtsGN3oRn6L%2FIk4nUDkpiQV9HCegekGDZ0%2Ftfile.svg&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;763&quot; height=&quot;419&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://voyager.postman.com/illustration/http-basic-auth-diagram-postman.svg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가장 간단한 형태의 인증으로, 사용자 이름과 비밀번호를 인코딩(Base64)하여 HTTP 요청 헤더에 포함시키는 방식입니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 샘플 코드의 내용처럼 &quot;사용자이름:비밀번호 = admintak:pwdforapitest&quot;라는 문자열을 인코딩&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보안적으로 취약할 수 있으므로 HTTPS(클라이언트 인증서, 신원 확인을 위한 검증)와 함께 사용하는 것이 좋습니다.&lt;/span&gt;&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;&lt;span style=&quot;color: #000000;&quot;&gt;*Basic Authentication TEST&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 위 샘플코드를 기반으로 Basic Auth 를 구현해 보겠습니다.&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;span style=&quot;color: #000000;&quot;&gt;라이브러리 설치&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1713774786776&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install Flask-BasicAuth&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Basic Auth 적용 샘플 코드&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 METHOD에 Basic Auth 데코레이터 추가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1713774818982&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask, request, jsonify
from flask_basicauth import BasicAuth

app = Flask(__name__)
app.config['BASIC_AUTH_USERNAME'] = 'admintak'
app.config['BASIC_AUTH_PASSWORD'] = 'pwdforapitest'

basic_auth = BasicAuth(app)

# GET 요청을 처리하는 엔드포인트
@app.route('/api/data', methods=['GET'])
@basic_auth.required
def get_data():
    # GET 요청의 쿼리 파라미터 가져오기
    param = request.args.get('param')

    if not param:
        return jsonify({'error': 'Parameter is missing'}), 400

    return jsonify({'message': f'GET 요청이 성공적으로 처리되었습니다. Parameter: {param}'})

# POST 요청을 처리하는 엔드포인트
@app.route('/api/data', methods=['POST'])
@basic_auth.required
def post_data():
    # POST 요청의 JSON 데이터 가져오기
    data = request.get_json()

    if not data:
        return jsonify({'error': 'JSON data is missing'}), 400

    return jsonify({'message': f'POST 요청이 성공적으로 처리되었습니다. Data: {data}'})

if __name__ == '__main__':
    app.run(host=&quot;0.0.0.0 or Private IP&quot;, Port=&quot;5000&quot; ,debug=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Authorization(인증) 없이 호출할 경우, &lt;b&gt;Status : 401 Unauthorized&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2618&quot; data-origin-height=&quot;1291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbaaRD/btsGOvkRDJn/ZruRlylKoBkbrKG0yKMqvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbaaRD/btsGOvkRDJn/ZruRlylKoBkbrKG0yKMqvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbaaRD/btsGOvkRDJn/ZruRlylKoBkbrKG0yKMqvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbaaRD%2FbtsGOvkRDJn%2FZruRlylKoBkbrKG0yKMqvK%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;2618&quot; height=&quot;1291&quot; data-origin-width=&quot;2618&quot; data-origin-height=&quot;1291&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;2617&quot; data-origin-height=&quot;1295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsoeh3/btsGOfP2IEB/72BD3KFKNnZUnkcoBsSMAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsoeh3/btsGOfP2IEB/72BD3KFKNnZUnkcoBsSMAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsoeh3/btsGOfP2IEB/72BD3KFKNnZUnkcoBsSMAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsoeh3%2FbtsGOfP2IEB%2F72BD3KFKNnZUnkcoBsSMAK%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;2617&quot; height=&quot;1295&quot; data-origin-width=&quot;2617&quot; data-origin-height=&quot;1295&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Authorization(인증) : Basic Auth 적용&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래처럼 세팅하면, Postman에서 해당 값에 대해 인코딩(Base64)을 자동으로 지원해 주기 때문에 가능합니다.&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EdU7t/btsGOgBojyP/dN3jjfLZAhUkQ5mlNnOwWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EdU7t/btsGOgBojyP/dN3jjfLZAhUkQ5mlNnOwWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EdU7t/btsGOgBojyP/dN3jjfLZAhUkQ5mlNnOwWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEdU7t%2FbtsGOgBojyP%2FdN3jjfLZAhUkQ5mlNnOwWk%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;1260&quot; height=&quot;463&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;463&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 실제로는 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.base64encode.org/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;인코딩(or 디코딩) 사이트&lt;/a&gt;에서 값을 확인해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWbmrC/btsGRqP9bfy/T7iBWVJkBDWzkhOkv5OYjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWbmrC/btsGRqP9bfy/T7iBWVJkBDWzkhOkv5OYjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWbmrC/btsGRqP9bfy/T7iBWVJkBDWzkhOkv5OYjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWbmrC%2FbtsGRqP9bfy%2FT7iBWVJkBDWzkhOkv5OYjK%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;984&quot; height=&quot;634&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2607&quot; data-origin-height=&quot;1045&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eB2vyV/btsGNrpXDex/S9iWy1hEkxZvz84Fnf25F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eB2vyV/btsGNrpXDex/S9iWy1hEkxZvz84Fnf25F1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eB2vyV/btsGNrpXDex/S9iWy1hEkxZvz84Fnf25F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeB2vyV%2FbtsGNrpXDex%2FS9iWy1hEkxZvz84Fnf25F1%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;2607&quot; height=&quot;1045&quot; data-origin-width=&quot;2607&quot; data-origin-height=&quot;1045&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;2605&quot; data-origin-height=&quot;1149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cq4ze/btsGOejkbF8/5WRYLcEmf2g4elCDvv6iZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cq4ze/btsGOejkbF8/5WRYLcEmf2g4elCDvv6iZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cq4ze/btsGOejkbF8/5WRYLcEmf2g4elCDvv6iZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCq4ze%2FbtsGOejkbF8%2F5WRYLcEmf2g4elCDvv6iZ1%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;2605&quot; height=&quot;1149&quot; data-origin-width=&quot;2605&quot; data-origin-height=&quot;1149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;직접 인코딩 값을 HTTP 헤더 값으로 넣는 경우&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1713775852331&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Authorization: Basic YWRtaW50YWs6cHdkZm9yYXBpdGVzdA==&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;2621&quot; data-origin-height=&quot;1115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clmvfD/btsGNMtPgAd/IDZdkrJoWHJHTK0slR5dt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clmvfD/btsGNMtPgAd/IDZdkrJoWHJHTK0slR5dt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clmvfD/btsGNMtPgAd/IDZdkrJoWHJHTK0slR5dt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclmvfD%2FbtsGNMtPgAd%2FIDZdkrJoWHJHTK0slR5dt1%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;2621&quot; height=&quot;1115&quot; data-origin-width=&quot;2621&quot; data-origin-height=&quot;1115&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;2621&quot; data-origin-height=&quot;1156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mLpRT/btsGNrctBRk/24eAQScR1L5uxDl5PeKkf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mLpRT/btsGNrctBRk/24eAQScR1L5uxDl5PeKkf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mLpRT/btsGNrctBRk/24eAQScR1L5uxDl5PeKkf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmLpRT%2FbtsGNrctBRk%2F24eAQScR1L5uxDl5PeKkf1%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;2621&quot; height=&quot;1156&quot; data-origin-width=&quot;2621&quot; data-origin-height=&quot;1156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3-2. API&amp;nbsp;Key&amp;nbsp;Authentication&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfCgnA/btsGOG73Pfl/YNi0lzPsrEYNVksqjEPnh0/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfCgnA/btsGOG73Pfl/YNi0lzPsrEYNVksqjEPnh0/tfile.svg&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp; https://voyager.postman.com/illustration/api-key-auth-diagram-postman.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfCgnA/btsGOG73Pfl/YNi0lzPsrEYNVksqjEPnh0/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfCgnA%2FbtsGOG73Pfl%2FYNi0lzPsrEYNVksqjEPnh0%2Ftfile.svg&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;652&quot; height=&quot;400&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp; https://voyager.postman.com/illustration/api-key-auth-diagram-postman.svg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;API 키 인증은 보통 정적인 문자열로 구성되며, &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;클라이언트가 서버에 요청을 보낼 때 이 키를 함께 전송합니다.&lt;/span&gt; &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API 키는 주로 서비스나 애플리케이션을 식별하고 인증하는 데 사용됩니다. 이는 API를 사용하는 클라이언트가 서비스에 등록되어 있는지 여부를 확인하는 데에 주로 사용됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;말 그대로 API Key 를 사용하는 고유한 식별자이, 각 클라이언트에게 부여되어 API 요청에 포함됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API를 사용하고자 할 때, API Key를 발급받아 메시지 안에 넣어 호출합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트 간 동일한 API Key를 공유하기 때문에, 보안상 취약점이 존재하며 높은 보안 인증이 필요할 때는 적합하지 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*API Key Authentication TEST&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 위 샘플코드를 기반으로 API Key Auth 를 구현해 보겠습니다.&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;span style=&quot;color: #000000;&quot;&gt;API Key 생성&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일반적으로 API Key의 경우, &quot;대소문자 + 숫자&quot; 조합한 32글자로 이뤄져 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1713835590973&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import secrets
import string

def generate_api_key(length=32):
    alphabet = string.ascii_uppercase + string.ascii_letters + string.digits
    api_key = ''.join(secrets.choice(alphabet) for i in range(length))
    return api_key

# 32자 길이의 무작위 API 키 생성
api_key = generate_api_key()

print(api_key)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API&amp;nbsp;Key&amp;nbsp;Auth&amp;nbsp;적용 샘플 코드&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 METHOD에 API Key Auth 데이레이터 추가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1713835893827&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask, request, jsonify
from functools import wraps

app = Flask(__name__)

API_KEY = '[위 key 생성 스크립트에서 생성한 key 값 입력]'

# API 키를 검증하는 함수
def verify_api_key(api_key):
    return api_key == API_KEY

# API 키 검증을 수행하는 데코레이터
def require_api_key(view_function):
    @wraps(view_function)
    def decorated_function(*args, **kwargs):
        api_key = request.headers.get('X-API-KEY')
        if not api_key or not verify_api_key(api_key):
            return jsonify({'error': 'Unauthorized access'}), 401
        return view_function(*args, **kwargs)
    return decorated_function

# GET 요청을 처리하는 엔드포인트
@app.route('/api/data', methods=['GET'])
@require_api_key
def get_data():
    param = request.args.get('apitest')
    if not param:
        return jsonify({'error': 'Parameter is missing'}), 400
    return jsonify({'message': f'GET 요청이 성공적으로 처리되었습니다. Parameter: {param}'})

# POST 요청을 처리하는 엔드포인트
@app.route('/api/data', methods=['POST'])
@require_api_key
def post_data():
    data = request.get_json()
    if not data:
        return jsonify({'error': 'JSON data is missing'}), 400
    return jsonify({'message': f'POST 요청이 성공적으로 처리되었습니다. Data: {data}'})

if __name__ == '__main__':
    app.run(host=&quot;0.0.0.0 or Private IP&quot;, Port=&quot;5000&quot; ,debug=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Key 값 없이 호출할 경우,&amp;nbsp;&lt;b&gt;Status : 401 Unauthorized&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2609&quot; data-origin-height=&quot;1142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl7rT1/btsGQYGSjUN/qkggxiayKJVKATCFo11fck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl7rT1/btsGQYGSjUN/qkggxiayKJVKATCFo11fck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl7rT1/btsGQYGSjUN/qkggxiayKJVKATCFo11fck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl7rT1%2FbtsGQYGSjUN%2FqkggxiayKJVKATCFo11fck%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;2609&quot; height=&quot;1142&quot; data-origin-width=&quot;2609&quot; data-origin-height=&quot;1142&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;2611&quot; data-origin-height=&quot;1115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3wE9C/btsGOJcDvYQ/qO2QCaM8OrEzx3kIN9dEpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3wE9C/btsGOJcDvYQ/qO2QCaM8OrEzx3kIN9dEpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3wE9C/btsGOJcDvYQ/qO2QCaM8OrEzx3kIN9dEpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3wE9C%2FbtsGOJcDvYQ%2FqO2QCaM8OrEzx3kIN9dEpk%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;2611&quot; height=&quot;1115&quot; data-origin-width=&quot;2611&quot; data-origin-height=&quot;1115&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Basic Auth와 마찬가지로 Postman에서 지원하는 Authorization에서 인증 Type 설절하여 Key:Vaule 사용하여 인증&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Key&lt;/b&gt; : 위 스크립트에서 &quot;request.headers.get('X-API-KEY')&quot; 을 확인해 보면 헤더 값에 &lt;b&gt;Key Name을 X-API-KEY&lt;/b&gt; 사용하라고 표기되어 있으므로 해당 값 입력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Value &lt;/b&gt;:&lt;b&gt; '[위 key 생성 스크립트에서 생성한 key 값 입력]'&lt;/b&gt; 해당 값 입력&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2031&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v231L/btsGRf2sHSw/IqQnvVvEQLoYzV687Cl8y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v231L/btsGRf2sHSw/IqQnvVvEQLoYzV687Cl8y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v231L/btsGRf2sHSw/IqQnvVvEQLoYzV687Cl8y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv231L%2FbtsGRf2sHSw%2FIqQnvVvEQLoYzV687Cl8y0%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;2031&quot; height=&quot;598&quot; data-origin-width=&quot;2031&quot; data-origin-height=&quot;598&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Authorization(인증) : API Key 적용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2612&quot; data-origin-height=&quot;1130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btJQoR/btsGOxQOsj4/WU9UzBg7Pvo9ZpjRZBwqtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btJQoR/btsGOxQOsj4/WU9UzBg7Pvo9ZpjRZBwqtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btJQoR/btsGOxQOsj4/WU9UzBg7Pvo9ZpjRZBwqtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtJQoR%2FbtsGOxQOsj4%2FWU9UzBg7Pvo9ZpjRZBwqtk%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;2612&quot; height=&quot;1130&quot; data-origin-width=&quot;2612&quot; data-origin-height=&quot;1130&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;2619&quot; data-origin-height=&quot;1180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bG5gYi/btsGSh6xvl2/A0yLAYyP02UHLbVgVv2F3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bG5gYi/btsGSh6xvl2/A0yLAYyP02UHLbVgVv2F3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bG5gYi/btsGSh6xvl2/A0yLAYyP02UHLbVgVv2F3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG5gYi%2FbtsGSh6xvl2%2FA0yLAYyP02UHLbVgVv2F3K%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;2619&quot; height=&quot;1180&quot; data-origin-width=&quot;2619&quot; data-origin-height=&quot;1180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마찬가지로 Postman의 &lt;b&gt;Authorization 사용 없이, Headers 값에 직접 Key:Vaule를 입력&lt;/b&gt;하여 &lt;b&gt;인증&lt;/b&gt;할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2611&quot; data-origin-height=&quot;1046&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQbqom/btsGPRac4ud/27kRRMQ642sdQK30cx9I4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQbqom/btsGPRac4ud/27kRRMQ642sdQK30cx9I4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQbqom/btsGPRac4ud/27kRRMQ642sdQK30cx9I4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQbqom%2FbtsGPRac4ud%2F27kRRMQ642sdQK30cx9I4k%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;2611&quot; height=&quot;1046&quot; data-origin-width=&quot;2611&quot; data-origin-height=&quot;1046&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3-3. Token Authentication&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0fzol/btsGNZGPgco/8k6bBFvbKEAZkLw8SDQpUK/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0fzol/btsGNZGPgco/8k6bBFvbKEAZkLw8SDQpUK/tfile.svg&quot; data-alt=&quot;출처 : https://voyager.postman.com/illustration/jwt-auth-diagram-postman.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0fzol/btsGNZGPgco/8k6bBFvbKEAZkLw8SDQpUK/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0fzol%2FbtsGNZGPgco%2F8k6bBFvbKEAZkLw8SDQpUK%2Ftfile.svg&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;692&quot; height=&quot;392&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://voyager.postman.com/illustration/jwt-auth-diagram-postman.svg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자가 로그인할 때 서버에서 발급된 토큰을 클라이언트에게 제공하고, 클라이언트는 이 토큰을 이후의 요청에 함께 전송하여 인증합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 로그인 정보(username, password 등)를 통해 사용자를 인증하고 발급된 API 토큰으로 사용자를 인증하는 방식입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JWT(JSON Web Token) 방식이 일반적으로 많이 사용됩니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Json 객체를 사용하는 Key:Vaule 구조&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Token 인증 과정을 설명하자면 다음과 같습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 사용자의 로그인(username, password) &amp;gt; POST /user/login with username:password&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 서브는 요청을 확인하고 Secret Key를 통해 Access Token 발급&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 사용자가 API를 통해 인증을 요청할 때, Header 값에 Authorization(인증):Acceess Token을 담아서 전달(요청)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.&amp;nbsp; 서버는 JWT Signature를 확인하고, Playload로부터 사용자 정보를 확인하고 응답(자원을 Return)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*Token(JWT) Authentication TEST&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 위 샘플코드를 기반으로 Token(JWT) Auth 를 구현해 보겠습니다.&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;span style=&quot;color: #000000;&quot;&gt;DB에 저장된 사용자가 로그인할 때 서버에서 발급된 토큰을 제공해야 하기 때문에 우선 DB와 사용자를 생성하겠습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트용이기 때문에 가볍고, 별도의 서버가 필요 없는 SQLite DB(Python 기본 라이브러리에 포함)를 사용하였습니다.&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1713848699801&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import sqlite3

# SQLite 데이터베이스 파일 경로
DB_FILE = 'users.db'

# 사용자 테이블 생성 함수
def create_user_table():
    conn = sqlite3.connect(DB_FILE)
    cursor = conn.cursor()
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            username TEXT UNIQUE NOT NULL,
            password TEXT NOT NULL
        )
    ''')
    conn.commit()
    conn.close()

# 사용자 추가 함수
def add_user(username, password):
    conn = sqlite3.connect(DB_FILE)
    cursor = conn.cursor()
    cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, password))
    conn.commit()
    conn.close()

# 사용자 추가 함수 실행
def add_users():
    add_user('admintak01', 'pwdforapitest01')
    add_user('admintak02', 'pwdforapitest02')

# 사용자 조회 함수
def get_user(username):
    conn = sqlite3.connect(DB_FILE)
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users WHERE username = ?', (username,))
    user = cursor.fetchone()
    conn.close()
    return user

# 실행 코드
if __name__ == '__main__':
    create_user_table()  # 사용자 테이블 생성
    add_users()          # 사용자 추가​&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; DB(users.db) 데이터 확인&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pCoxU/btsGQ2W2pXh/xliZAKhx5cipkZPod5kuq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pCoxU/btsGQ2W2pXh/xliZAKhx5cipkZPod5kuq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pCoxU/btsGQ2W2pXh/xliZAKhx5cipkZPod5kuq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpCoxU%2FbtsGQ2W2pXh%2FxliZAKhx5cipkZPod5kuq1%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;829&quot; height=&quot;199&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Login API 생성&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Python(Flask)에서 JWT를 통한 인증 구현하기 위해서 Flask-JWT-Extended 라이브러리 사용하겠습니다.&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1713849277147&quot; class=&quot;mipsasm&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;pip install flask-jwt-extended​&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Login API 테스트&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1713850852477&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask, jsonify, request
from flask_jwt_extended import *
from token_users_db import get_user

app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret'  # JWT를 생성 및 확인하는 데 사용되는 시크릿 키
jwt = JWTManager(app)

# 로그인 테스트용 엔드포인트
@app.route('/login', methods=['POST'])
def login_test():
    username = request.json.get('username', None)
    password = request.json.get('password', None)
    if not username or not password:
        return jsonify({&quot;msg&quot;: &quot;Missing username or password&quot;}), 400

    user = get_user(username)
    if user and user[2] == password:  # user[2]는 password 필드를 가리킵니다.
		    access_token = create_access_token(identity=user)  # 사용자 정보를 식별자로 설정
        # 접근 토큰과 함께 로그인 성공 메시지 반환
        return jsonify({&quot;msg&quot;: &quot;Login successful&quot;, &quot;access_token&quot;: access_token}), 200
    else:
        return jsonify({&quot;msg&quot;: &quot;Bad username or password&quot;}), 401

if __name__ == '__main__':
    app.run(host=&quot;0.0.0.0 or Private IP&quot;, Port=&quot;5000&quot; ,debug=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Body 값에 사용자 로그인 정보 입력하여 POST METHOD 사용하면, 해당 계정에 대한 Token 발급&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2627&quot; data-origin-height=&quot;1257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oxANP/btsGO8cMkUF/T1thx4iM23P72Rqmh8pQy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oxANP/btsGO8cMkUF/T1thx4iM23P72Rqmh8pQy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oxANP/btsGO8cMkUF/T1thx4iM23P72Rqmh8pQy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoxANP%2FbtsGO8cMkUF%2FT1thx4iM23P72Rqmh8pQy1%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;2627&quot; height=&quot;1257&quot; data-origin-width=&quot;2627&quot; data-origin-height=&quot;1257&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GET, POST METHOD 사용&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위에서 로그인할 때, 발급된 Token 값을 METHOD 사용 시, Headers 값에 Key:Vaule 기입합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Key:Vaule = Authorization: Bearer access_token&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;Bearer&quot;는&amp;nbsp;HTTP&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;&quot;Bearer&quot;&amp;nbsp;방식은&amp;nbsp;이를&amp;nbsp;위한&amp;nbsp;표준&amp;nbsp;형식&amp;nbsp;중&amp;nbsp;하나입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1713857956524&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask, jsonify, request
from flask_jwt_extended import *
from token_users_db import get_user

app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret'  # JWT를 생성 및 확인하는 데 사용되는 시크릿 키
jwt = JWTManager(app)

# 로그인 엔드포인트
@app.route('/login', methods=['POST'])
def login():
    username = request.json.get('username', None)
    password = request.json.get('password', None)
    if not username or not password:
        return jsonify({&quot;msg&quot;: &quot;Missing username or password&quot;}), 400

    user = get_user(username)
    if user and user[2] == password:  # user[2]는 password 필드를 가리킵니다.
        access_token = create_access_token(identity=username)
        return jsonify(access_token=access_token), 200
    else:
        return jsonify({&quot;msg&quot;: &quot;Bad username or password&quot;}), 401

# 토큰 인증이 필요한 보호된 엔드포인트 (GET 메서드)
@app.route('/api/data', methods=['GET'])
@jwt_required()
def protected_get():
    current_user = get_jwt_identity()
    return jsonify(logged_in_as=current_user), 200

# 토큰 인증이 필요한 보호된 엔드포인트 (POST 메서드)
@app.route('/api/data', methods=['POST'])
@jwt_required()
def protected_post():
    current_user = get_jwt_identity()
    return jsonify(logged_in_as=current_user), 200

if __name__ == '__main__':
    app.run(host=&quot;0.0.0.0 or Private IP&quot;, Port=&quot;5000&quot; ,debug=True)&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;2609&quot; data-origin-height=&quot;1114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcaLat/btsGShTCuA3/OvHMVGO2fT6hBxphrVvg2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcaLat/btsGShTCuA3/OvHMVGO2fT6hBxphrVvg2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcaLat/btsGShTCuA3/OvHMVGO2fT6hBxphrVvg2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcaLat%2FbtsGShTCuA3%2FOvHMVGO2fT6hBxphrVvg2k%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;2609&quot; height=&quot;1114&quot; data-origin-width=&quot;2609&quot; data-origin-height=&quot;1114&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;2632&quot; data-origin-height=&quot;1114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOMTxj/btsGQZTWzIs/Uf8uIQzmEwHkGawkWgvU51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOMTxj/btsGQZTWzIs/Uf8uIQzmEwHkGawkWgvU51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOMTxj/btsGQZTWzIs/Uf8uIQzmEwHkGawkWgvU51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOMTxj%2FbtsGQZTWzIs%2FUf8uIQzmEwHkGawkWgvU51%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;2632&quot; height=&quot;1114&quot; data-origin-width=&quot;2632&quot; data-origin-height=&quot;1114&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-4. OAuth&amp;nbsp;Authentication&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UTmJy/btsGNE3YcpW/KLD7Kj2IUEm2KQqEitneo1/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UTmJy/btsGNE3YcpW/KLD7Kj2IUEm2KQqEitneo1/tfile.svg&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://voyager.postman.com/illustration/oauth-diagram-postman.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UTmJy/btsGNE3YcpW/KLD7Kj2IUEm2KQqEitneo1/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUTmJy%2FbtsGNE3YcpW%2FKLD7Kj2IUEm2KQqEitneo1%2Ftfile.svg&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;694&quot; height=&quot;493&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://voyager.postman.com/illustration/oauth-diagram-postman.svg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3rd Party 애플리케이션에 대한 사용자 인증 및 권한 부여를 위한 프로토콜입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트는 사용자의 인증을 위해 OAuth 서버에 요청하고, 성공하면 액세스 토큰을 받아 API에 접근할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OAuth는 다양한 시나리오에 대응하기 위해 다양한 인증 흐름을 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OAuth &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;인증 과정을 설명하자면 다음과 같습니다.&lt;br /&gt;1. 사용자는 특정 Application을 통해 OAuth 인증을 요청합니다.(Authorization Code 요청)&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;br /&gt;2. OAuth 서비스는 Redirect URL을 통해 사용자에게 &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;Authorization Code 부여합니다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;br /&gt;3. 사용자는 2 단계에서 전달받은 A&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;uthorization Code를 &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;uthorization Server&lt;/span&gt;에게 전달하여 Access Token을 요청합니다.&lt;br /&gt;4. &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;uthorization&amp;nbsp;Server는 사용자가 Resource Server에 있는 정보를 액세스 할 수 있는 Access Token을 생성하고 전달합니다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;5. 사용자는 리소스에 대한 액세스를 요청하기 위해&amp;nbsp; &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;Resource Server에 4단계에서 받은 &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;Access Token을 전달합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&lt;br /&gt;6. &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;Resource Server는 &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;uthorization&amp;nbsp;Server를 통해 Access Token의 유효성을 확인 후, 유효하다면 사용자에게 리소스에 대한 액세스 권한을 부여합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/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;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;rarr; OAuth 인증에 대해서는 Microsoft Entra ID를 사용하여 보다 자세하게 다룰 예정입니다. 다음 편을 기대해 주세요!&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금까지 &quot; &lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;#01&lt;/span&gt; REST API - 개념과 보안&quot; &lt;/b&gt;에 대해 알아보았습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 편에는 &quot; &lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;#02 REST&lt;/span&gt; API - 활용&quot;&lt;/b&gt;으로 돌아오겠습니다   (!!많관부!!)&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러분의&amp;nbsp;생각하는&amp;nbsp;부족한&amp;nbsp;점,&amp;nbsp;궁금한&amp;nbsp;점&amp;nbsp;등&amp;nbsp;자유로운&amp;nbsp;의견을&amp;nbsp;남겨주세요!&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Code</category>
      <category>API</category>
      <category>API Key Authorization</category>
      <category>basic authorization</category>
      <category>cloud</category>
      <category>JWT</category>
      <category>OAuth</category>
      <category>REST API</category>
      <category>REST API 보안</category>
      <category>REST API 인증</category>
      <category>Token Authorization</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/45</guid>
      <comments>https://with-cloud.tistory.com/45#entry45comment</comments>
      <pubDate>Tue, 23 Apr 2024 15:54:36 +0900</pubDate>
    </item>
    <item>
      <title>Azure Private Subnet에 명시적으로 아웃바운드 연결하기</title>
      <link>https://with-cloud.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 글까지 하루에 적을 수 있을까 했는데 무사히 작성을 완료하였습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Private Subnet을 배포하고 NAT Gateway를 통해 아웃바운드 연결을 명시해 주는 테스트를 진행해 보았는데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관련된 개념 정리 글은 아래 링크를 확인해 주세요!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://with-cloud.tistory.com/43&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/43&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713853277924&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;Azure Private Subnet과 Azure NAT Gateway란?&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 오늘은 Azure Private Subnet과 Azure NAT Gateway에 대해 알아보도록 하겠습니다. Azure Private Subnet이 Public Preview 형태로 제공되고 있어 기존의 subnet과 어떤 차이가 있는지 알고 싶어&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/43&quot; data-og-url=&quot;https://with-cloud.tistory.com/43&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cSauKd/hyVVDs1sRH/BBwjFHmz8IAi7pm0VBLX71/img.jpg?width=466&amp;amp;height=321&amp;amp;face=0_0_466_321,https://scrap.kakaocdn.net/dn/bfR3ES/hyVSXfBhdG/4AkglRHKThFE7VAKZLSrr1/img.jpg?width=466&amp;amp;height=321&amp;amp;face=0_0_466_321,https://scrap.kakaocdn.net/dn/iuYpQ/hyVVxl2Vsu/Tb26ZmkukYRqyULUvpaHS0/img.jpg?width=1800&amp;amp;height=1202&amp;amp;face=0_0_1800_1202&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/43&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/43&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cSauKd/hyVVDs1sRH/BBwjFHmz8IAi7pm0VBLX71/img.jpg?width=466&amp;amp;height=321&amp;amp;face=0_0_466_321,https://scrap.kakaocdn.net/dn/bfR3ES/hyVSXfBhdG/4AkglRHKThFE7VAKZLSrr1/img.jpg?width=466&amp;amp;height=321&amp;amp;face=0_0_466_321,https://scrap.kakaocdn.net/dn/iuYpQ/hyVVxl2Vsu/Tb26ZmkukYRqyULUvpaHS0/img.jpg?width=1800&amp;amp;height=1202&amp;amp;face=0_0_1800_1202');&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;Azure Private Subnet과 Azure NAT Gateway란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 오늘은 Azure Private Subnet과 Azure NAT Gateway에 대해 알아보도록 하겠습니다. Azure Private Subnet이 Public Preview 형태로 제공되고 있어 기존의 subnet과 어떤 차이가 있는지 알고 싶어&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.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;color: #000000;&quot;&gt;그렇다면 바로 본론으로 들어가 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 시나리오 확인&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글의 시나리오는 다음과 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크 내 Private Subnet 생성&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신 두 대 생성 (한 대에만 Public IP attach)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신 접속 후 인터넷 접근 가능 여부 확인&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure NAT Gateway 생성&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Subnet과 Azure NAT Gateway 연결&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Public IP가 attach 되지 않은 가상 머신에서 인터넷 접근 가능 여부 확인&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이를 위해 지금부터 테스트 환경을 구성해 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 테스트 환경 구성&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.1 가상 네트워크 내 Private Subnet 생성하기&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Private Subnet을 포함하는 가상 네트워크를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;※ 참고 사항&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;※&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 Private Subnet의 경우 Public Preview 상태이기 때문에 Subnet을 생성하는 단계에서만&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;&quot;프라이빗 서브넷 사용(기본 아웃바운드 액세스 없음)&quot;&lt;/b&gt;&lt;/i&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;옵션을 사용하여 Private Subnet을 배포할 수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;text-align: start;&quot;&gt;(배포 이후에는 변경이 불가하며, 기존 Subnet도 Private으로 변경할 수 없습니다.)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EW0LT/btsGRBY9f3b/LGdkv6bPOhcKL7hn1TQZIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EW0LT/btsGRBY9f3b/LGdkv6bPOhcKL7hn1TQZIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EW0LT/btsGRBY9f3b/LGdkv6bPOhcKL7hn1TQZIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEW0LT%2FbtsGRBY9f3b%2FLGdkv6bPOhcKL7hn1TQZIk%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;624&quot; height=&quot;492&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[IP 주소] 탭&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;i&gt;&quot;프라이빗 서브넷 사용(기본 아웃바운드 액세스 없음)&quot;&lt;/i&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;옵션을 반드시 활성화해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1704&quot; data-origin-height=&quot;743&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s7qxW/btsGQPDOSvc/yG0Kf92tSCdbqeNk8SQybk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s7qxW/btsGQPDOSvc/yG0Kf92tSCdbqeNk8SQybk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s7qxW/btsGQPDOSvc/yG0Kf92tSCdbqeNk8SQybk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs7qxW%2FbtsGQPDOSvc%2FyG0Kf92tSCdbqeNk8SQybk%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;1704&quot; height=&quot;743&quot; data-origin-width=&quot;1704&quot; data-origin-height=&quot;743&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭에서 유효성 검사 후 [만들기] 버튼을 클릭하여 [가상 네트워크] 생성을 완료합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.2 가상 머신 생성하기&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신은 두 대를 생성하여 하나는 공인 IP를 attach 하고 하나는 공인 IP를 attach 하지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이렇게 두 대의 가상 머신을 생성하는 이유는 다음을 확인하기&lt;span&gt;&amp;nbsp;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;공인 IP가 attach 된다면 가상 머신에 명시적인 아웃바운드 연결이 생성이 된 것이기 때문에 Private Subnet 내에 있는 가상 머신이라고 하더라도 인터넷 통신이 가능합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공인 IP가 없어 명시적인 아웃바운드 연결이 없는, Private Subnet 내에 있는 가상 머신은 인터넷 통신이 불가합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;지금부터는 가상 머신을 생성해 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫 번째 가상 머신을 생성한 후 가상 머신의 이름만 변경해서 두 번째 가상 머신을 생성합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(ex. vm-test-hyein-02)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N8bdI/btsGRpYW1eu/lPT4ybLPecPIisLEsS9UhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N8bdI/btsGRpYW1eu/lPT4ybLPecPIisLEsS9UhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N8bdI/btsGRpYW1eu/lPT4ybLPecPIisLEsS9UhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN8bdI%2FbtsGRpYW1eu%2FlPT4ybLPecPIisLEsS9UhK%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;645&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;746&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;769&quot; data-origin-height=&quot;685&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2Hsoa/btsGQ6rLUBY/zFFGJj7SpIFbKsoFKk0mKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2Hsoa/btsGQ6rLUBY/zFFGJj7SpIFbKsoFKk0mKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2Hsoa/btsGQ6rLUBY/zFFGJj7SpIFbKsoFKk0mKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2Hsoa%2FbtsGQ6rLUBY%2FzFFGJj7SpIFbKsoFKk0mKk%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;669&quot; height=&quot;596&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;685&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[네트워킹] 탭&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;vm-test-hyein-01의 경우 공인 IP를 생성해야 하며, vm-test-hyein-02의 경우 공인 IP를 생성하지 않도록&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;&quot;없음&quot;&lt;/i&gt;을 선택합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1711&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dY3YGz/btsGSlBKzlh/PaEsGKPqCxSbLjg4heyJnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dY3YGz/btsGSlBKzlh/PaEsGKPqCxSbLjg4heyJnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dY3YGz/btsGSlBKzlh/PaEsGKPqCxSbLjg4heyJnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdY3YGz%2FbtsGSlBKzlh%2FPaEsGKPqCxSbLjg4heyJnk%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;906&quot; height=&quot;467&quot; data-origin-width=&quot;1711&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;탭에서 유효성 검사 후 [만들기] 버튼을 클릭하여 [가상 머신] 생성을 완료합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.3 가상 머신 &amp;rarr; 인터넷 접근 가능 여부 확인하기&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저, 공인 IP가 attach 된 가상 머신에 접근합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 후 Microsoft Edge를 실행하여 &quot;Azure&quot;를 검색합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;744&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwPNCs/btsGTbZFO1W/rkLnaTdFuakK5k04dkxG4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwPNCs/btsGTbZFO1W/rkLnaTdFuakK5k04dkxG4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwPNCs/btsGTbZFO1W/rkLnaTdFuakK5k04dkxG4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwPNCs%2FbtsGTbZFO1W%2FrkLnaTdFuakK5k04dkxG4k%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;701&quot; height=&quot;401&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;744&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;위와 같이 인터넷 접근이 가능한 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음은 해당 가상 머신 (vm-test-hyein-01)에서 공인 IP가 attach 되지 않은 가상 머신 (vm-test-hyein-02)에 접근해 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2251&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKpKfc/btsGS4zwvZo/uAUxFLJ5YQ3KAQDVKQL5Ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKpKfc/btsGS4zwvZo/uAUxFLJ5YQ3KAQDVKQL5Ak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKpKfc/btsGS4zwvZo/uAUxFLJ5YQ3KAQDVKQL5Ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKpKfc%2FbtsGS4zwvZo%2FuAUxFLJ5YQ3KAQDVKQL5Ak%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;711&quot; height=&quot;401&quot; data-origin-width=&quot;2251&quot; data-origin-height=&quot;1270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그 후 동일하게 Microsoft Edge에서 &quot;Azure&quot;를 검색해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1611&quot; data-origin-height=&quot;1025&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lWw7r/btsGPaIvI80/E2PpTdrohSrc0zZXkheva1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lWw7r/btsGPaIvI80/E2PpTdrohSrc0zZXkheva1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lWw7r/btsGPaIvI80/E2PpTdrohSrc0zZXkheva1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlWw7r%2FbtsGPaIvI80%2FE2PpTdrohSrc0zZXkheva1%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;714&quot; height=&quot;454&quot; data-origin-width=&quot;1611&quot; data-origin-height=&quot;1025&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아까와는 다르게 인터넷 접근이 불가한 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Private Subnet 내에 존재하는 가상 머신이기 때문에 아웃바운드에 대해 명시적으로 구성을 해주지 않는다면 인터넷으로의 접근이 불가한 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.4 Azure NAT Gateway 생성하기&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공인 IP가 없는 가상 머신 (vm-test-hyein-02)에 대해서 인터넷 접근이 가능하도록 Azure&amp;nbsp; NAT Gateway를 생성해 주도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DlUw9/btsGSlhrcqL/7Iu0HPAzwhLtRE47INqOqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DlUw9/btsGSlhrcqL/7Iu0HPAzwhLtRE47INqOqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DlUw9/btsGSlhrcqL/7Iu0HPAzwhLtRE47INqOqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDlUw9%2FbtsGSlhrcqL%2F7Iu0HPAzwhLtRE47INqOqk%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;580&quot; height=&quot;418&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[아웃바운드 IP] 탭&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본 테스트에서는 [공용 IP 접두사]는 생성하지 않도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mblJ0/btsGO9bKnFW/yOeKuToApklkQoxTK0Ddn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mblJ0/btsGO9bKnFW/yOeKuToApklkQoxTK0Ddn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mblJ0/btsGO9bKnFW/yOeKuToApklkQoxTK0Ddn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmblJ0%2FbtsGO9bKnFW%2FyOeKuToApklkQoxTK0Ddn0%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;582&quot; height=&quot;272&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;353&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[서브넷] 탭&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신들이 배포되어 있는 Subnet을 선택합니다. (pri-snet-vm)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9DV1f/btsGRDvVE02/3UssKRUUGbw02EBAkHnaL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9DV1f/btsGRDvVE02/3UssKRUUGbw02EBAkHnaL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9DV1f/btsGRDvVE02/3UssKRUUGbw02EBAkHnaL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9DV1f%2FbtsGRDvVE02%2F3UssKRUUGbw02EBAkHnaL0%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;596&quot; height=&quot;365&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭&lt;span style=&quot;text-align: left;&quot;&gt;에서 유효성 검사 후 [만들기] 버튼을 클릭하여 [NAT Gateway] 생성을 완료합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.5&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Public IP가 attach 되지 않은 가상 머신에서 인터넷 접근하기&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다시 가상 머신 (vm-test-hyein-02)에 접속하여 다시 한번 &quot;Azure&quot;를 검색합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1593&quot; data-origin-height=&quot;1011&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GGdrE/btsGRK2OqOb/YYDreUEyYLiSLNFTrNo0dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GGdrE/btsGRK2OqOb/YYDreUEyYLiSLNFTrNo0dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GGdrE/btsGRK2OqOb/YYDreUEyYLiSLNFTrNo0dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGGdrE%2FbtsGRK2OqOb%2FYYDreUEyYLiSLNFTrNo0dk%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;687&quot; height=&quot;436&quot; data-origin-width=&quot;1593&quot; data-origin-height=&quot;1011&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;상기 스크린 샷과 같이 이번에는 정상적으로 인터넷에 접근이 가능한 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;또한 검색 창에 My Ip Address를 검색하여 공인 IP를 확인해 보면, &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1587&quot; data-origin-height=&quot;1010&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crXkBF/btsGTbejNRB/fEPjVIGPsQ54LqDGBk42S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crXkBF/btsGTbejNRB/fEPjVIGPsQ54LqDGBk42S0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crXkBF/btsGTbejNRB/fEPjVIGPsQ54LqDGBk42S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrXkBF%2FbtsGTbejNRB%2FfEPjVIGPsQ54LqDGBk42S0%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;698&quot; height=&quot;444&quot; data-origin-width=&quot;1587&quot; data-origin-height=&quot;1010&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;52.231로 시작하는 공인 IP가 출력되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;Azure Portal 상에서 [NAT Gateway] &amp;gt; [설정] &amp;gt; [아웃바운드 IP] 탭을 클릭하면 해당 IP는 NAT Gateway의 아웃바운드 IP 임을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cK8d9r/btsGSM6Wz09/nPUe1se7QZbzXuReL0LRz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cK8d9r/btsGSM6Wz09/nPUe1se7QZbzXuReL0LRz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cK8d9r/btsGSM6Wz09/nPUe1se7QZbzXuReL0LRz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcK8d9r%2FbtsGSM6Wz09%2FnPUe1se7QZbzXuReL0LRz1%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;716&quot; height=&quot;317&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참고로, 공인 IP가 붙은 가상 머신의 경우&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;NAT Gateway와 연결되지 않을 경우 My IP Address는 해당 가상 머신의 공인 IP가 되지만,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;NAT Gateway와 연결된 경우 My IP Address는 NAT Gateway의 공인 IP가 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(NAT Gateway가 Subnet과 연결되었기 때문에 공인 IP가 붙은 가상 머신도 영향을 받게 됩니다.)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이상으로 Azure Private Subnet + Azure NAT Gateway에 대한 테스트를 마치도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음에 더 재밌고 유익한 글로 돌아오겠습니다!  &lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>Azure</category>
      <category>Azure NAT Gateway</category>
      <category>Azure VM</category>
      <category>NAT</category>
      <category>private subnet</category>
      <category>virtual machine</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/44</guid>
      <comments>https://with-cloud.tistory.com/44#entry44comment</comments>
      <pubDate>Tue, 23 Apr 2024 15:25:24 +0900</pubDate>
    </item>
    <item>
      <title>Azure Private Subnet과 Azure NAT Gateway란?</title>
      <link>https://with-cloud.tistory.com/43</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘은 Azure Private Subnet과 Azure NAT Gateway에 대해 알아보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Private Subnet이 Public Preview 형태로 제공되고 있어 기존의 subnet과 어떤 차이가 있는지 알고 싶어 시작하게 되었는데 이론과 테스트로 글이 나뉘게 되어 뭔가 일이 커졌다는 느낌이 들지만....  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래도 Azure NAT Gateway도 한번쯤은 사용해 보고자 이번 글을 작성하였음을 알리며&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개념 정리부터 시작해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Azure Private Subnet이란?&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure는 그동안 명시적인 아웃바운드 연결이 없어도 가상 네트워크 상에 가상 머신을&lt;span&gt;&amp;nbsp;&lt;/span&gt;만들 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본적으로 아웃바운드 공용 IP 주소를 할당해 주었습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 아웃바운드를 명시하지 않아도 암시적으로 외부와 연결이 되었는데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이러한 암시적 IP는 변경될 수 있고, 사용자의 구독 내에 존재하는 것도 아니며, Azure의 기본적인 보안 모델을 따르지 않는다는 문제점이 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 Microsoft Azure는 Azure Private Subnet이라는 기능을 현재&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;Public Preview&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;형태로 제공하고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Azure Private Subnet은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;기본 아웃바운드 액세스&quot;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;false&lt;/b&gt;&lt;/span&gt;로 설정하여 암시적인 연결을 방지하는 리소스입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포 시 Azure Private Subnet 기능을 활성화한 후, 해당 subnet 내에 있는 가상 머신에 대해 명시적인 아웃바운드를 정의해 주면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;참고로, 2025년 9월 30일 이후로 새로 생성하는 리소스에 대해서 기본 아웃바운드 액세스가 사용 중지되기 때문에 해당 날짜 이후에는 인터넷 액세스가 필요한 가상 머신의 경우 Azure NAT Gateway, Azure Load Balancer 아웃바운드 규칙, Public IP Address Attach 등 명시적인 아웃바운드 연결을 사용해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(관련 링크 :&amp;nbsp;&lt;a href=&quot;https://azure.microsoft.com/ko-kr/updates/default-outbound-access-for-vms-in-azure-will-be-retired-transition-to-a-new-method-of-internet-access/&quot;&gt;https://azure.microsoft.com/ko-kr/updates/default-outbound-access-for-vms-in-azure-will-be-retired-transition-to-a-new-method-of-internet-access/&lt;/a&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://azure.microsoft.com/ko-kr/updates/default-outbound-access-for-vms-in-azure-will-be-retired-transition-to-a-new-method-of-internet-access/&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713836784568&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Default outbound access for VMs in Azure will be retired&amp;mdash; transition to a new method of internet access | Azure 업데이트 |&quot; data-og-description=&quot;Default outbound access connectivity for virtual machines will be retired in September 2025&quot; data-og-host=&quot;azure.microsoft.com&quot; data-og-source-url=&quot;https://azure.microsoft.com/ko-kr/updates/default-outbound-access-for-vms-in-azure-will-be-retired-transition-to-a-new-method-of-internet-access/&quot; data-og-url=&quot;https://azure.microsoft.com/ko-kr/updates/default-outbound-access-for-vms-in-azure-will-be-retired-transition-to-a-new-method-of-internet-access/&quot; data-og-image=&quot;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://azure.microsoft.com/ko-kr/updates/default-outbound-access-for-vms-in-azure-will-be-retired-transition-to-a-new-method-of-internet-access/&quot; data-source-url=&quot;https://azure.microsoft.com/ko-kr/updates/default-outbound-access-for-vms-in-azure-will-be-retired-transition-to-a-new-method-of-internet-access/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('&amp;quot;&amp;quot;');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Default outbound access for VMs in Azure will be retired&amp;mdash; transition to a new method of internet access | Azure 업데이트 |&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Default outbound access connectivity for virtual machines will be retired in September 2025&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;azure.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Azure NAT Gateway란?&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는 명시적인 아웃바운드 연결 방법 중, Azure NAT Gateway에 대해 다뤄보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;먼저, NAT(Network Address Translation)란 무엇일까요?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 주소 변환이라는 의미의 NAT는 사설 IP를 공인 IP로 변경할 때 사용하는 서비스로&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대부분 라우터 등의 장비를 사용하여 여러 사설 IP를 하나의 공인 IP로 변환할 때 사용됩니다.&amp;nbsp;&lt;br /&gt;또한, 한정적인 IP 주소를 절약하기 위해서도 사용되는 기술입니다.&amp;nbsp;&lt;br /&gt;이를 통해 인터넷이라는 퍼블릭한 망과 연결되는 사용자들의 고유한 사설 IP를 보호할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Azure에서는 이러한 NAT에 대한 서비스를 Azure NAT Gateway라고 부릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKuUjf/btsGRp43WfF/XwkoceDJguNkRdjctPySV1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKuUjf/btsGRp43WfF/XwkoceDJguNkRdjctPySV1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKuUjf/btsGRp43WfF/XwkoceDJguNkRdjctPySV1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKuUjf%2FbtsGRp43WfF%2FXwkoceDJguNkRdjctPySV1%2Fimg.webp&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;466&quot; height=&quot;321&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Azure NAT Gateway는 Azure 가상 네트워크의 subnet 내에 있는 프라이빗한 인스턴스에 대한 SNAT를 제공합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;subet에 NAT Gateway가 구성된 경우 subnet 내의 사설 IP는 NAT Gateway의 고정 공인 IP로&lt;span&gt;&amp;nbsp;&lt;/span&gt;SNAT 되어&lt;span&gt;&amp;nbsp;&lt;/span&gt;인터넷에 아운바운드로 연결됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;인터넷에서의 인바운드 연결은 NAT Gateway를 통해 허용되지 않으며 아웃바운드 연결에 대한 응답만&lt;span&gt;&amp;nbsp;&lt;/span&gt;DNAT 되어&lt;span&gt;&amp;nbsp;&lt;/span&gt;NAT Gateway를 통과할 수 있습니다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;2.1 Azure NAT Gateway 특징&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Azure NAT Gateway의 특징에 대해 좀 더 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure NAT Gateway는 가상 네트워크에서 인터넷으로 나가는 트래픽, 즉 아웃바운드 트래픽에 대한 연결을 제공하는 리소스로 인터넷에서 들어오는 인바운드 트래픽은 NAT Gateway를 통과할 수 없습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NAT Gateway가 가상 네트워크 내의 subnet에 연결된 경우 인터넷으로 전송되는 모든 아웃바운드 트래픽에 대해 subnet의 next hop이 됩니다. (이에 대한 추가 라우팅 구성은 필요하지 않습니다.)&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하나의 Azure NAT Gateway 서비스를 사용하여 동일한 가상 네트워크 내 두 개 이상의 subnet을 다룰 수는 있으나, 하나가 아닌 여러 개의 가상 네트워크에 단일 Azure NAT Gateway를 연결할 수는 없습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 가상 머신에 대한 명시적 아웃바운드 연결 예시&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;추가적으로, 가상 머신에 대한 명시적 아웃바운드 연결 예시는 하기와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b10P5O/btsGSjiZpuo/JBAKnaknJQGfJKk7IB4BnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b10P5O/btsGSjiZpuo/JBAKnaknJQGfJKk7IB4BnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b10P5O/btsGSjiZpuo/JBAKnaknJQGfJKk7IB4BnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb10P5O%2FbtsGSjiZpuo%2FJBAKnaknJQGfJKk7IB4BnK%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;563&quot; height=&quot;479&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NAT Gateway에 연결된 subnet 내의 가상 머신&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아웃바운드 규칙이 정의된 표준 Load Balancer의 백엔드 풀로 연결된 가상 머신&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본 공용 부하 분산 장치의 백 엔드 풀로 연결된 가상 머신&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공용 IP 주소가&lt;span&gt;&amp;nbsp;&lt;/span&gt;attach 된&lt;span&gt;&amp;nbsp;&lt;/span&gt;가상 머신&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;(참고 링크 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/default-outbound-access&quot;&gt;https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/default-outbound-access&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713836784572&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pWs3D/hyVVIHPNkR/743shRQmDWrpLUc7lyjMjk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bS0vZX/hyVS3z5qbJ/RW2dfkfwC64npff4xOfmzk/img.png?width=647&amp;amp;height=550&amp;amp;face=0_0_647_550,https://scrap.kakaocdn.net/dn/o1JdW/hyVVKr7BV6/5r9s3O8BDHmFBhtAJ6AqS1/img.png?width=838&amp;amp;height=208&amp;amp;face=0_0_838_208&quot; data-og-url=&quot;https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/default-outbound-access&quot; data-og-source-url=&quot;https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/default-outbound-access&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-description=&quot;Learn about default outbound access in Azure.&quot; data-og-title=&quot;Default outbound access in Azure - Azure Virtual Network&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/default-outbound-access&quot; data-source-url=&quot;https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/default-outbound-access&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pWs3D/hyVVIHPNkR/743shRQmDWrpLUc7lyjMjk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bS0vZX/hyVS3z5qbJ/RW2dfkfwC64npff4xOfmzk/img.png?width=647&amp;amp;height=550&amp;amp;face=0_0_647_550,https://scrap.kakaocdn.net/dn/o1JdW/hyVVKr7BV6/5r9s3O8BDHmFBhtAJ6AqS1/img.png?width=838&amp;amp;height=208&amp;amp;face=0_0_838_208');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Default outbound access in Azure - Azure Virtual Network&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Learn about default outbound access in Azure.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이어서 다음 글의 주제는 &quot;Azure Private Subnet에 명시적으로 아웃바운드 연결하기&quot;입니다.  &lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>Azure</category>
      <category>Azure NAT Gateway</category>
      <category>Azure Private Subnet</category>
      <category>NAT</category>
      <category>Network Address Translation</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/43</guid>
      <comments>https://with-cloud.tistory.com/43#entry43comment</comments>
      <pubDate>Tue, 23 Apr 2024 11:20:05 +0900</pubDate>
    </item>
    <item>
      <title>클라우드 네이티브란?</title>
      <link>https://with-cloud.tistory.com/42</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘은 제 머릿속에 사혼의 구슬처럼 흩어져 있던 클라우드 네이티브와 클라우드 네이티브를 이루는 핵심 요소들에 대해 정리해 보았습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;CD에 대해서는 Delivery랑 Deployment의 차이가 무엇일까 왜 나눠서 사용할까? 하는 의문이 들었고&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DevOps를 생각할 때는 그래서 DevOps랑 CI/CD의 차이가 뭔데?라는 생각이 많이 들었습니다.&amp;nbsp;&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 클라우드 네이티브란?&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라우드 네이티브란 소프트웨어 애플리케이션을 클라우드 환경을 기반으로 설계하고 구축하는 방식을 의미합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라우드 네이티브 앱은 클라우드 서비스의 특성을 활용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;확장성, 탄력성, 안정성, 비용 효율성&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 갖출 수 있으며 이를 위해 Microservices,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;CI/CD, DevOps, Containers&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 기술과 방법론을 사용합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBYdi5/btsGPsN9APn/SUzHQB6igPQ8g6AkwnBo6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBYdi5/btsGPsN9APn/SUzHQB6igPQ8g6AkwnBo6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBYdi5/btsGPsN9APn/SUzHQB6igPQ8g6AkwnBo6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBYdi5%2FbtsGPsN9APn%2FSUzHQB6igPQ8g6AkwnBo6k%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;507&quot; height=&quot;362&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 클라우드 네이티브 아키텍처&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.1 마이크로서비스&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마이크로서비스에 대해서는 아래 글에 정리해 두었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;마이크로서비스 아키텍처란? (&lt;a href=&quot;https://with-cloud.tistory.com/38&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/38&lt;/a&gt;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://sundlscha.tistory.com/29&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713752902585&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;마이크로서비스 아키텍처(MSA)란?&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 개념적인 내용도 다루고 넘어가면 좋을 것 같아 오늘은 간단하게 마이크로서비스 아키텍처가 무엇인지에 대해 알아보도록 하겠습니다. 쿠버네티스를 공부하면서 많이 &quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/38&quot; data-og-url=&quot;https://with-cloud.tistory.com/38&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buVyWH/hyVS6QPw4J/X10MjvsqtSEzY6968NXFS1/img.png?width=800&amp;amp;height=323&amp;amp;face=0_0_800_323,https://scrap.kakaocdn.net/dn/JgAdZ/hyVS2OsaUD/Bq1Cy5scwkrCjlIoS0DHr1/img.png?width=800&amp;amp;height=323&amp;amp;face=0_0_800_323,https://scrap.kakaocdn.net/dn/mUiwU/hyVS4rWIZm/Hj6iEmTEP8lsziHaNNIHb1/img.jpg?width=1800&amp;amp;height=1202&amp;amp;face=0_0_1800_1202&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/38&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/38&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buVyWH/hyVS6QPw4J/X10MjvsqtSEzY6968NXFS1/img.png?width=800&amp;amp;height=323&amp;amp;face=0_0_800_323,https://scrap.kakaocdn.net/dn/JgAdZ/hyVS2OsaUD/Bq1Cy5scwkrCjlIoS0DHr1/img.png?width=800&amp;amp;height=323&amp;amp;face=0_0_800_323,https://scrap.kakaocdn.net/dn/mUiwU/hyVS4rWIZm/Hj6iEmTEP8lsziHaNNIHb1/img.jpg?width=1800&amp;amp;height=1202&amp;amp;face=0_0_1800_1202');&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;마이크로서비스 아키텍처(MSA)란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 개념적인 내용도 다루고 넘어가면 좋을 것 같아 오늘은 간단하게 마이크로서비스 아키텍처가 무엇인지에 대해 알아보도록 하겠습니다. 쿠버네티스를 공부하면서 많이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.2 CI/CD&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CI/CD는 Continuous Integration (지속적인 통합) / Continuous Delivery (지속적인 서비스 제공) 또는 Continuous Deployment (지속적인 배포)를 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;먼저, CI는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) 소스 코드를 공유 레포지토리에 push할 때&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2) 이러한 변경 사항에 대해 자동으로 빌드 및 테스트가 진행되고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3) 공유 레포지토리에 소스 코드가 병합되는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;과정을 나타냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;커밋할 때마다 빌드와 테스트가 자동으로 이루어지기 때문에 해당 변경으로 문제가 생기는 부분이 없도록 보장할 수 있게 됩니다. 이를 통해 개발자가 구현한 코드를 기존 코드와 병합했을 때 코드가 올바르게 동작하고 빌드되는지 검증할 수 있고 문제가 있다면 수정을 하고 다시 병합을 진행하거나 문제가 없다면 배포를 진행하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;CD는 두 가지 의미로 분리할 수 있을 것 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;첫 번째, CD(Continuous Delivery)의 경우,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) CI 파이프라인을 통해 main branch에 저장된 완성된 코드가 GitHub와 같은 레포지토리(Delivery)에 자동으로 업로드되는 것을 뜻합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;두 번째, CD(Continuous Deployment)의 경우,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) 개발자가 변경한 사항을 레포지토리에 업로드하는 것을 넘어&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2) 고객이 사용할 수 있는 프로덕션 환경까지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;&lt;b&gt;자동으로&lt;/b&gt;&lt;/i&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;릴리즈하는 것을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 둘 개념 간 차이에 대해서는 하기 그림을 보시는 것이 이해에 도움이 될 것 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFfMND/btsGQlVxK1a/kyWw8D4bBlxtc6JZI9lYS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFfMND/btsGQlVxK1a/kyWw8D4bBlxtc6JZI9lYS1/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFfMND/btsGQlVxK1a/kyWw8D4bBlxtc6JZI9lYS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFfMND%2FbtsGQlVxK1a%2FkyWw8D4bBlxtc6JZI9lYS1%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;743&quot; height=&quot;418&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;즉, 프로덕션 환경으로의 릴리즈가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;수동&lt;/b&gt;으로 이루어지는가,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;자동&lt;/b&gt;으로 이루어지는가가 Continuous Delivery / Continuous Deployment의 차이라고 보시면 될 것 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;(관련 링크 :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment&quot;&gt;https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713752242030&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Continuous integration vs. delivery vs. deployment&quot; data-og-description=&quot;Learn the difference between continuous integration, continuous delivery, and continuous deployment in modern software development and DevOps.&quot; data-og-host=&quot;www.atlassian.com&quot; data-og-source-url=&quot;https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment&quot; data-og-url=&quot;https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ctevXn/hyVSY6kDsb/U64WeKCm8msFgiftHmYMS1/img.png?width=1200&amp;amp;height=680&amp;amp;face=0_0_1200_680,https://scrap.kakaocdn.net/dn/v91K8/hyVSYkWyoS/PV459xq1R4XF9x7osUqzjk/img.png?width=1200&amp;amp;height=676&amp;amp;face=0_0_1200_676,https://scrap.kakaocdn.net/dn/bazdO4/hyVS0pvAD8/mrPpcbaMUs7ylf6Mb3fHsk/img.png?width=772&amp;amp;height=742&amp;amp;face=223_273_496_570&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment&quot; data-source-url=&quot;https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ctevXn/hyVSY6kDsb/U64WeKCm8msFgiftHmYMS1/img.png?width=1200&amp;amp;height=680&amp;amp;face=0_0_1200_680,https://scrap.kakaocdn.net/dn/v91K8/hyVSYkWyoS/PV459xq1R4XF9x7osUqzjk/img.png?width=1200&amp;amp;height=676&amp;amp;face=0_0_1200_676,https://scrap.kakaocdn.net/dn/bazdO4/hyVS0pvAD8/mrPpcbaMUs7ylf6Mb3fHsk/img.png?width=772&amp;amp;height=742&amp;amp;face=223_273_496_570');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Continuous integration vs. delivery vs. deployment&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Learn the difference between continuous integration, continuous delivery, and continuous deployment in modern software development and DevOps.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;www.atlassian.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;CI/CD Pipeline의 경우 빌드하고 테스트하는 과정을 자동화하는 것이기 때문에 코드 개발 자체에 좀 더 집중할 수 있게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 반복적으로 수행해야 하는 과정을 자동화하기 때문에 시간을 절약할 수 있다는 장점이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.3 DevOps&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/56OYi/btsGOKVNEvw/RKcRdSu0ODW8fj7hJ6eD2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/56OYi/btsGOKVNEvw/RKcRdSu0ODW8fj7hJ6eD2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/56OYi/btsGOKVNEvw/RKcRdSu0ODW8fj7hJ6eD2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F56OYi%2FbtsGOKVNEvw%2FRKcRdSu0ODW8fj7hJ6eD2K%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;612&quot; height=&quot;315&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;DevOps는 소프트웨어 개발과 운영을 통합하여 효율성, 협력, 안정성 등을 높이는 방법론입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;소프트웨어 개발부터 배포, 운영, 모니터링까지 전체 생명주기를 관리하고, 개발과 운영 간의 협업을 강화하여 릴리즈 주기를 단축하고 문제를 신속하게 해결할 수 있도록 하는 것이 바로 DevOps입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그렇다면, DevOps와 CI/CD의 차이점은 무엇일까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DevOps는 개발과 운영 간의 커뮤니케이션과 협업을 강조하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문화&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;사고방식&lt;/b&gt;을 나타냅니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조직이 지속적으로 신속하게 애플리케이션을 배포할 수 있도록 소프트웨어나 팀을 구축하도록 지원하는 방법론이 바로 DevOps입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이러한 DevOps를 성공적으로 구현하기 위해서는 자동화가 매우 중요합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DevOps 문화를 가지고 있는 팀은 CI와 CD를 팀의 프로세스테 통합하여 CI/CD Pipeline을 원활하게 운영할 수 있습니다. 여기서&amp;nbsp;CI/CD는 자동화된 테스트 도구를 사용하는 DevOps의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;전략&lt;/b&gt;이라고 볼 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;즉, CI/CD는 소프트웨어 전체의 생명 주기에 중점을 두기 때문에 자동화와 관련된 도구를 강조하며, DevOps는 이러한 것들이 가능하게 하는 문화에 대해 강조하는 개념이라고 정리할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.4 컨테이너&amp;nbsp;&amp;nbsp;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;클라우드 네이티브 애플리케이션은 컨테이너 기술을 활용하여 개발됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라우드 네이티브 애플리케이션의 코드는 컨테이너로 패키지화되고 실행 환경이 격리됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발 환경과 운영 환경 간의 일관성을 유지할 수 있으며 운영 중단 없이 애플리케이션을 업그레이드하거나 효율적으로 확장할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다양한 환경 간에 쉽게 이식할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨테이너화를 통해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;마이크로서비스를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;기반이 되는 OS 및 H/W와 독립적으로 실행될 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정리하자면,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라우드 네이티브 아키텍처란 클라우드 컴퓨팅 시스템의 장점을 최대로 활용하도록 하는 애플리케이션 구축 방법이며 상기 설명한 4가지 핵심 요소를 통해 이를 달성할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;간단하게 클라우드 네이티브가 무엇인지, 이것을 이루는 핵심 요소에는 무엇이 있는지 알아보았습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 다음에 또 좋은 글로 찾아오도록 하겠습니다.  &lt;/p&gt;</description>
      <category>TOPIC/DevOps</category>
      <category>CI/CD</category>
      <category>cloud native</category>
      <category>container</category>
      <category>DevOps</category>
      <category>microservice</category>
      <category>마이크로서비스</category>
      <category>컨테이너</category>
      <category>클라우드 네이티브</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/42</guid>
      <comments>https://with-cloud.tistory.com/42#entry42comment</comments>
      <pubDate>Mon, 22 Apr 2024 11:20:22 +0900</pubDate>
    </item>
    <item>
      <title>Streamlit으로 웹 애플리케이션 만들어보기</title>
      <link>https://with-cloud.tistory.com/41</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이전 글에 이어 Streamlit으로 실제 데이터 웹 애플리케이션을 만들어 보는 테스트에 대해 다뤄보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이전 글 :&lt;/span&gt; &lt;a href=&quot;https://with-cloud.tistory.com/40&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/40&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713507319726&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;Streamlit이란?&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 오늘은 기존에 다루던 부분과 조금은 다른 분야의 내용을 다뤄보고자 합니다. 바로 Python 기반의 웹 개발 프레임워크인 Streamlit입니다! 우연한 기회에 접하게 되었는데 웹&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/40&quot; data-og-url=&quot;https://with-cloud.tistory.com/40&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bJj3qD/hyVSZwvd1P/HEEKJxJVJaiy2pBRLSsYVk/img.png?width=800&amp;amp;height=399&amp;amp;face=0_0_800_399,https://scrap.kakaocdn.net/dn/bOY7P8/hyVPXtzGXt/vPuHIfTAKHLTZ5GgD18kBK/img.png?width=800&amp;amp;height=399&amp;amp;face=0_0_800_399,https://scrap.kakaocdn.net/dn/bpiyAf/hyVPWg8cnt/BBvFhksmKw2bHHLfs8P4Sk/img.jpg?width=1800&amp;amp;height=1202&amp;amp;face=0_0_1800_1202&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/40&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/40&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bJj3qD/hyVSZwvd1P/HEEKJxJVJaiy2pBRLSsYVk/img.png?width=800&amp;amp;height=399&amp;amp;face=0_0_800_399,https://scrap.kakaocdn.net/dn/bOY7P8/hyVPXtzGXt/vPuHIfTAKHLTZ5GgD18kBK/img.png?width=800&amp;amp;height=399&amp;amp;face=0_0_800_399,https://scrap.kakaocdn.net/dn/bpiyAf/hyVPWg8cnt/BBvFhksmKw2bHHLfs8P4Sk/img.jpg?width=1800&amp;amp;height=1202&amp;amp;face=0_0_1800_1202');&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;Streamlit이란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 오늘은 기존에 다루던 부분과 조금은 다른 분야의 내용을 다뤄보고자 합니다. 바로 Python 기반의 웹 개발 프레임워크인 Streamlit입니다! 우연한 기회에 접하게 되었는데 웹&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 환경 구성&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 Streamlit으로 데이터 웹 애플리케이션을 만들기 전 사전에 구성하거나 설치해야 하는 것들에 대해 알아보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;※ 본 테스트는 Local PC가 아닌 가상 머신에서 진행되었습니다.※&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.1 Visual Studio Code 설치&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://code.visualstudio.com/Download#&quot;&gt;Download Visual Studio Code - Mac, Linux, Windows&lt;/a&gt;로 이동하여 테스트 환경 OS에 맞는 Visual Studio Code 설치 파일을 다운로드 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713507132793&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c1hDUJ/hyVS6WjebX/zk2NQaafbQb0rk7WcXP81K/img.png?width=1012&amp;amp;height=506&amp;amp;face=0_0_1012_506&quot; data-og-url=&quot;https://code.visualstudio.com/Download&quot; data-og-source-url=&quot;https://code.visualstudio.com/Download#&quot; data-og-host=&quot;code.visualstudio.com&quot; data-og-description=&quot;Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for building and debugging modern web and cloud applications.&quot; data-og-title=&quot;Download Visual Studio Code - Mac, Linux, Windows&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://code.visualstudio.com/Download#&quot; data-source-url=&quot;https://code.visualstudio.com/Download#&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c1hDUJ/hyVS6WjebX/zk2NQaafbQb0rk7WcXP81K/img.png?width=1012&amp;amp;height=506&amp;amp;face=0_0_1012_506');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Download Visual Studio Code - Mac, Linux, Windows&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for building and debugging modern web and cloud applications.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;code.visualstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;저는 Windows11 가상 머신을 사용하기 때문에 Windows용 System Installer x64를 다운로드 받습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1756&quot; data-origin-height=&quot;916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4BhlC/btsGLilEMyA/VlqkDwG6zXHWet3hvP44vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4BhlC/btsGLilEMyA/VlqkDwG6zXHWet3hvP44vK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4BhlC/btsGLilEMyA/VlqkDwG6zXHWet3hvP44vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4BhlC%2FbtsGLilEMyA%2FVlqkDwG6zXHWet3hvP44vK%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;707&quot; height=&quot;369&quot; data-origin-width=&quot;1756&quot; data-origin-height=&quot;916&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;하기와 같이 &quot;I accept the agreement&quot;로 옵션을 변경하는 것 외 기본 설정을 유지하고 [Next &amp;gt;]를 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1874&quot; data-origin-height=&quot;695&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crTFoE/btsGMJbvgV6/dc0PSKZfOGncC9XK8T5K9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crTFoE/btsGMJbvgV6/dc0PSKZfOGncC9XK8T5K9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crTFoE/btsGMJbvgV6/dc0PSKZfOGncC9XK8T5K9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrTFoE%2FbtsGMJbvgV6%2Fdc0PSKZfOGncC9XK8T5K9k%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;1874&quot; height=&quot;695&quot; data-origin-width=&quot;1874&quot; data-origin-height=&quot;695&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1872&quot; data-origin-height=&quot;695&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rYqPB/btsGK7dvHvz/gRvGALN5u1j7VOao4kXcUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rYqPB/btsGK7dvHvz/gRvGALN5u1j7VOao4kXcUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rYqPB/btsGK7dvHvz/gRvGALN5u1j7VOao4kXcUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrYqPB%2FbtsGK7dvHvz%2FgRvGALN5u1j7VOao4kXcUK%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;1872&quot; height=&quot;695&quot; data-origin-width=&quot;1872&quot; data-origin-height=&quot;695&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;마지막으로 [Install] 버튼을 클릭하여 Visual Studio Code 설치를 완료합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;670&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s0Gtg/btsGK2pTice/nBEtpjKQ2sagSIKmLSIH51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s0Gtg/btsGK2pTice/nBEtpjKQ2sagSIKmLSIH51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s0Gtg/btsGK2pTice/nBEtpjKQ2sagSIKmLSIH51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs0Gtg%2FbtsGK2pTice%2FnBEtpjKQ2sagSIKmLSIH51%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;430&quot; height=&quot;326&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;670&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;마지막으로, Streamlit이라는 이름의 folder를 하나 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lvu2K/btsGKeqKD53/NiZvlf36hBsr1UVoxoj3u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lvu2K/btsGKeqKD53/NiZvlf36hBsr1UVoxoj3u1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lvu2K/btsGKeqKD53/NiZvlf36hBsr1UVoxoj3u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flvu2K%2FbtsGKeqKD53%2FNiZvlf36hBsr1UVoxoj3u1%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;655&quot; height=&quot;255&quot; data-origin-width=&quot;1099&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.2 python 설치&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.python.org/downloads/&quot;&gt;Download Python | Python.org&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 이동하여 테스트 환경 OS에 맞는 python 설치 파일을 다운로드 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713507132795&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/D4PO0/hyVSXyePff/cSvHlPE2W73Xl5KOjfyCa1/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot; data-og-url=&quot;https://www.python.org/downloads/&quot; data-og-source-url=&quot;https://www.python.org/downloads/&quot; data-og-host=&quot;www.python.org&quot; data-og-description=&quot;The official home of the Python Programming Language&quot; data-og-title=&quot;Download Python&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.python.org/downloads/&quot; data-source-url=&quot;https://www.python.org/downloads/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/D4PO0/hyVSXyePff/cSvHlPE2W73Xl5KOjfyCa1/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Download Python&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;The official home of the Python Programming Language&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;www.python.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;저는 Visual Studio Code 설치 시와 마찬가지로 Windows용 파일을 다운로드 받습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1817&quot; data-origin-height=&quot;813&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AL2x1/btsGM3gvM0P/Q8K1qoV0SicVDg5ADIRduK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AL2x1/btsGM3gvM0P/Q8K1qoV0SicVDg5ADIRduK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AL2x1/btsGM3gvM0P/Q8K1qoV0SicVDg5ADIRduK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAL2x1%2FbtsGM3gvM0P%2FQ8K1qoV0SicVDg5ADIRduK%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;755&quot; height=&quot;338&quot; data-origin-width=&quot;1817&quot; data-origin-height=&quot;813&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;설치 파일을 실행한 후 [Install Now] 버튼을 클릭하여 설치를 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하단의 &quot;Use admin privileges when installing py.exe&quot;와 &quot;Add python.exe to PATH&quot; 체크박스를 클릭해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;601&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGGyf8/btsGMRUOury/bQofmNqtZ1N3WeC66pmMek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGGyf8/btsGMRUOury/bQofmNqtZ1N3WeC66pmMek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGGyf8/btsGMRUOury/bQofmNqtZ1N3WeC66pmMek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGGyf8%2FbtsGMRUOury%2FbQofmNqtZ1N3WeC66pmMek%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;626&quot; height=&quot;385&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;601&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Visual Studio Code를 재실행한 후에 [Ctrl + Shift + `]를 눌러 터미널을 실행합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1075&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYLlhk/btsGM4fpMNG/CDQHkwp8ROokr2MRwoSHt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYLlhk/btsGM4fpMNG/CDQHkwp8ROokr2MRwoSHt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYLlhk/btsGM4fpMNG/CDQHkwp8ROokr2MRwoSHt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYLlhk%2FbtsGM4fpMNG%2FCDQHkwp8ROokr2MRwoSHt1%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;738&quot; height=&quot;85&quot; data-origin-width=&quot;1075&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;터미널 창에 python을 입력했을 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;상기 스크린샷처럼 출력된다면 python 설치가 정상적으로 진행된 것입니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;1.3 Streamlit 설치&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Streamlit을 설치하기 위해 로 이동하여 [Get started] &amp;gt; [Installation] &amp;gt; [Use command line]을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1082&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ASSmK/btsGMLUGCjO/3KOv9gUDkqZukACbbgaiE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ASSmK/btsGMLUGCjO/3KOv9gUDkqZukACbbgaiE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ASSmK/btsGMLUGCjO/3KOv9gUDkqZukACbbgaiE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FASSmK%2FbtsGMLUGCjO%2F3KOv9gUDkqZukACbbgaiE1%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;760&quot; height=&quot;421&quot; data-origin-width=&quot;1082&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;python&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;venv .venv&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어로 가상 환경을 만들어도 되지만 저는 Streamlit을 그냥 VM 환경에 설치해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;pip&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;streamlit&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 Streamlit을 설치합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qnbpm/btsGKT7EWtA/SKBu7Lc3uLo9X3S0LARZfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qnbpm/btsGKT7EWtA/SKBu7Lc3uLo9X3S0LARZfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qnbpm/btsGKT7EWtA/SKBu7Lc3uLo9X3S0LARZfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqnbpm%2FbtsGKT7EWtA%2FSKBu7Lc3uLo9X3S0LARZfK%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;539&quot; height=&quot;248&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;423&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;streamlit hello&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 입력하여 Hello는 example app을 실행합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1005&quot; data-origin-height=&quot;736&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NSKFp/btsGKtg6Y5Z/wAEOgfIdTn9yAcPiD2CxD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NSKFp/btsGKtg6Y5Z/wAEOgfIdTn9yAcPiD2CxD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NSKFp/btsGKtg6Y5Z/wAEOgfIdTn9yAcPiD2CxD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNSKFp%2FbtsGKtg6Y5Z%2FwAEOgfIdTn9yAcPiD2CxD0%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;552&quot; height=&quot;404&quot; data-origin-width=&quot;1005&quot; data-origin-height=&quot;736&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;Email 입력의 경우 그냥 [Enter]를 눌러도 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어가 실행되면 네트워크 허용에 대한 메시지 창이 뜹니다. [Allow]를 클릭하면 하기 스크린샷과 같은 Sample Web page가 생성된 것을 확인할 수 있습니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2119&quot; data-origin-height=&quot;885&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFBIzu/btsGLBFgmuc/No61XXk27WvykvVFrEMSH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFBIzu/btsGLBFgmuc/No61XXk27WvykvVFrEMSH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFBIzu/btsGLBFgmuc/No61XXk27WvykvVFrEMSH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFBIzu%2FbtsGLBFgmuc%2FNo61XXk27WvykvVFrEMSH1%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;822&quot; height=&quot;343&quot; data-origin-width=&quot;2119&quot; data-origin-height=&quot;885&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 웹 페이지 생성해 보기&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.1 &quot;Hello World&quot; app 생성하기&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.streamlit.io/get-started/installation/command-line#create-a-hello-world-app-and-run-it&quot;&gt;https://docs.streamlit.io/get-started/installation/command-line#create-a-hello-world-app-and-run-it&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 가이드를 따라서 Hello World app을 생성한 후 실행해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713507132800&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/G17eQ/hyVPQ8LQw3/oN07uTH71eyDRi3Kvjs1w1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/esptbA/hyVSZ35NME/E9E1BjxFa0wU4TD8vHmaK1/img.jpg?width=280&amp;amp;height=150&amp;amp;face=0_0_280_150,https://scrap.kakaocdn.net/dn/GJxOO/hyVPIXgyJl/MMtQbjMkkZXC04kEd34ch0/img.png?width=362&amp;amp;height=313&amp;amp;face=0_0_362_313&quot; data-og-url=&quot;https://docs.streamlit.io/&quot; data-og-source-url=&quot;https://docs.streamlit.io/get-started/installation/command-line#create-a-hello-world-app-and-run-it&quot; data-og-host=&quot;docs.streamlit.io&quot; data-og-description=&quot;Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions&quot; data-og-title=&quot;Streamlit Docs&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.streamlit.io/get-started/installation/command-line#create-a-hello-world-app-and-run-it&quot; data-source-url=&quot;https://docs.streamlit.io/get-started/installation/command-line#create-a-hello-world-app-and-run-it&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/G17eQ/hyVPQ8LQw3/oN07uTH71eyDRi3Kvjs1w1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/esptbA/hyVSZ35NME/E9E1BjxFa0wU4TD8vHmaK1/img.jpg?width=280&amp;amp;height=150&amp;amp;face=0_0_280_150,https://scrap.kakaocdn.net/dn/GJxOO/hyVPIXgyJl/MMtQbjMkkZXC04kEd34ch0/img.png?width=362&amp;amp;height=313&amp;amp;face=0_0_362_313');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Streamlit Docs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;docs.streamlit.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;먼저 Streamlit이라는 폴더 내에 helloworld라는 이름의 폴더를 하나 더 생성한 후&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;cd helloworld&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;명령어를 입력하여 working directory를 변경합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;(이어서 테스트할 다른 app들과 환경을 분리하기 위함입니다.)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;561&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciwRSD/btsGK9WG8S5/QktA9xaeeJokmMOUsPkReK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciwRSD/btsGK9WG8S5/QktA9xaeeJokmMOUsPkReK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciwRSD/btsGK9WG8S5/QktA9xaeeJokmMOUsPkReK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciwRSD%2FbtsGK9WG8S5%2FQktA9xaeeJokmMOUsPkReK%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;693&quot; height=&quot;352&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;561&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;test.py라는 파일을 helloworld 폴더 하위에 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mEHKy/btsGKVj8dfQ/rWlgsYxXazdo9snR4W2AM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mEHKy/btsGKVj8dfQ/rWlgsYxXazdo9snR4W2AM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mEHKy/btsGKVj8dfQ/rWlgsYxXazdo9snR4W2AM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmEHKy%2FbtsGKVj8dfQ%2FrWlgsYxXazdo9snR4W2AM0%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;324&quot; height=&quot;97&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;test.py 파일을 열고 하기 코드를 입력합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713507132801&quot; class=&quot;vim&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import streamlit as st

st.write(&quot;Hello world&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;작성을 완료한 후 저장을 눌러 변경 사항을 저장합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;background-color: #262730; color: #ffffff; text-align: start;&quot;&gt;streamlit run test.py&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 실행합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sUPzN/btsGLHZFQHw/v37Cak1HR61fcHugByF1o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sUPzN/btsGLHZFQHw/v37Cak1HR61fcHugByF1o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sUPzN/btsGLHZFQHw/v37Cak1HR61fcHugByF1o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsUPzN%2FbtsGLHZFQHw%2Fv37Cak1HR61fcHugByF1o0%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;557&quot; height=&quot;159&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;자동으로 하기 페이지가 로딩되며 &quot;Hello world&quot;라는 문구가 출력되어 있는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;403&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxA7dt/btsGLGzLiVX/KlKGO5jSocm3gomWkkQhx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxA7dt/btsGLGzLiVX/KlKGO5jSocm3gomWkkQhx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxA7dt/btsGLGzLiVX/KlKGO5jSocm3gomWkkQhx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxA7dt%2FbtsGLGzLiVX%2FKlKGO5jSocm3gomWkkQhx0%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;651&quot; height=&quot;302&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;403&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;다소 심플한 감이 있어 Docs의 API Reference 탭의 sample 코드를 가지고 To Do List를 만들어 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;a href=&quot;https://docs.streamlit.io/develop/api-reference&quot;&gt;https://docs.streamlit.io/develop/api-reference&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 이동하여 &quot;Input widgets&quot;를 클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713507132803&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cIl9wW/hyVPODmLAX/uGiqUHbrvDmF70hinAPeU0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bFsFKX/hyVS0PF6vx/oQD7vWgXz7ve5xsoKqUoLK/img.jpg?width=280&amp;amp;height=150&amp;amp;face=0_0_280_150,https://scrap.kakaocdn.net/dn/ilvwQ/hyVS5i8ud6/XLlL8uIw2ZfuKThKczarc0/img.png?width=362&amp;amp;height=313&amp;amp;face=0_0_362_313&quot; data-og-url=&quot;https://docs.streamlit.io/&quot; data-og-source-url=&quot;https://docs.streamlit.io/develop/api-reference&quot; data-og-host=&quot;docs.streamlit.io&quot; data-og-description=&quot;Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions&quot; data-og-title=&quot;Streamlit Docs&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.streamlit.io/develop/api-reference&quot; data-source-url=&quot;https://docs.streamlit.io/develop/api-reference&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cIl9wW/hyVPODmLAX/uGiqUHbrvDmF70hinAPeU0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bFsFKX/hyVS0PF6vx/oQD7vWgXz7ve5xsoKqUoLK/img.jpg?width=280&amp;amp;height=150&amp;amp;face=0_0_280_150,https://scrap.kakaocdn.net/dn/ilvwQ/hyVS5i8ud6/XLlL8uIw2ZfuKThKczarc0/img.png?width=362&amp;amp;height=313&amp;amp;face=0_0_362_313');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Streamlit Docs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;docs.streamlit.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cY7LHq/btsGMKIgj8M/D9jeRlgkVhDIniOYkmz0rK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cY7LHq/btsGMKIgj8M/D9jeRlgkVhDIniOYkmz0rK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cY7LHq/btsGMKIgj8M/D9jeRlgkVhDIniOYkmz0rK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcY7LHq%2FbtsGMKIgj8M%2FD9jeRlgkVhDIniOYkmz0rK%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;769&quot; height=&quot;433&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;846&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&quot;Checkbox&quot;를 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;843&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pFw4M/btsGKMOiqL0/2eH2zIbtO43sG6offLhjF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pFw4M/btsGKMOiqL0/2eH2zIbtO43sG6offLhjF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pFw4M/btsGKMOiqL0/2eH2zIbtO43sG6offLhjF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpFw4M%2FbtsGKMOiqL0%2F2eH2zIbtO43sG6offLhjF1%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;722&quot; height=&quot;511&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;843&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;코드를 복사해서 앞서 생성한 test.py 파일에 붙여 넣습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그냥 붙여 넣어도 되지만 To Do List이기 때문에 하기 코드와 같이 항목을 두 개 더 추가하고 체크박스가 모두 체크되면 &quot;You did EVERYTHING!  &quot;이 출력되도록 하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 To Do List라는 제목을 가장 상단에 표시되도록 하고 색은 무지개 색으로 보이도록 코드를 추가해 주었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713507132806&quot; class=&quot;vim&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import streamlit as st

st.title(':rainbow[To Do List] :rainbow:')

work = st.checkbox('Work')
gym = st.checkbox('Go to gym')
book = st.checkbox('Read a book')

if work and gym and book:
    st.write('You did EVERYTHING! :thumbsup:')&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;코드를 작성한 후 [Ctrl + s] 버튼을 눌러 변경 사항을 저장합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 후&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: start;&quot;&gt;streamlit run test.py&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 실행합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccIWq6/btsGK6FEQrP/iivrbrYaeTtnx1Hskjcur1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccIWq6/btsGK6FEQrP/iivrbrYaeTtnx1Hskjcur1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccIWq6/btsGK6FEQrP/iivrbrYaeTtnx1Hskjcur1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccIWq6%2FbtsGK6FEQrP%2FiivrbrYaeTtnx1Hskjcur1%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;555&quot; height=&quot;116&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;웹 페이지가 실행되면서 하기 스크린샷과 같은 페이지가 보입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;체크 박스를 다 누르면 &quot;You did EVERYTHING!  &quot;이라는 문구가 출력되는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwxzh8/btsGNeviF50/K0T8xinalIsK7Xlakl2Gs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwxzh8/btsGNeviF50/K0T8xinalIsK7Xlakl2Gs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwxzh8/btsGNeviF50/K0T8xinalIsK7Xlakl2Gs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwxzh8%2FbtsGNeviF50%2FK0T8xinalIsK7Xlakl2Gs0%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;671&quot; height=&quot;468&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;807&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;참고로 Streamlit에서 지원하는 emoji의 shortcode들에 대한 정보는 하기 링크에서 확인하실 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://streamlit-emoji-shortcodes-streamlit-app-gwckff.streamlit.app/&quot;&gt;https://streamlit-emoji-shortcodes-streamlit-app-gwckff.streamlit.app/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713507132808&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/v3j4r/hyVS6WFuma/K0XktRx6zC8FlKgb0VkOwK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot; data-og-url=&quot;https://streamlit-emoji-shortcodes-streamlit-app-gwckff.streamlit.app/?utm_medium=social&quot; data-og-source-url=&quot;https://streamlit-emoji-shortcodes-streamlit-app-gwckff.streamlit.app/&quot; data-og-host=&quot;streamlit-emoji-shortcodes-streamlit-app-gwckff.streamlit.app&quot; data-og-description=&quot;App showing all the emoji shortcodes supported by Streamlit&quot; data-og-title=&quot;A faster way to build and share data apps&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://streamlit-emoji-shortcodes-streamlit-app-gwckff.streamlit.app/&quot; data-source-url=&quot;https://streamlit-emoji-shortcodes-streamlit-app-gwckff.streamlit.app/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/v3j4r/hyVS6WFuma/K0XktRx6zC8FlKgb0VkOwK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;A faster way to build and share data apps&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;App showing all the emoji shortcodes supported by Streamlit&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;streamlit-emoji-shortcodes-streamlit-app-gwckff.streamlit.app&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.2 LangChain을 사용하여 LLM app 생성하기&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음은 LangChain을 사용하여 LLM app을 생성하는 테스트를 진행해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;LangChain❓ LLM❓이 무엇일까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우선 이 두 가지 개념에 대해서 간단히 설명하고 넘어가도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;LangChain이란?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;LangChain은 대규모 언어 모델(LLM)을 기반으로 한 애플리케이션을 개발하기 위한 오픈 소스 프레임워크입니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발자들이 기존의 언어 모델을 쉽게 연동하고 확장할 수 있도록 다양한 도구와 인터페이스를 제공합니다.&lt;br /&gt;따라서 LangChain은 특히 대화형 AI 시스템을 구축하는 데 많이 사용되고 있습니다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;LLM이란?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;LLM(Large Language Models)은 대규모 언어 모델을 의미하며, 대량의 데이터셋을 학습하여 자연어 이해 및 생성 능력을 갖춘 모델입니다.&amp;nbsp;&lt;br /&gt;딥러닝 방식으로 패턴을 분석하고 의미를 추출하여 인간의 방식으로 답을 생성하도록 훈련되었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OpenAI의 ChatGPT, 메타(구 페이스북)의 LLaMA와 같은 모델이 대표적인 LLM 모델입니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&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;&lt;span style=&quot;color: #000000;&quot;&gt;주요 개념에 대해서 알아 보았으니 지금부터 LangChain을 사용하는 LLM app을 생성해 보도록 하겠습니다.&amp;nbsp;&lt;/span&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;&lt;span style=&quot;color: #000000;&quot;&gt;Streamlit Docs 중 &quot;Build an LLM app using LangChain&quot; 문서를 참고하여 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://docs.streamlit.io/develop/tutorials/llms/llm-quickstart&quot;&gt;https://docs.streamlit.io/develop/tutorials/llms/llm-quickstart&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713507132811&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dKYC6p/hyVS2mrmn7/N7AQuEGBygyKW3i2aPJ7B1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/Dpqo5/hyVS6vAEax/6V2AeTS4Y2wmbi6gnYgU01/img.jpg?width=280&amp;amp;height=150&amp;amp;face=0_0_280_150,https://scrap.kakaocdn.net/dn/XoOKN/hyVPXtw5S3/1qyNu7bKaVTURgNg87tock/img.png?width=362&amp;amp;height=313&amp;amp;face=0_0_362_313&quot; data-og-url=&quot;https://docs.streamlit.io/&quot; data-og-source-url=&quot;https://docs.streamlit.io/develop/tutorials/llms/llm-quickstart&quot; data-og-host=&quot;docs.streamlit.io&quot; data-og-description=&quot;Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions&quot; data-og-title=&quot;Streamlit Docs&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.streamlit.io/develop/tutorials/llms/llm-quickstart&quot; data-source-url=&quot;https://docs.streamlit.io/develop/tutorials/llms/llm-quickstart&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dKYC6p/hyVS2mrmn7/N7AQuEGBygyKW3i2aPJ7B1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/Dpqo5/hyVS6vAEax/6V2AeTS4Y2wmbi6gnYgU01/img.jpg?width=280&amp;amp;height=150&amp;amp;face=0_0_280_150,https://scrap.kakaocdn.net/dn/XoOKN/hyVPXtw5S3/1qyNu7bKaVTURgNg87tock/img.png?width=362&amp;amp;height=313&amp;amp;face=0_0_362_313');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Streamlit Docs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;docs.streamlit.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;&lt;span style=&quot;color: #000000;&quot;&gt;먼저, llmapp이라는 폴더를 새로 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yOG03/btsGM38BKz6/1zqRuE4zH6XVNQ9fOVB0kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yOG03/btsGM38BKz6/1zqRuE4zH6XVNQ9fOVB0kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yOG03/btsGM38BKz6/1zqRuE4zH6XVNQ9fOVB0kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyOG03%2FbtsGM38BKz6%2F1zqRuE4zH6XVNQ9fOVB0kk%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;295&quot; height=&quot;165&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;255&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;&lt;span style=&quot;color: #000000;&quot;&gt;이후 터미널에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;cd ../llmapp&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;명령어를 입력하여 working directory를 변경합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고 해당 위치에 app.py라는 이름의 파일을 하나 생성합니다.&lt;/span&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;&lt;span style=&quot;color: #000000;&quot;&gt;여기까지 했다면 2.1 과정과는 다르게 추가적으로 해주어야 하는 것이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;바로 OpenAI key를 생성하는 것입니다.&amp;nbsp;&lt;/span&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;&lt;span style=&quot;background-color: #f6e199; color: #000000; text-align: start;&quot;&gt;참고로 API Key를 사용하기 위해서는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;u&gt;Paid User&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000; text-align: start;&quot;&gt;여야 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;(최소 $5의 비용이 발생합니다.)&amp;nbsp;&lt;/i&gt;&lt;/span&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;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://platform.openai.com/account/api-keys?ref=blog.streamlit.io&quot;&gt;여기&lt;/a&gt;로 이동하여 로그인을 합니다. (계정이 있어야 합니다. 없다면 생성해야 합니다.)&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하기와 같은 페이지가 뜨면 [+ Create new secret key]를 클릭하여 새로운 API Key를 생성합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1342&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkCa0G/btsGK1YLmE9/AJNNPKhZMFfHktyd4ORFkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkCa0G/btsGK1YLmE9/AJNNPKhZMFfHktyd4ORFkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkCa0G/btsGK1YLmE9/AJNNPKhZMFfHktyd4ORFkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkCa0G%2FbtsGK1YLmE9%2FAJNNPKhZMFfHktyd4ORFkk%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;755&quot; height=&quot;281&quot; data-origin-width=&quot;1342&quot; data-origin-height=&quot;499&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;&lt;span style=&quot;color: #000000;&quot;&gt;API Key의 이름을 입력한 후 [Create secret key] 버튼을 클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcumdC/btsGMCcDrG5/kokAJJx6fsxxyHlMQTojzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcumdC/btsGMCcDrG5/kokAJJx6fsxxyHlMQTojzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcumdC/btsGMCcDrG5/kokAJJx6fsxxyHlMQTojzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcumdC%2FbtsGMCcDrG5%2FkokAJJx6fsxxyHlMQTojzK%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;386&quot; height=&quot;273&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;353&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;하기 스크린샷과 같이 API Key가 출력되면 [Copy] 버튼을 클릭하여 해당 Key를 복사합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(해당 키는 해당 창을 나가면 다시 볼 수 없기 때문에 꼭 메모장과 같은 곳에 저장해 두어야 합니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w5HCx/btsGMgngxCD/nokPXUIOP8wdyIGWLwWg31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w5HCx/btsGMgngxCD/nokPXUIOP8wdyIGWLwWg31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w5HCx/btsGMgngxCD/nokPXUIOP8wdyIGWLwWg31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw5HCx%2FbtsGMgngxCD%2FnokPXUIOP8wdyIGWLwWg31%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;456&quot; height=&quot;289&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;정상적으로 생성이 되면 하기와 같이 Project API keys 리스트에 방금 생성한 API Key가 출력되게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9axtw/btsGK51aoOS/mltqcSYk1rkIntXJwilEMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9axtw/btsGK51aoOS/mltqcSYk1rkIntXJwilEMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9axtw/btsGK51aoOS/mltqcSYk1rkIntXJwilEMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9axtw%2FbtsGK51aoOS%2FmltqcSYk1rkIntXJwilEMk%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;731&quot; height=&quot;294&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;다시 Visual Studio Code로 돌아와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: start;&quot;&gt;pip install openai langchain&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 필요한 Python 라이브러리를 설치합니다. (Streamlit은 이미 설치했기 때문에 생략합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zCoXa/btsGL1cFzDK/wtK9HB7H9KzCkeksgRJiik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zCoXa/btsGL1cFzDK/wtK9HB7H9KzCkeksgRJiik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zCoXa/btsGL1cFzDK/wtK9HB7H9KzCkeksgRJiik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzCoXa%2FbtsGL1cFzDK%2FwtK9HB7H9KzCkeksgRJiik%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;626&quot; height=&quot;251&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그 다음 현재 폴더에 requirements.txt라는 파일을 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: start;&quot;&gt;streamlit openai langchain&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 해당 파일에 적어 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CJ2Ho/btsGL3uMFie/aNcV3wLLQHlFs7RBKU1IV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CJ2Ho/btsGL3uMFie/aNcV3wLLQHlFs7RBKU1IV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CJ2Ho/btsGL3uMFie/aNcV3wLLQHlFs7RBKU1IV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCJ2Ho%2FbtsGL3uMFie%2FaNcV3wLLQHlFs7RBKU1IV1%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;241&quot; height=&quot;140&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;app.py 파일에 하기 코드를 입력해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713507132814&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import streamlit as st
from langchain.llms import OpenAI

st.title('  Quickstart App')

openai_api_key = st.sidebar.text_input('OpenAI API Key', type='password')

def generate_response(input_text):
    llm = OpenAI(temperature=0.7, openai_api_key=openai_api_key)
    st.info(llm(input_text))

with st.form('my_form'):
    text = st.text_area('Enter text:', 'What are the three key pieces of advice for learning how to code?')
    submitted = st.form_submit_button('Submit')
    if not openai_api_key.startswith('sk-'):
        st.warning('Please enter your OpenAI API key!', icon='⚠')
    if submitted and openai_api_key.startswith('sk-'):
        generate_response(text)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&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;span style=&quot;color: #000000;&quot;&gt;Line 1, 2를 통해 필요한 Python 라이브러리를 import 합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Line 4를 통해 페이지의 제목을 적어줍니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Line 6을 통해 OpenAI API Key를 입력할 수 있는 input text box를 생성합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Line 8-10을 통해 OpenAI API Key를 가지고 Open AI에 인증하고, prompt를 보내고 AI가 생성한 응답을 받을 수 있도록 하는 함수를 정의합니다. 이 함수는 user의 요청을 받아 AI가 생성한 응답을 st.info를 사용하여 파란색 박스에 출력하도록 하는 함수입니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마지막으로 Line 12-18에서 st.form()을 사용하여 사용자 입력을 위한 text box를 생성합니다. st.text_area()를 사용자가 Submit이라는 버튼을 클릭하면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;사용자의 입력을 인수로 사용하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;generate-response()라는 함수가 호출됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;파일을 저장한 후&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;streamlit run app.py&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 실행합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;웹 페이지가 실행되면서 하기와 같은 화면이 출력됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2105&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhix1v/btsGKMOirLA/bklKrl4m8YhaLtGH4m4ieK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhix1v/btsGKMOirLA/bklKrl4m8YhaLtGH4m4ieK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhix1v/btsGKMOirLA/bklKrl4m8YhaLtGH4m4ieK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbhix1v%2FbtsGKMOirLA%2FbklKrl4m8YhaLtGH4m4ieK%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;255&quot; data-origin-width=&quot;2105&quot; data-origin-height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;앞서 생성한 OpenAI API Key를 좌측 상단의 [OpenAI API Key] 박스에 입력한 후 질문을 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2103&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z14gR/btsGMUYimct/jeMPESXUNGtZvvWkqKtEC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z14gR/btsGMUYimct/jeMPESXUNGtZvvWkqKtEC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z14gR/btsGMUYimct/jeMPESXUNGtZvvWkqKtEC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz14gR%2FbtsGMUYimct%2FjeMPESXUNGtZvvWkqKtEC1%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;737&quot; height=&quot;209&quot; data-origin-width=&quot;2103&quot; data-origin-height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&quot;What is a dog?&quot;라는 질문에 대한 대답이 하기 스크린샷과 같이 파란색 박스 안에 출력되는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2101&quot; data-origin-height=&quot;892&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDzfs3/btsGMSsB9X3/qTaK5g8cQJw9ANYf6nHwVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDzfs3/btsGMSsB9X3/qTaK5g8cQJw9ANYf6nHwVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDzfs3/btsGMSsB9X3/qTaK5g8cQJw9ANYf6nHwVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDzfs3%2FbtsGMSsB9X3%2FqTaK5g8cQJw9ANYf6nHwVk%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;773&quot; height=&quot;328&quot; data-origin-width=&quot;2101&quot; data-origin-height=&quot;892&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.3 간단한 app 만들어 보기&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마지막으로 문장을 입력하면 image를 생성해 주는 app에 대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;GitHub 소스 코드를 clone 해서 애플리케이션을 build 해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본 테스트는 Youtube의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.youtube.com/watch?v=17oHPkhgCuk&quot;&gt;AI Image Generation Streamlit App&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이라는 영상의 소스 코드를 사용하였습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=17oHPkhgCuk&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bim666/hyVPWVKmPN/lhXxx8eDAHeNNAxJ2CeuKK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/17oHPkhgCuk&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;git clone https://github.com/AIAnytime/AI-Image-Generation-Streamlit-App ai-image-generator&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;명령어를 사용하여 git clone을 진행합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1427&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QJTHn/btsGLCqD6Rm/p166sxaNUjev2GWEs1RZlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QJTHn/btsGLCqD6Rm/p166sxaNUjev2GWEs1RZlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QJTHn/btsGLCqD6Rm/p166sxaNUjev2GWEs1RZlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQJTHn%2FbtsGLCqD6Rm%2Fp166sxaNUjev2GWEs1RZlk%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;114&quot; data-origin-width=&quot;1427&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;cd ai-image-generator&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 입력하여 working directory를 이동합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;코드는 수정하지 않고 필요한 라이브러리와 환경 변수만 추가로 설치해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;먼저 라이브러리를 설치하기 위해 하기 명령어를 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;pip install --upgrade diffusers[torch]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;pip install sentencepiece&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;pip install --upgrade diffusers transformers accelerate&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;&lt;span&gt;pip install transformers&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;설치가 완료되면 하기 스크린샷에 있는 &quot;OPENAI_API_KEY&quot;라는 변수에 대한 값을 입력해 주기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 폴더 내에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;.env&lt;/i&gt;라는 파일을 하나 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bba2t2/btsGKMU1Ooh/xP2oVHfgQwBQC3ohszecA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bba2t2/btsGKMU1Ooh/xP2oVHfgQwBQC3ohszecA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bba2t2/btsGKMU1Ooh/xP2oVHfgQwBQC3ohszecA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbba2t2%2FbtsGKMU1Ooh%2FxP2oVHfgQwBQC3ohszecA0%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;459&quot; height=&quot;237&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 .env 파일에 다음과 같이 작성합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1359&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0pw2M/btsGM3HxC7G/LX6H20EIigfNxdUS4QHS11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0pw2M/btsGM3HxC7G/LX6H20EIigfNxdUS4QHS11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0pw2M/btsGM3HxC7G/LX6H20EIigfNxdUS4QHS11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0pw2M%2FbtsGM3HxC7G%2FLX6H20EIigfNxdUS4QHS11%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;691&quot; height=&quot;217&quot; data-origin-width=&quot;1359&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Key 값은 2.2 과정에서 사용했던 OpenAI API Key를 입력해 주면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #262730; color: #ffffff; text-align: left;&quot;&gt;streamlit run app.py&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 실행합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C8eqU/btsGKNsVZUm/O7ac3ZAKskr87dgqDmj1S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C8eqU/btsGKNsVZUm/O7ac3ZAKskr87dgqDmj1S0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C8eqU/btsGKNsVZUm/O7ac3ZAKskr87dgqDmj1S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC8eqU%2FbtsGKNsVZUm%2FO7ac3ZAKskr87dgqDmj1S0%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;612&quot; height=&quot;116&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;만약 웹 페이지 실행 시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;하기와 같은 에러가 발생할 경우,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OSError: [WinError 126] The specified module could not be found. Error loading &quot;C:\Users\hyein\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\lib\c10.dll&quot; or one of its dependencies.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;VS2019 redist를 설치하면 됩니다. (설치 링크 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://aka.ms/vs/16/release/vc_redist.x64.exe&quot;&gt;https://aka.ms/vs/16/release/vc_redist.x64.exe&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;웹 페이지가 정상적으로 보이면 좌측의 드롭다운 버튼을 클릭하여 &quot;DALL-E&quot;를 선택합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1792&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYqJot/btsGLHFqGK5/UxOrzYgwL9bpU1ydro3GMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYqJot/btsGLHFqGK5/UxOrzYgwL9bpU1ydro3GMk/img.png&quot; data-alt=&quot;.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYqJot/btsGLHFqGK5/UxOrzYgwL9bpU1ydro3GMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYqJot%2FbtsGLHFqGK5%2FUxOrzYgwL9bpU1ydro3GMk%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;819&quot; height=&quot;218&quot; data-origin-width=&quot;1792&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원하는 문장을 입력합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 예시로 &quot;Cats are playing badminton in the jungle. cartoon style.&quot;이라는 문장을 입력해 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 후 [Generate Image] 버튼을 누르면 이미지를 생성해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blknrR/btsGMMlNsCt/ehPjKSYhgEWShtCgZqtbXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blknrR/btsGMMlNsCt/ehPjKSYhgEWShtCgZqtbXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blknrR/btsGMMlNsCt/ehPjKSYhgEWShtCgZqtbXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblknrR%2FbtsGMMlNsCt%2FehPjKSYhgEWShtCgZqtbXk%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;629&quot; height=&quot;161&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;실제로 생성해 준 그림은 하기와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;899&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nbqtP/btsGLuTPQ6a/ylCxdiAcPRC5nDJNeMpwc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nbqtP/btsGLuTPQ6a/ylCxdiAcPRC5nDJNeMpwc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nbqtP/btsGLuTPQ6a/ylCxdiAcPRC5nDJNeMpwc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnbqtP%2FbtsGLuTPQ6a%2FylCxdiAcPRC5nDJNeMpwc0%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;536&quot; height=&quot;711&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;899&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;계속 보니 의미는 모르겠지만 귀여운 것 같습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물론 제일 왼쪽에 있는 고양이랑 배드민턴은 뭔지 모르겠지만...&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbiEB7/btsGNdXs3TV/vJsiIlQxweLeeYNhbt5li1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbiEB7/btsGNdXs3TV/vJsiIlQxweLeeYNhbt5li1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbiEB7/btsGNdXs3TV/vJsiIlQxweLeeYNhbt5li1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbiEB7%2FbtsGNdXs3TV%2FvJsiIlQxweLeeYNhbt5li1%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;512&quot; height=&quot;512&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 Streamlit 테스트를 완료해 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;직접 해 보니까 확실히 Streamlit은 빠르게 애플리케이션을 생성하기에 굉장히 강력한 도구라는 생각이 듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;운영을 목적으로는 사용해 보지 않았지만 해당 부분은 다소 한계가 있을 거 같다는 생각도 듭니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래도 여전히 쉽게 AI와 관련된 애플리케이션을 생성해 보기에 아주 좋은 도구라는 점에서 관심 있으신 분들은 사용해 보시는 것을 추천 드립니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TOPIC/Data</category>
      <category>ai</category>
      <category>Dall-E</category>
      <category>LangChain</category>
      <category>LLM</category>
      <category>Open AI API Key</category>
      <category>OpenAI</category>
      <category>Python</category>
      <category>streamlit</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/41</guid>
      <comments>https://with-cloud.tistory.com/41#entry41comment</comments>
      <pubDate>Fri, 19 Apr 2024 15:31:02 +0900</pubDate>
    </item>
    <item>
      <title>Streamlit이란?</title>
      <link>https://with-cloud.tistory.com/40</link>
      <description>&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 기존에 다루던 부분과 조금은 다른 분야의 내용을 다뤄보고자 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;바로 Python 기반의 웹 개발 프레임워크인 Streamlit입니다!&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;우연한 기회에 접하게 되었는데 웹 개발에 대한 지식이 많이 없는 저도 쉽게 데모 환경을 구성할 수 있더라구요!&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 간단하게 Streamlit이 무엇인지에 대해 알아보고 다음 글에서 실제 구성한 데모 환경에 대해 다뤄보도록 하겠습니다.  ️&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Streamlit이란?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공식 문서에 따르면 Streamlit의 정의는 다음과 같습니다. (&lt;a href=&quot;https://docs.streamlit.io/&quot;&gt;https://docs.streamlit.io/&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Streamlit is an open-source Python framework for data scientists and AI/ML engineers to deliver dynamic data apps with only a few lines of code. Build and deploy powerful data apps in minutes. &lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1713329458678&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Streamlit Docs&quot; data-og-description=&quot;Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions&quot; data-og-host=&quot;docs.streamlit.io&quot; data-og-source-url=&quot;https://docs.streamlit.io/&quot; data-og-url=&quot;https://docs.streamlit.io/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FcMvG/hyVS8s0JYS/U28NqtMmkiLLKaXpHGmQEK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/d7pPel/hyVS4jP4Hc/T4gIeoao42kKjapL5ohFd0/img.jpg?width=280&amp;amp;height=150&amp;amp;face=0_0_280_150,https://scrap.kakaocdn.net/dn/dvNAng/hyVPUC9OCw/kz5dKJF6kLvnPHsOBDjKF1/img.png?width=362&amp;amp;height=313&amp;amp;face=0_0_362_313&quot;&gt;&lt;a href=&quot;https://docs.streamlit.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.streamlit.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FcMvG/hyVS8s0JYS/U28NqtMmkiLLKaXpHGmQEK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/d7pPel/hyVS4jP4Hc/T4gIeoao42kKjapL5ohFd0/img.jpg?width=280&amp;amp;height=150&amp;amp;face=0_0_280_150,https://scrap.kakaocdn.net/dn/dvNAng/hyVPUC9OCw/kz5dKJF6kLvnPHsOBDjKF1/img.png?width=362&amp;amp;height=313&amp;amp;face=0_0_362_313');&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;Streamlit Docs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.streamlit.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Data Scientist나 AI/ML 엔지니어들이 간단한 코드만 작성하면 동적인 데이터 분석 애플리케이션을 제공할 수 있는 오픈 소스 Python 프레임워크가 바로 오늘의 주제인 Streamlit입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플리케이션을 개발하려고 한다면 HTML, CSS, Javascript 뿐만 아니라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;웹 프레임워크를 모두 고려해야&amp;nbsp; 합니다. 이런 지식이 충분하지 않다면 개발에 어려움을 겪을 수밖에 없는데요.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Streamlit은 Python 코드만 작성하면 데이터 분석 애플리케이션을 생성할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 사전 배경 지식을 상대적으로 많이 요하지 않는다는 점에서 단기간에 개발이 가능하다는 점이 Streamlit의 특징이라고 할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Streamlit의 특징&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Simple and Pythonic&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;616&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UHAFg/btsGH0xyqLQ/vggi9Ftewbk06DaMQFQNvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UHAFg/btsGH0xyqLQ/vggi9Ftewbk06DaMQFQNvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UHAFg/btsGH0xyqLQ/vggi9Ftewbk06DaMQFQNvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUHAFg%2FbtsGH0xyqLQ%2Fvggi9Ftewbk06DaMQFQNvk%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;588&quot; height=&quot;293&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;616&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;간단하고 읽기 쉬운 코드로 구성되어 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;복잡한 배경 지식이 없어도 애플리케이션을 빠르게 생성할 수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Streamlit cloud를 사용할 경우 GitHub 레포지토리에 소스 코드를 업로드하여 웹 상에 본인의 서비스를 배포할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Fast, interactive prototyping&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원하는 대로 애플리케이션의 모양과 기능을 변경할 수 있어 빠르고 상호 작용적인 프로토타입을 생성할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;웹 서비스 형태의 데모를 제작하는데 최적화 되어 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Live editing&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드를 편집하면 그 즉시 애플리케이션이 자동으로 업데이트 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Open-source and free&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Data Integration&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1249&quot; data-origin-height=&quot;611&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckSNSB/btsGFnntgRj/Nzr8O0d2IqbuRA4N4CzZQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckSNSB/btsGFnntgRj/Nzr8O0d2IqbuRA4N4CzZQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckSNSB/btsGFnntgRj/Nzr8O0d2IqbuRA4N4CzZQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckSNSB%2FbtsGFnntgRj%2FNzr8O0d2IqbuRA4N4CzZQk%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;564&quot; height=&quot;276&quot; data-origin-width=&quot;1249&quot; data-origin-height=&quot;611&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Python 코드 기반이기 때문에 Python의 주요 데이터 분석 및 시각화 라이브러리와의 통합이 용이합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 한계점&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;간단한 데모 애플리케이션 생성에는 굉장히 유용한 프레임워크이지만 복잡한 애플리케이션일 경우 프레임워크 디자인에 제한이 있습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;많은 부분을 추상화하여 제공하기 때문에 레이아웃이나 위젯과 같이 디자인 측면의 자유도가 낮습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자와 상호작용할 때마다 전체 스크립트가 다시 실행되는 Streamlit의 로직 특성 상&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;dataset의 크기가 크거나 복잡한 계산이 필요한 경우 성능이 저하될 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Streamlit의 개념 그리고 특징과 한계점에 대해 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠른 시일 내에 Streamlit 테스트 글로 돌아오도록 하겠습니다~&amp;nbsp;&lt;/p&gt;</description>
      <category>TOPIC/Data</category>
      <category>streamlit</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/40</guid>
      <comments>https://with-cloud.tistory.com/40#entry40comment</comments>
      <pubDate>Wed, 17 Apr 2024 13:53:12 +0900</pubDate>
    </item>
    <item>
      <title>Service Mesh란?</title>
      <link>https://with-cloud.tistory.com/39</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요. &lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;오늘은 Service Mesh에 대해 알아보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Service Mesh란?&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdBhCw/btsGColzkXm/8BNyinbuG5GJRDlGCGsKkk/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdBhCw/btsGColzkXm/8BNyinbuG5GJRDlGCGsKkk/tfile.svg&quot; data-alt=&quot;https://istio.io/latest/about/service-mesh/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdBhCw/btsGColzkXm/8BNyinbuG5GJRDlGCGsKkk/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdBhCw%2FbtsGColzkXm%2F8BNyinbuG5GJRDlGCGsKkk%2Ftfile.svg&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;676&quot; height=&quot;443&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;524&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://istio.io/latest/about/service-mesh/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Service Mesh는 마이크로서비스 간 통신이 매시 형태인 것에서 착안된, 마이크로서비스 간의 통신을 나타내는 개념입니다. 이는 여러 서비스 간의 통신을 관리하는 것을 도와줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;소프트웨어를 작은 단위로 나누어 개발하는 방식인 마이크로서비스에서는 각각의 서비스들이 서로 통신하여 기능을 수행하기 때문에 이러한 분산된 통신을 관리해 줄 도구가 필요해집니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Service Mesh는 서로 다른 기능 간의 통신이 원활할 수 있도록 통신을 관리해 주고, 데이터를 안전하게 전송하고 저장할 수 있도록 해줍니다. 또한 서비스들의 동작을 계속해서 모니터링하여 이슈가 발생할 경우 알려줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;일반적으로, Service Mesh는 Kubernetes와 같은 컨테이너 오케스트레이션 환경 내에서 사이드카 형태의 프록시를 배치합니다. 그리고 이러한 프록시를 통해 트래픽 모니터링이나 트래픽 컨트롤을 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;사이드카 형태의 프록시를 통해서 Service Mesh는 기존의 애플리케이션 코드를 수정하지 않고도 서비스 간 통신을 모니터링할 수 있고, 필요한 경우 로깅하여 시스템의 상태를 파악하고 문제를 진단할 수 있게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이러한 Service Mesh를 구현하는 오픈 소스 소프트웨어로는 이스티오(Istio), 링커드(Linkerd), Kuma 등이 있습니다. 그중 이스티오를 사용하여 이러한 Service Mesh를 구현하는 경우가 가장 많으며 아래에서 좀 더 자세히 설명하도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;추가적으로 사이드카 형태에 대해 간단히 알아보고 넘어가겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;사이드카 형태란?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1141&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QdGHz/btsGBejZn6x/KuLOHUG2daPoIKUnCNOTRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QdGHz/btsGBejZn6x/KuLOHUG2daPoIKUnCNOTRk/img.png&quot; data-alt=&quot;https://kubebyexample.com/learning-paths/istio/intro&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QdGHz/btsGBejZn6x/KuLOHUG2daPoIKUnCNOTRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQdGHz%2FbtsGBejZn6x%2FKuLOHUG2daPoIKUnCNOTRk%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;718&quot; height=&quot;287&quot; data-origin-width=&quot;1141&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://kubebyexample.com/learning-paths/istio/intro&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플리케이션 컨테이너와 독립적으로 동작하는 또 하나의 컨테이너를 붙이는 패턴을 의미합니다. 즉, 메인 컨테이너 외 보조적인 기능을 추가하는 서브 컨테이너를 포함하는 패턴이 바로 사이드카 형태입니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플리케이션 컨테이너(메인 컨테이너)와 독립적으로 동작하므로 사이드카 컨테이너에 장애가 발생하더라도 애플리케이션 컨테이너는 영향을 받지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 사이드카 컨테이너를 생성하고, 업데이트하고, 제거해야 하는 경우에도 기존 애플리케이션 컨테이너에 대한 코드는 수정을 할 필요가 없습니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Service Mesh를 구성하는 개별 프록시들은 마이크로서비스 내에서 실행되는 것이 아니라 마이크로서비스의 옆에서, 즉 사이드카 형태로 함께 실행됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Service Mesh를 사용하는 이유는?&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마이크로 서비스는 여러 작은 서비스들로 구성되어 있기 때문에 서비스 간의 통신이 복잡합니다. 따라서 각 서비스 간의 통신을 추상화하여 더 쉽게 관리할 수 있도록 하기 위해 Service Mesh를 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;통신을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;추상화&lt;/b&gt;한다는 것이 정확히 무슨 뜻일까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;추상화라는 의미 자체는 복잡한 세부 사항들 중 핵심적인 개념 또는 기능을 간추려 내는 것을 의미합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;마이크로 서비스는 Service Mesh를 이용하여 각 서비스 간 통신을 추상화 함으로써 개별 서비스 내에 통신 관련 로직을 직접 구현하지 않게 됩니다. 또한 같은 맥락으로 서비스는 다른 서비스의 구체적인 세부 정보를 알 필요가 없어집니다. Service Mesh를 통해 통신하기 때문에 다른 서비스를 신경 쓰지 않고 자신의 로직에만 집중할 수 있게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 외에도 통신 보안이나 모니터링과 같은 기능을 Service Mesh가 제공하기 때문에 개발자가 이에 대해 직접 구현할 필요가 없어집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;또한 Service Mesh는 서비스들의 수가 증가하더라도 쉽게 확장할 수 있도록 구성되어 있습니다. (ex. 사이드카 패턴) 이뿐만 아니라 로드 밸런싱, 트래픽 제어, 오류 처리 등의 기능도 함께 제공하기 때문에 서비스들의 성능과 안정성을 향상하는 역할도 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;서비스 간 통신의 모든 부분을 모니터링할 수 있기 때문에 문제를 손쉽게 인식하고 진단할 수 있으며 장애가 발생한 서비스에 대한 요청을 다시 라우팅 할 수 있도록 해주기 때문에 애플리케이션 복구 능력 역시 향상됩니다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Service Mesh를 사용하지 않을 경우 서비스 간의 통신을 직접 구현하거나 관리해야 하기 때문에 복잡성이 증가할 수 있습니다. 각 서비스마다 다른 방식으로 통신을 관리하게 되면 유지 보수와 디버깅, 그리고 병목 현상과 같은 네트워크 이슈에 대한 트러블 슈팅이 어려워지게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;따라서, Service Mesh는 복잡한 마이크로 서비스 아키텍처에서 필수적인 도구라고 할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. Istio란?&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Istio란 (&lt;a href=&quot;https://istio.io/latest/about/service-mesh/&quot;&gt;https://istio.io/latest/about/service-mesh/&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713146698101&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MBPG8/hyVPNcdUrk/mTnA2s1Pw7MKI1YARkD8Hk/img.png?width=4096&amp;amp;height=2048&amp;amp;face=0_0_4096_2048&quot; data-og-url=&quot;https://istio.io/latest/about/service-mesh/&quot; data-og-source-url=&quot;https://istio.io/latest/about/service-mesh/&quot; data-og-host=&quot;istio.io&quot; data-og-description=&quot;Service mesh.&quot; data-og-title=&quot;The Istio service mesh&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://istio.io/latest/about/service-mesh/&quot; data-source-url=&quot;https://istio.io/latest/about/service-mesh/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MBPG8/hyVPNcdUrk/mTnA2s1Pw7MKI1YARkD8Hk/img.png?width=4096&amp;amp;height=2048&amp;amp;face=0_0_4096_2048');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;The Istio service mesh&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Service mesh.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;istio.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Istio는 기존 분산 애플리케이션에 투명하게 layering 되는 오픈 소스 Service Mesh입니다.&lt;br /&gt;마이크로 서비스들을 보호하고, 연결하고, 모니터링하는 균일하고 효율적인 방법을 제공합니다.&lt;br /&gt;서비스 코드에 대한 최소한의 변경을 통해 또는 서비스 코드 변경 없이 로드 밸런싱, 서비스 간 인증 및 모니터링을 위한 경로(path)가 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Istio는 Control Plane과 Data Plane 이 두 가지 요소로 구성되어 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;먼저 Istio의 Control Plane은 TLS 암호화, ID 기반 인증 및 권한 부여를 통해 클러스터에서 서비스 간 통신을 보호합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 HTTP, gRPC, WebSocket 및 TCP 트래픽에 대한 로드 밸런싱을 제공하고 다양한 라우팅 규칙, 재시도(retries), 장애조치(failover) 등을 통해 트래픽을 세밀하게 제어합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클러스터의 ingress 및 egress를 포함한 클러스터 내의 모든 트래픽에 대해 자동화된 메트릭, 로그 및 추적 기능도 제공합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Data Plane은 서비스 간 통신 자체를 나타냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Service Mesh는 전송되는 트래픽의 유형, 출처를 확인하기 위해 프록시를 사용하여 모든 네트워크 트래픽을 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;정리하자면,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Data Palne은 각 프록시들로 이루어져 config에 따라 트래픽을 관리하는 부분을 의미합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 경우 서비스가 증가하게 되면 프록시 수도 증가하게 됩니다. 프록시가 증가하게 되면 당연히 관리 포인트도 증가하기 때문에 이 부분을 중앙에서 관리할 필요성이 생깁니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;config 값들을 저장하고 각 프록시들에게 이에 대해 전달하는 것이 Control Plane의 역할입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Istio는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Envoy 프록시&lt;/b&gt;를 사용합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1856&quot; data-origin-height=&quot;1006&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U7HiS/btsGDB5C08G/vs6oMOO00F92TS1AkoST1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U7HiS/btsGDB5C08G/vs6oMOO00F92TS1AkoST1k/img.png&quot; data-alt=&quot;https://www.cncf.io/projects/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U7HiS/btsGDB5C08G/vs6oMOO00F92TS1AkoST1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU7HiS%2FbtsGDB5C08G%2Fvs6oMOO00F92TS1AkoST1k%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;782&quot; height=&quot;424&quot; data-origin-width=&quot;1856&quot; data-origin-height=&quot;1006&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.cncf.io/projects/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Envoy 프록시는 Lyft사에서 개발한 프록시로 MSA 내 각 서비스를 위해 설계된 고성능 분산 프록시입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;기존 L3, L4 기반의 프록시들로는 다양한 요건들을 처리하기 힘들기 때문에&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;MSA 환경에서는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;L7 기능을 갖춘 프록시의 필요성이 대두되었습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Envoy 프록시는 L7 기반의 프록시로 HTTP, TCP, gRPC까지 다양한 프로토콜을 지원합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞서 말한 Istio가 Service Mesh로서 제공하는 기능이 모두 Istio의 메인 프록시인 Envoy를 통해 제공된다고 보시면 됩니다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이상으로 이번 글을 마무리하겠습니다.  &lt;/p&gt;</description>
      <category>TOPIC/DevOps</category>
      <category>Envoy</category>
      <category>istio</category>
      <category>Kubernetes</category>
      <category>service mesh</category>
      <category>서비스 매시</category>
      <category>이스티오</category>
      <category>쿠버네티스</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/39</guid>
      <comments>https://with-cloud.tistory.com/39#entry39comment</comments>
      <pubDate>Mon, 15 Apr 2024 11:05:37 +0900</pubDate>
    </item>
    <item>
      <title>마이크로서비스 아키텍처(MSA)란?</title>
      <link>https://with-cloud.tistory.com/38</link>
      <description>&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;개념적인 내용도 다루고 넘어가면 좋을 것 같아 오늘은 간단하게 마이크로서비스 아키텍처가 무엇인지에 대해 알아보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;쿠버네티스를 공부하면서 많이 들어본 개념인데 이 개념을 탄탄하게 정리한 적은 없는 거 같아 늘 마음에 걸렸기 때문에... &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 마이크로서비스 아키텍처(MSA)란?&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HMf6M/btsGwumxNpy/Q4YZ2LLO1ZYAhqAAeuV1q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HMf6M/btsGwumxNpy/Q4YZ2LLO1ZYAhqAAeuV1q1/img.png&quot; data-alt=&quot;출처 : https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/microservices&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HMf6M/btsGwumxNpy/Q4YZ2LLO1ZYAhqAAeuV1q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHMf6M%2FbtsGwumxNpy%2FQ4YZ2LLO1ZYAhqAAeuV1q1%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;695&quot; height=&quot;281&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/microservices&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마이크로서비스 아키텍처(MSA)는 시스템의 개별 기능을 서비스 단위로 잘라 서비스끼리 gRPC나 RESTful API 등으로 연계하여 시스템 전체를 구성하는 느슨한 결합(loose coupling) 아키텍처입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체 시스템을 여러 개의 작고 독립적인 부분으로 나누는 방식으로, 각 부분들은 특정한 업무나 기능을 담당하고 서로 통신하여 전체 시스템을 이루게 됩니다. 이러한 작고 독립적인 부분을 마이크로서비스라고 부르며, 이들은 독립적으로 배포하고 확장시키고 유지 보수 할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 더 유연하고 확장성이 높은 시스템을 구성할 수 있으며 장애 발생 시 전체 시스템에 미치는 영향을 줄일 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참고로, 마이크로서비스 아키텍처와 반대되는 개념은, 시스템 전체를 하나의 서비스로 구성한&amp;nbsp;모놀리식(monolithic) 아키텍처입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 마이크로서비스 아키텍처(MSA)의 장점과 단점&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;장점은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 서비스마다 프로그래밍 언어나 프레임워크 등의 기술을 자유롭게 선정할 수 있습니다. 각 서비스가 독립적으로 개발되는 마이크로서비스 아키텍처에서는 서비스별&lt;span style=&quot;text-align: left;&quot;&gt;로 다른 기술 스택을 사용하는 것을 용이하게 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;서비스별로 개발 규모나 성능을 확장시킬 수 있고 사용되는 코드가 상대적으로 적기 때문에 유연성이 높아지고 변경 사항을 롤백하는 것도 쉬워집니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 기능을 업데이트하거나 수정할 때, 해당 기능만 빠르게 배포할 수 있기 때문에 전체 시스템의 불필요한 재배포를 최소화할 수 있고 더 빠르게 개발할 수 있습니다. 즉, 서비스별로 독립적인 업데이트가 가능하여 릴리즈 사이클을 단축시킬 수 있으며 장애 영향 범위도 해당 서비스에 한정시킬 수 있게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쿠버네티스는 이러한 마이크로서비스 아키텍처와 잘 맞습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마이크로서비스 아키텍처를 따르는 시스템을 쿠버네티스에 배포하게 되면, 한 개의 마이크로서비스를 한 개의 이미지로 개발하고 이를 한 개의 Deployment로 배포할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 서비스 당 각기 다른 이미지 및 Deployment를 사용하기 때문에 독립적으로 개발할 수 있으며 더 유연하게 확장할 수 있게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단점은 다음과 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 개의 독립적인 마이크로서비스를 구축하고 배포하고 처리하는 것은 복잡도가 높고 구현하기도 어렵습니다. 각 서비스가 어떻게 작동하는지, 다른 서비스들과 어떻게 통신하고 조화를 이루어야 하는지 이해하는 과정이 필요할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 프로그래밍 언어나 프레임워크를 사용하기 때문에 다른 마이크로서비스에서 사용했던 코드를 재사용하는 것이 어려울 수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체 시스템 측면에서 볼 때, 네트워크 트래픽이 증가한다는 단점이 있을 수 있습니다. 각 서비스가 모두 독립적이기 때문에 서로 네트워크를 통해 통신해야 하는데, 이는 트래픽을 증가시키고 불필요한 레이턴시를 발생하게 할 수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하나의 시스템을 여러 마이크로서비스로 적절하게 분리하기 어려울 수도 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시스템 전체에 대한 모니터링이 어렵습니다. 여러 마이크로서비스가 하나의 시스템을 구성하고 있기 때문에 각 서비스들의 의존성을 확인하거나 서비스 간 트래픽 레이턴시 등을 확인하기 어렵습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 작은 규모의 프로젝트거나, 하나의 기술 스택을 사용하여 개발이 가능한 경우 마이크로서비스 아키텍처를 도입하는 것은 오히려 추가적인 복잡성을 초래할 수 있기 때문에 도입 시 신중한 고려가 필요합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 서비스 간 통신이 많이 발생하는 서비스일 경우 성능에 문제가 발생할 수 있기 때문에 마이크로서비스가 적절하지 않을 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참고로, 상기 언급한 단점들 중 시스템 전체에 대한 모니터링이 어려운 점을 '서비스 매시'로 해결할 수 있습니다. 이에 대해서는 다음 글에서 다뤄보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TOPIC/DevOps</category>
      <category>DevOps</category>
      <category>Kubernetes</category>
      <category>Microservice Architecture</category>
      <category>msa</category>
      <category>마이크로서비스 아키텍처</category>
      <category>쿠버네티스</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/38</guid>
      <comments>https://with-cloud.tistory.com/38#entry38comment</comments>
      <pubDate>Thu, 11 Apr 2024 18:12:59 +0900</pubDate>
    </item>
    <item>
      <title>Jenkins - GitHub Private하게 연결하기 (2)</title>
      <link>https://with-cloud.tistory.com/37</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;호다닥 이어서 테스트 내용을 정리해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;이전 글 :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://with-cloud.tistory.com/36&quot;&gt;https://with-cloud.tistory.com/36&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712721489021&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;Jenkins - GitHub Private하게 연결하기 (1)&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 오늘은 지난 글 (Windows에 Jenkins 설치하기)에 이어 Jenkins와 GitHub를 Private하게 연결하고 Build Pipeline을 구성하는 과정을 알아보도록 하겠습니다. Windows에 Jenkins 설치하기 안&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/36&quot; data-og-url=&quot;https://with-cloud.tistory.com/36&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cozzfo/hyVMZD2U57/lOU7RaNhsuP2iH16YPBhNK/img.png?width=800&amp;amp;height=281&amp;amp;face=0_0_800_281,https://scrap.kakaocdn.net/dn/woMmP/hyVMRzen59/huO0Pq9ZK9BCxd2KEuChzK/img.png?width=1174&amp;amp;height=748&amp;amp;face=0_0_1174_748&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/36&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/36&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cozzfo/hyVMZD2U57/lOU7RaNhsuP2iH16YPBhNK/img.png?width=800&amp;amp;height=281&amp;amp;face=0_0_800_281,https://scrap.kakaocdn.net/dn/woMmP/hyVMRzen59/huO0Pq9ZK9BCxd2KEuChzK/img.png?width=1174&amp;amp;height=748&amp;amp;face=0_0_1174_748');&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;Jenkins - GitHub Private하게 연결하기 (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 오늘은 지난 글 (Windows에 Jenkins 설치하기)에 이어 Jenkins와 GitHub를 Private하게 연결하고 Build Pipeline을 구성하는 과정을 알아보도록 하겠습니다. Windows에 Jenkins 설치하기 안&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 3. GitHub Webhook Trigger 생성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 이제, GitHub로 이동하여 Webhook Trigger를 생성해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상단의&amp;nbsp;[⚙️&amp;nbsp;Settings]&amp;nbsp;&amp;gt;&amp;nbsp;[Webhooks]&amp;nbsp;&amp;gt;&amp;nbsp;[Add&amp;nbsp;webhook]&amp;nbsp;버튼을&amp;nbsp;클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;513&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuB7qG/btsGuutCzDc/nrxWpUM8J8a2lM2TKZQYU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuB7qG/btsGuutCzDc/nrxWpUM8J8a2lM2TKZQYU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuB7qG/btsGuutCzDc/nrxWpUM8J8a2lM2TKZQYU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuB7qG%2FbtsGuutCzDc%2FnrxWpUM8J8a2lM2TKZQYU0%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;685&quot; height=&quot;379&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;513&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Payload URL에 Jenkins Admin page의 주소를 입력한 후 그 뒤에 &lt;b&gt;/github-webhook/&lt;/b&gt;을 추가해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWyQCn/btsGwewr053/kBZ7mkyec9rWZMKHyAB0GK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWyQCn/btsGwewr053/kBZ7mkyec9rWZMKHyAB0GK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWyQCn/btsGwewr053/kBZ7mkyec9rWZMKHyAB0GK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWyQCn%2FbtsGwewr053%2FkBZ7mkyec9rWZMKHyAB0GK%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;737&quot; height=&quot;409&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;514&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [Add Webhook]을 클릭하여 Webhook 설정을 마무리합니다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 과연 정상적으로 Webhook 설정이 완료 되었을까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 답은&lt;/span&gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다. 그렇다면,&amp;nbsp;이유는 뭘까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Webhook을 날리는 주체는 &lt;b&gt;GitHub&lt;/b&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, GitHub는 자신이 Webhook을 날릴 대상이 누구인지를 알고 있어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇기 때문에 Payload URL에 가상 머신의 private ip를 입력해 줄 경우 GitHub는 대상을 못 찾게 되는 것이죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 지금부터 GitHub가 무사히 Jenkins Admin page를 찾을 수 있도록 Azure Load Balancer를 구성해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Load Balancer가 갑자기 왜 튀어나오는지 의문을 가질 수도 있으실 텐데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 Azure Load Balancer는 &lt;b&gt;SNAT&lt;/b&gt;를 해주는 역할이라고 보시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub가 Load Balancer로 트래픽을 보내면 Load Balancer는 Source ip(GitHub의 ip)를 Load Balancer의 public ip로 변환합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해, GitHub는 Jenkins Server의 private ip 주소를 몰라도 webhook을 트리거할 수 있게 됩니다.&lt;/span&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;&lt;span style=&quot;color: #000000;&quot;&gt; 3.1 Load Balancer 생성 &lt;/span&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;span style=&quot;color: #000000;&quot;&gt; [기본 사항] 탭&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 형식은 [공개]로 변경해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;686&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DNCU2/btsGwPQumkH/fH0qJP47zautuBWtZVuzhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DNCU2/btsGwPQumkH/fH0qJP47zautuBWtZVuzhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DNCU2/btsGwPQumkH/fH0qJP47zautuBWtZVuzhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDNCU2%2FbtsGwPQumkH%2FfH0qJP47zautuBWtZVuzhk%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;617&quot; height=&quot;548&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;686&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [프런트 엔드 IP 구성] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;757&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4baVY/btsGuHlP00S/GeYXW7Ege0qo24ULxt4M7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4baVY/btsGuHlP00S/GeYXW7Ege0qo24ULxt4M7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4baVY/btsGuHlP00S/GeYXW7Ege0qo24ULxt4M7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4baVY%2FbtsGuHlP00S%2FGeYXW7Ege0qo24ULxt4M7K%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;489&quot; height=&quot;636&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;757&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [백 엔드 풀] 탭 &lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 가상 네트워크를 선택하고 [+ 추가] 버튼을 클릭하여 Jenkins Server의 nic를 선택합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MMYHf/btsGtTtxLrj/2QYo5ceAMkTxIDK7SCcHS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MMYHf/btsGtTtxLrj/2QYo5ceAMkTxIDK7SCcHS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MMYHf/btsGtTtxLrj/2QYo5ceAMkTxIDK7SCcHS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMMYHf%2FbtsGtTtxLrj%2F2QYo5ceAMkTxIDK7SCcHS0%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;695&quot; height=&quot;274&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;453&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [인바운드 규칙] 탭&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc5i44/btsGu24n969/V3ouKKl015nNMjDX3QEPU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc5i44/btsGu24n969/V3ouKKl015nNMjDX3QEPU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc5i44/btsGu24n969/V3ouKKl015nNMjDX3QEPU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc5i44%2FbtsGu24n969%2FV3ouKKl015nNMjDX3QEPU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;328&quot; height=&quot;506&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 인바운드 NAT 규칙을 추가합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해, Azure Load Balancer의 프런트 엔드 IP:8080으로 들어오는 트래픽은 포트 8080을 통해 백 엔드 풀로 전달되게 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 인바운드 규칙에 대해 간단하게 설명하고 넘어가겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인바운드 NAT 규칙이란?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 선택한 IP 주소 및 포트 조합으로 전송된 인바운드 트래픽을 특정 가상 머신에 전달하는 규칙을 말합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실 인바운드 NAT까지만 추가를 해주면 될 줄 알았으나, 하기와 같은 에러가 발생했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1925&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6rsgk/btsGvpyBx4B/4U3Fgd0R2djzhvkEbuKVIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6rsgk/btsGvpyBx4B/4U3Fgd0R2djzhvkEbuKVIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6rsgk/btsGvpyBx4B/4U3Fgd0R2djzhvkEbuKVIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6rsgk%2FbtsGvpyBx4B%2F4U3Fgd0R2djzhvkEbuKVIK%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;758&quot; height=&quot;208&quot; data-origin-width=&quot;1925&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Failed to connect to repository : Command &quot;git.exe ls-remote -h -- https://github.com/{account name}/test.git HEAD&quot; returned status code 128: stdout: &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;stderr: fatal: unable to access 'https://github.com/{account name}/test.git/': Failed to connect to github.com port 443 after 21185 ms: Couldn't connect to server&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;곰곰히 생각해 보니, 지금 구성으로는 Jenkins에서 GitHub로 트래픽이 나갈 수 없었습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇기에 상기 에러가 발생하는 것이었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, Jenkins가 해당 URL과 통신을 할 수 있도록 아웃바운드 규칙도 생성해 주도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면, 아웃바운드 규칙은 또 무엇일까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 아웃바운드 규칙이란? &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 가상 머신에서 외부로 향하는 트래픽을 관리하는 데 사용되는 규칙입니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신에서 생성된 트래픽을 관리하고 이를 외부로 라우팅하는 데 도움을 주는 역할을 합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Jenkins가 설치된 가상 머신에서 GitHub 레포지토리로 트래픽을 보내야 하는데 아웃바운드 규칙이 없을 경우 이러한 트래픽이 GitHub까지 도달하지 못하게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 하기 과정을 통해 아웃바운드 규칙을 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt; [아웃바운드 규칙] 탭 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byvCW1/btsGwfoK0CD/KDzAWc3OPk93i9XGA76cTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byvCW1/btsGwfoK0CD/KDzAWc3OPk93i9XGA76cTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byvCW1/btsGwfoK0CD/KDzAWc3OPk93i9XGA76cTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyvCW1%2FbtsGwfoK0CD%2FKDzAWc3OPk93i9XGA76cTk%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;454&quot; height=&quot;606&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;738&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt; [검토 + 만들기] 탭을 클릭하여 유효성 검사 후 Load Balancer 생성을 진행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.2 Windows 가상 머신 방화벽 규칙 생성&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Local PC에서 Load Balancer의 public ip 그리고 포트 8080을 사용해 Jenkins의 Admin page에 접근하면 해당 트래픽은 가상 머신의 private ip 그리고 포트 8080으로 전달됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 Load Balancer는 내부 네트워크로 트래픽을 전달하게 되는 것이기 때문에, 이 트래픽은 가상 머신 입장에서는 외부에서 들어온 것으로 인식되게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 가상 머신의 서버 방화벽에서 해당 포트에 대한 접근을 허용하는 규칙을 생성해 주어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 머신에서 Windows 로고 키를 클릭한 후 firewall을 검색합니다. &lt;b&gt;Windows Defender Firewall with Advanced Security&lt;/b&gt;를 클릭합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1145&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7fHx8/btsGu0FtGKP/1vsuqPDYKd0kVQLO6KfKik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7fHx8/btsGu0FtGKP/1vsuqPDYKd0kVQLO6KfKik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7fHx8/btsGu0FtGKP/1vsuqPDYKd0kVQLO6KfKik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7fHx8%2FbtsGu0FtGKP%2F1vsuqPDYKd0kVQLO6KfKik%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;644&quot; height=&quot;298&quot; data-origin-width=&quot;1145&quot; data-origin-height=&quot;530&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Inbound Rules]를 클릭한 후 우측의 [New Rule] 버튼을 클릭하여 새로운 Inbound Rule을 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EXyRE/btsGxCQL87M/Am7kQomKPDyTbX5dgSn2r1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EXyRE/btsGxCQL87M/Am7kQomKPDyTbX5dgSn2r1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EXyRE/btsGxCQL87M/Am7kQomKPDyTbX5dgSn2r1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEXyRE%2FbtsGxCQL87M%2FAm7kQomKPDyTbX5dgSn2r1%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;783&quot; height=&quot;173&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;345&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Rule Type은 &amp;ldquo;Port&amp;rdquo;를 선택합니다. (Jenkins가 돌아가는 8080 포트를 열어줘야 하기 때문입니다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR1EeJ/btsGtS9eFiR/c7AesIffXUopmxwhmRmsaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR1EeJ/btsGtS9eFiR/c7AesIffXUopmxwhmRmsaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR1EeJ/btsGtS9eFiR/c7AesIffXUopmxwhmRmsaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR1EeJ%2FbtsGtS9eFiR%2Fc7AesIffXUopmxwhmRmsaK%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;310&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;386&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Specific local ports를 선택한 후 8080을 입력합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1069&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/utyjS/btsGxz0PXLe/X57513HdFiUZTocXGMyoDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/utyjS/btsGxz0PXLe/X57513HdFiUZTocXGMyoDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/utyjS/btsGxz0PXLe/X57513HdFiUZTocXGMyoDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FutyjS%2FbtsGxz0PXLe%2FX57513HdFiUZTocXGMyoDK%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;604&quot; height=&quot;269&quot; data-origin-width=&quot;1069&quot; data-origin-height=&quot;476&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;나머지는 Default 값을 유지한 후 이름을 지정해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1069&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFY3V5/btsGuZzQwRb/4LR5tpF88rAS2ju4TkkAmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFY3V5/btsGuZzQwRb/4LR5tpF88rAS2ju4TkkAmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFY3V5/btsGuZzQwRb/4LR5tpF88rAS2ju4TkkAmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFY3V5%2FbtsGuZzQwRb%2F4LR5tpF88rAS2ju4TkkAmK%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;609&quot; height=&quot;271&quot; data-origin-width=&quot;1069&quot; data-origin-height=&quot;476&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Finish 버튼을 클릭하여 Inbound Rule 생성을 완료합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Load Balancer의 public ip:8080으로 접근하면 하기 스크린샷과 같이 Jenkins Admin Page가 정상적으로 뜨는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;608&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/okJ1D/btsGxB5pSi1/2uoZjrmmJck9k8fCQBjHn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/okJ1D/btsGxB5pSi1/2uoZjrmmJck9k8fCQBjHn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/okJ1D/btsGxB5pSi1/2uoZjrmmJck9k8fCQBjHn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FokJ1D%2FbtsGxB5pSi1%2F2uoZjrmmJck9k8fCQBjHn0%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;698&quot; height=&quot;346&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;608&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.3 GitHub Webhook Trigger 생성&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 이제 Payload URL을 변경하러 GitHub로 이동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기&amp;nbsp;생성한&amp;nbsp;Webhook에&amp;nbsp;대해&amp;nbsp;[Edit]&amp;nbsp;버튼을&amp;nbsp;클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bauYSR/btsGwCYh7wm/echTcmexcjD7roDKMuKqS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bauYSR/btsGwCYh7wm/echTcmexcjD7roDKMuKqS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bauYSR/btsGwCYh7wm/echTcmexcjD7roDKMuKqS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbauYSR%2FbtsGwCYh7wm%2FechTcmexcjD7roDKMuKqS1%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;790&quot; height=&quot;184&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;184&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Payload&amp;nbsp;URL에서&amp;nbsp;가상&amp;nbsp;머신의&amp;nbsp;private&amp;nbsp;ip를&amp;nbsp;Load&amp;nbsp;Balancer의&amp;nbsp;public&amp;nbsp;ip로&amp;nbsp;변경한&amp;nbsp;후&amp;nbsp;[Update&amp;nbsp;webhook]을&amp;nbsp;클릭하여&amp;nbsp;변경&amp;nbsp;사항을&amp;nbsp;저장합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7Quou/btsGwxJifJq/0uatop3lVD5cqu7iLlD9F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7Quou/btsGwxJifJq/0uatop3lVD5cqu7iLlD9F1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7Quou/btsGwxJifJq/0uatop3lVD5cqu7iLlD9F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7Quou%2FbtsGwxJifJq%2F0uatop3lVD5cqu7iLlD9F1%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;639&quot; height=&quot;303&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;374&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그&amp;nbsp;후&amp;nbsp;webhook을&amp;nbsp;클릭하여&amp;nbsp;Recent&amp;nbsp;Deliveries&amp;nbsp;탭에서&amp;nbsp;[Redeliver]&amp;nbsp;버튼을&amp;nbsp;클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VZRBq/btsGwL1JWw9/n25cmOhfCTr91SYWJM831k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VZRBq/btsGwL1JWw9/n25cmOhfCTr91SYWJM831k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VZRBq/btsGwL1JWw9/n25cmOhfCTr91SYWJM831k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVZRBq%2FbtsGwL1JWw9%2Fn25cmOhfCTr91SYWJM831k%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;795&quot; height=&quot;311&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;311&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하기와&amp;nbsp;같이&amp;nbsp;✅&amp;nbsp;표시가&amp;nbsp;출력되면&amp;nbsp;webhook이&amp;nbsp;정상적으로&amp;nbsp;추가된&amp;nbsp;것입니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o7dBG/btsGvULVcTg/LCK48Q4mCjhjnZXEspyE0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o7dBG/btsGvULVcTg/LCK48Q4mCjhjnZXEspyE0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o7dBG/btsGvULVcTg/LCK48Q4mCjhjnZXEspyE0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo7dBG%2FbtsGvULVcTg%2FLCK48Q4mCjhjnZXEspyE0K%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;632&quot; height=&quot;147&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. Jenkins Pipeline 실행하기 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 구성이 끝났으니 지금부터는 Jenkins Pipeline을 실행해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.1 소스 코드 구성 확인 &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 각 Pipeline의 Jenkinsfile은 앞서 확인을 했으니 본 테스트의 Flow를 간단하게 정리한 후 소스 코드에 대해 확인해 보겠습니다. &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1️⃣ 첫 번째 Build Pipeline &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; test라는 레포지토리의 Source Code를 clone 해 옴 (저장 위치 확인 목적) &amp;rarr; 두 번째 Build Pipeline 트리거 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2️⃣ 두 번째 Build Pipeline &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; result라는 레포지토리의 README.md 파일에 첫 번째 Build Pipeline의 BUILD_NUMBER를 저장 &amp;rarr; Git Push를 통해 GitHub에 소스 코드 업로드&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 위와 같은 Flow는 굉장히 간단하고 Pipeline으로서의 의미는 크게 없긴 하지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 Build Pipeline에서 다른 Pipeline을 트리거하고, built-in 변수를 사용하여 GitHub에 소스 코드를 업로드 하는 과정을 테스트하고자 작성하였음을 말씀 드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 result 레포지토리의 README.md 파일은 하기와 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpip4A/btsGvxbXksU/Yl9y46sZDF3dfdiKjJP5m0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpip4A/btsGvxbXksU/Yl9y46sZDF3dfdiKjJP5m0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpip4A/btsGvxbXksU/Yl9y46sZDF3dfdiKjJP5m0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcpip4A%2FbtsGvxbXksU%2FYl9y46sZDF3dfdiKjJP5m0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;633&quot; height=&quot;292&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;636&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.2 Jenkins Pipeline Build&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Local PC에서 test 레포지토리의 소스 코드 중 일부를 변경한 후 git push를 진행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxL8Tw/btsGx0jGXCW/dulrGHVQxJtd7bJSowZjlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxL8Tw/btsGx0jGXCW/dulrGHVQxJtd7bJSowZjlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxL8Tw/btsGx0jGXCW/dulrGHVQxJtd7bJSowZjlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxL8Tw%2FbtsGx0jGXCW%2FdulrGHVQxJtd7bJSowZjlk%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;597&quot; height=&quot;278&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;367&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 Pipeline이 자동으로 트리거 됨을 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1375&quot; data-origin-height=&quot;983&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzFibz/btsGwbsYODg/1o9jc2CSDGk5haOozYmLG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzFibz/btsGwbsYODg/1o9jc2CSDGk5haOozYmLG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzFibz/btsGwbsYODg/1o9jc2CSDGk5haOozYmLG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzFibz%2FbtsGwbsYODg%2F1o9jc2CSDGk5haOozYmLG0%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;647&quot; height=&quot;463&quot; data-origin-width=&quot;1375&quot; data-origin-height=&quot;983&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt; &quot;Trigger Second Pipeline&quot;&lt;/b&gt; stage가 실행되면서 두 번째 Pipeline이 트리거 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1547&quot; data-origin-height=&quot;977&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8d8KX/btsGwcZJMUb/OkcWXy6X01cf9jeDwaed2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8d8KX/btsGwcZJMUb/OkcWXy6X01cf9jeDwaed2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8d8KX/btsGwcZJMUb/OkcWXy6X01cf9jeDwaed2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8d8KX%2FbtsGwcZJMUb%2FOkcWXy6X01cf9jeDwaed2k%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;668&quot; height=&quot;422&quot; data-origin-width=&quot;1547&quot; data-origin-height=&quot;977&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;result 레포지토리를 확인한 결과 README.md 파일에 하기 스크린샷과 같이 Build Number에 대한 값이 반영된 것을 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbromd/btsGx1CT1AT/lh5GvAWeSKpDZm38XkWpaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbromd/btsGx1CT1AT/lh5GvAWeSKpDZm38XkWpaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbromd/btsGx1CT1AT/lh5GvAWeSKpDZm38XkWpaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbromd%2FbtsGx1CT1AT%2Flh5GvAWeSKpDZm38XkWpaK%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;646&quot; height=&quot;244&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;391&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;추가적인 테스트를 위해 첫 번째 Build Pipeline을 수행했다가 강제 중지한 후 다시 Build를 진행해 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우, 두 번째 Pipeline은 실행되지 않을 것이기 때문에 Build Number는 2가 되겠지만, 첫 번째 Pipeline은 Build Number가 3이 되기 때문에 &lt;b&gt;Build number from first pipeline : 3&lt;/b&gt;이 result 레포지토리에 반영될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다시 Local PC에서 코드 일부를 변경한 후 Commit을 진행합니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;369&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l8mm8/btsGxDvoNB7/LuJ0EuiLg4lD0MeDBbZLqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l8mm8/btsGxDvoNB7/LuJ0EuiLg4lD0MeDBbZLqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l8mm8/btsGxDvoNB7/LuJ0EuiLg4lD0MeDBbZLqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl8mm8%2FbtsGxDvoNB7%2FLuJ0EuiLg4lD0MeDBbZLqk%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;614&quot; height=&quot;286&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;369&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 Pipeline이 동작하면 중간에 중지합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lP18D/btsGuLPtl23/4mkIAnsvdS5zdCZLy81xz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lP18D/btsGuLPtl23/4mkIAnsvdS5zdCZLy81xz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lP18D/btsGuLPtl23/4mkIAnsvdS5zdCZLy81xz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlP18D%2FbtsGuLPtl23%2F4mkIAnsvdS5zdCZLy81xz1%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;623&quot; height=&quot;423&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;633&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다시 Local PC에서 코드를 수정한 후 Commit을 진행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 Pipeline이 자동으로 트리거되고 두 번째 Pipeline도 성공적으로 트리거가 되는 것을 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;904&quot; data-origin-height=&quot;673&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb1NYN/btsGvpk5sO7/44mwYCnTPYvY7DsQS1on80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb1NYN/btsGvpk5sO7/44mwYCnTPYvY7DsQS1on80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb1NYN/btsGvpk5sO7/44mwYCnTPYvY7DsQS1on80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb1NYN%2FbtsGvpk5sO7%2F44mwYCnTPYvY7DsQS1on80%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;668&quot; height=&quot;497&quot; data-origin-width=&quot;904&quot; data-origin-height=&quot;673&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 번째 Pipeline도 성공적으로 완료된 것을 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DM98Y/btsGwJ3VPba/sfs0pPyWMPA4Uf80I4VDKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DM98Y/btsGwJ3VPba/sfs0pPyWMPA4Uf80I4VDKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DM98Y/btsGwJ3VPba/sfs0pPyWMPA4Uf80I4VDKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDM98Y%2FbtsGwJ3VPba%2Fsfs0pPyWMPA4Uf80I4VDKK%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;674&quot; height=&quot;391&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;593&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GitHub의 result 레포지토리에서 README.md 파일에 저장된 값을 확인합니다. &lt;br /&gt;저장된 값이 &lt;b&gt;&lt;span data-token-index=&quot;1&quot;&gt;Build number from first pipeline: 3&lt;/span&gt;&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-origin-width=&quot;1013&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGuP2y/btsGvs2PYJS/imCMphnsVkVzbasX5cm6u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGuP2y/btsGvs2PYJS/imCMphnsVkVzbasX5cm6u1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGuP2y/btsGvs2PYJS/imCMphnsVkVzbasX5cm6u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGuP2y%2FbtsGvs2PYJS%2FimCMphnsVkVzbasX5cm6u1%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;640&quot; height=&quot;247&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;391&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.3 초기 Working Directory 확인&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkins Pipeline이 돌면서 Git Clone 해오는 소스 코드는 어디에 저장이 될까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;확인하고자 하는 Jenkins Project를 클릭한 후 Build 내역 중 하나를 클릭하면 하기 스크린샷과 같이 [Workspaces]라는 탭이 보이게 됩니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KOKcq/btsGuuNXWD8/pmVi2MzKUFNKwXzFGZUs90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KOKcq/btsGuuNXWD8/pmVi2MzKUFNKwXzFGZUs90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KOKcq/btsGuuNXWD8/pmVi2MzKUFNKwXzFGZUs90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKOKcq%2FbtsGuuNXWD8%2FpmVi2MzKUFNKwXzFGZUs90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;645&quot; height=&quot;449&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;552&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Workspaces] 탭에서 초기 Working Directory를 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PJuEw/btsGwEoiuio/ZtGndhYK8taaE2Kz2vGKWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PJuEw/btsGwEoiuio/ZtGndhYK8taaE2Kz2vGKWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PJuEw/btsGwEoiuio/ZtGndhYK8taaE2Kz2vGKWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPJuEw%2FbtsGwEoiuio%2FZtGndhYK8taaE2Kz2vGKWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683&quot; height=&quot;157&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 Windows 가상 머신에서 저 경로로 이동하면 다음과 같이 소스 코드가 저장되어 있는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dt1kFs/btsGvwRFGRO/HmCoyLGbKAjOoXPiIkJo70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dt1kFs/btsGvwRFGRO/HmCoyLGbKAjOoXPiIkJo70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dt1kFs/btsGvwRFGRO/HmCoyLGbKAjOoXPiIkJo70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdt1kFs%2FbtsGvwRFGRO%2FHmCoyLGbKAjOoXPiIkJo70%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;629&quot; height=&quot;330&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면 이러한 Working Directory를 변경할 수 있을까요?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;답은&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; YES&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 먼저 Jenkins의 Home Directory(C:\ProgramData\Jenkins\.jenkins)로 이동한 후 config.xml 이라는 이름의 파일을 엽니다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DnRaO/btsGx2Poumy/C9vwPk12Ccju7cpK4yZOc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DnRaO/btsGx2Poumy/C9vwPk12Ccju7cpK4yZOc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DnRaO/btsGx2Poumy/C9vwPk12Ccju7cpK4yZOc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDnRaO%2FbtsGx2Poumy%2FC9vwPk12Ccju7cpK4yZOc1%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;580&quot; height=&quot;388&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;502&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Home Directory는 [Manage Jenkins] &amp;gt; [System]에서 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMUSUj/btsGuNT4RkL/OIaRirQCdltiuQfHsTSEP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMUSUj/btsGuNT4RkL/OIaRirQCdltiuQfHsTSEP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMUSUj/btsGuNT4RkL/OIaRirQCdltiuQfHsTSEP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMUSUj%2FbtsGuNT4RkL%2FOIaRirQCdltiuQfHsTSEP1%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;549&quot; height=&quot;255&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;293&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드에서 workspaceDir이라는 부분을 찾습니다. 본 테스트에서는 workspace directory 하위에 hyeintest라는 이름의 새로운 directory를 생성한 후 그 안에 코드를 저장해 보도록 하겠습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpiEqx/btsGwMNbp1r/LMZsPKK7xsTg3Fu4IhKQW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpiEqx/btsGwMNbp1r/LMZsPKK7xsTg3Fu4IhKQW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpiEqx/btsGwMNbp1r/LMZsPKK7xsTg3Fu4IhKQW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpiEqx%2FbtsGwMNbp1r%2FLMZsPKK7xsTg3Fu4IhKQW1%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;617&quot; height=&quot;165&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;191&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: #ee2323;&quot;&gt;&lt;b&gt;※ 상기 과정을 진행한 후에는 Jenkins Server를 재기동해야 합니다.※&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 번째 Pipeline의 Jenkinsfile에 WORKSPACE라는 built-in 변수 값을 README.md 파일에 적는 부분을 추가해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1585&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nf6B4/btsGvULZmPC/pBPkZa6RyhwVZ7DY6SQ3V0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nf6B4/btsGvULZmPC/pBPkZa6RyhwVZ7DY6SQ3V0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nf6B4/btsGvULZmPC/pBPkZa6RyhwVZ7DY6SQ3V0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnf6B4%2FbtsGvULZmPC%2FpBPkZa6RyhwVZ7DY6SQ3V0%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;788&quot; height=&quot;110&quot; data-origin-width=&quot;1585&quot; data-origin-height=&quot;222&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫 번째 Pipeline이 실행되도록 test 레포지토리의 내용을 수정한 후 commit을 진행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자동으로 첫 번째 Pipeline이 실행되고 이어서 두 번째 Pipeline이 트리거됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgnJ2f/btsGwhGWiZB/h38kYDySDTmjLjLR6XKKTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgnJ2f/btsGwhGWiZB/h38kYDySDTmjLjLR6XKKTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgnJ2f/btsGwhGWiZB/h38kYDySDTmjLjLR6XKKTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgnJ2f%2FbtsGwhGWiZB%2Fh38kYDySDTmjLjLR6XKKTK%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;703&quot; height=&quot;447&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;642&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;1131&quot; data-origin-height=&quot;596&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYPA3E/btsGuZUaTy0/L6e8jq750Kmx6ujkCX2bVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYPA3E/btsGuZUaTy0/L6e8jq750Kmx6ujkCX2bVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYPA3E/btsGuZUaTy0/L6e8jq750Kmx6ujkCX2bVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYPA3E%2FbtsGuZUaTy0%2FL6e8jq750Kmx6ujkCX2bVk%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;691&quot; height=&quot;364&quot; data-origin-width=&quot;1131&quot; data-origin-height=&quot;596&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Build 번호를 클릭한 후 Workspaces를 클릭합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZXj2n/btsGwttqdt4/D441Ua19YyTl8DVydUyukk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZXj2n/btsGwttqdt4/D441Ua19YyTl8DVydUyukk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZXj2n/btsGwttqdt4/D441Ua19YyTl8DVydUyukk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZXj2n%2FbtsGwttqdt4%2FD441Ua19YyTl8DVydUyukk%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;305&quot; height=&quot;140&quot; data-origin-width=&quot;342&quot; data-origin-height=&quot;157&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하기 스크린샷과 같이 Working Directory의 경로가 변경된 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r4Gjo/btsGu0ld8TG/xcia83MlbSNtOFkeEp83C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r4Gjo/btsGu0ld8TG/xcia83MlbSNtOFkeEp83C1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r4Gjo/btsGu0ld8TG/xcia83MlbSNtOFkeEp83C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr4Gjo%2FbtsGu0ld8TG%2Fxcia83MlbSNtOFkeEp83C1%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;763&quot; height=&quot;205&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 파일 탐색기에서 해당 경로로 이동할 시 하기와 같이 지정해준 Working Directory에 소스코드가 저장되어 있는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/njenz/btsGwsBiyHe/P4EEDPYgdQ9RkG1L8zf2oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/njenz/btsGwsBiyHe/P4EEDPYgdQ9RkG1L8zf2oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/njenz/btsGwsBiyHe/P4EEDPYgdQ9RkG1L8zf2oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnjenz%2FbtsGwsBiyHe%2FP4EEDPYgdQ9RkG1L8zf2oK%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;675&quot; height=&quot;244&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;294&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;result 레포지토리의 README.md 파일에도 첫 번째 Pipeline의 Build Number와 현재 Working Directory에 대한 절대 경로가 제대로 출력된 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dP01kJ/btsGu3hXZCs/BZWa6Qq0nJshkvdky3p9uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dP01kJ/btsGu3hXZCs/BZWa6Qq0nJshkvdky3p9uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dP01kJ/btsGu3hXZCs/BZWa6Qq0nJshkvdky3p9uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdP01kJ%2FbtsGu3hXZCs%2FBZWa6Qq0nJshkvdky3p9uK%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;753&quot; height=&quot;367&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;674&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 하여 드디어 Windows VM에 Jenkins를 설치하고 Jenkins와 GitHub를 private하게 연결한 후 Build Pipeline까지 돌려 보는 대장정을 마무리하였습니다!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음에는 개념적인 내용으로 찾아오도록 하겠습니다.  &lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/DevOps</category>
      <category>Azure</category>
      <category>build pipeline</category>
      <category>CI/CD</category>
      <category>DevOps</category>
      <category>Jenkins</category>
      <category>windows</category>
      <category>젠킨스</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/37</guid>
      <comments>https://with-cloud.tistory.com/37#entry37comment</comments>
      <pubDate>Wed, 10 Apr 2024 16:52:21 +0900</pubDate>
    </item>
    <item>
      <title>Jenkins - GitHub Private하게 연결하기 (1)</title>
      <link>https://with-cloud.tistory.com/36</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘은 지난 글 (&lt;/span&gt;&lt;a href=&quot;https://with-cloud.tistory.com/33%20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Windows에 Jenkins 설치하기&lt;/a&gt;)&lt;span style=&quot;color: #000000;&quot;&gt;에 이어 Jenkins와 GitHub를 Private하게 연결하고 Build Pipeline을 구성하는 과정을 알아보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712719264589&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;Windows에 Jenkins 설치하기&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 오늘은 Windows에 Jenkins를 설치하는 방법에 대해 알아보겠습니다. 문득 Jenkins는 Linux에만 설치를 해봤다는 생각이 들어서 이번 글을 적게 되었습니다. 이번 글에서는 Jenkins&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/33&quot; data-og-url=&quot;https://with-cloud.tistory.com/33&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/daqszd/hyVMMxV3jU/VwIAsIjoHheiBB0dViqwLk/img.png?width=722&amp;amp;height=371&amp;amp;face=0_0_722_371,https://scrap.kakaocdn.net/dn/MEH4r/hyVMPalyhS/rzGnzw4TDKW6sIQ9ZVv2d0/img.png?width=722&amp;amp;height=371&amp;amp;face=0_0_722_371,https://scrap.kakaocdn.net/dn/s1UUJ/hyVMUQeH99/C1OW4Yt4UwhE2Nul0onfpk/img.png?width=680&amp;amp;height=769&amp;amp;face=0_0_680_769&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/33&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/33&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/daqszd/hyVMMxV3jU/VwIAsIjoHheiBB0dViqwLk/img.png?width=722&amp;amp;height=371&amp;amp;face=0_0_722_371,https://scrap.kakaocdn.net/dn/MEH4r/hyVMPalyhS/rzGnzw4TDKW6sIQ9ZVv2d0/img.png?width=722&amp;amp;height=371&amp;amp;face=0_0_722_371,https://scrap.kakaocdn.net/dn/s1UUJ/hyVMUQeH99/C1OW4Yt4UwhE2Nul0onfpk/img.png?width=680&amp;amp;height=769&amp;amp;face=0_0_680_769');&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;Windows에 Jenkins 설치하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 오늘은 Windows에 Jenkins를 설치하는 방법에 대해 알아보겠습니다. 문득 Jenkins는 Linux에만 설치를 해봤다는 생각이 들어서 이번 글을 적게 되었습니다. 이번 글에서는 Jenkins&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Windows는 어떤 디렉토리를 초기 working directory로 바라보는지&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;private ip만 붙어 있는 가상 머신의 경우 어떻게 GitHub와 통신하는지&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 두 가지 궁금함으로 이번 테스트를 시작하게 되었는데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 오래 걸릴 테스트가 아니었음에도 불구하고 Jenkinsfile을 무한 루프 돌게 만들어 버리는 바람에 시간이 다소 걸렸습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Spoke 가상 머신에 Git 설치하기 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가장 먼저 Spoke 가상 머신에 Git을 설치해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇지 않으면 아래에서 설명할 에러가 발생할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://git-scm.com/download/win&quot;&gt;https://git-scm.com/download/win&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 이동하여 Windows용 Git을 다운로드 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(default 값을 사용하여 설치를 진행하면 됩니다.)&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712719598079&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Git - Downloading Package&quot; data-og-description=&quot;Download for Windows Click here to download the latest (2.44.0) 32-bit version of Git for Windows. This is the most recent maintained build. It was released about 2 months ago, on 2024-02-23. Other Git for Windows downloads Standalone Installer 32-bit Git &quot; data-og-host=&quot;git-scm.com&quot; data-og-source-url=&quot;https://git-scm.com/download/win&quot; data-og-url=&quot;https://git-scm.com/download/win&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://git-scm.com/download/win&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://git-scm.com/download/win&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Git - Downloading Package&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download for Windows Click here to download the latest (2.44.0) 32-bit version of Git for Windows. This is the most recent maintained build. It was released about 2 months ago, on 2024-02-23. Other Git for Windows downloads Standalone Installer 32-bit Git&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;git-scm.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1429&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKEfhq/btsGuqdy4mX/CzXdVdk3QI3A2s9V1vKNsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKEfhq/btsGuqdy4mX/CzXdVdk3QI3A2s9V1vKNsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKEfhq/btsGuqdy4mX/CzXdVdk3QI3A2s9V1vKNsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKEfhq%2FbtsGuqdy4mX%2FCzXdVdk3QI3A2s9V1vKNsk%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;718&quot; height=&quot;252&quot; data-origin-width=&quot;1429&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 2. Jenkins Pipeline 생성 &lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 2.1 Jenkins Pipeline 생성 - 첫 번째 Pipeline &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 테스트용 Jenkins Pipeline을 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 테스트에서 Build Pipeline은 두 개를 생성할 예정입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(원하는 결과값을 내기 위해서는 두 개로 Pipeline을 분리하는 게 최선이었는데 혹시 좋은 팁 있으면 알려주시면 감사하겠습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫 번째 파이프라인은 두 번째 파이프라인의 트리거 용으로 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Build가 잘 되는지만 확인하기 위해서는 이렇게 구성할 필요가 없으나 &lt;b&gt;BUILD_NUMBER&lt;/b&gt;라는 Jenkins의 built-in 변수를 사용해 보고자 두 개의 Pipeline으로 구성하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Jenkins 관리 페이지에서 좌측 상단의 [+ New Item]을 클릭합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;513&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pUeqE/btsGu3hURvC/36vKadzXICbUHPZalAZYYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pUeqE/btsGu3hURvC/36vKadzXICbUHPZalAZYYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pUeqE/btsGu3hURvC/36vKadzXICbUHPZalAZYYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpUeqE%2FbtsGu3hURvC%2F36vKadzXICbUHPZalAZYYk%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;405&quot; height=&quot;296&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;513&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Project 이름을 입력하고 Project 타입은 [Pipeline]을 선택합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b58NQK/btsGvqEijzI/N1pXB5RnQTlsUSRqlyG770/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b58NQK/btsGvqEijzI/N1pXB5RnQTlsUSRqlyG770/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b58NQK/btsGvqEijzI/N1pXB5RnQTlsUSRqlyG770/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb58NQK%2FbtsGvqEijzI%2FN1pXB5RnQTlsUSRqlyG770%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;613&quot; height=&quot;391&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;748&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Configure의 General 탭에서 Build Triggers 옵션 중 &lt;i&gt;&quot;GitHub hook trigger for GITScm polling&quot;&lt;/i&gt;을 선택합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;589&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIoI83/btsGvu0B3wV/k0asJTdFKFnQJVodKf0yhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIoI83/btsGvu0B3wV/k0asJTdFKFnQJVodKf0yhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIoI83/btsGvu0B3wV/k0asJTdFKFnQJVodKf0yhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIoI83%2FbtsGvu0B3wV%2Fk0asJTdFKFnQJVodKf0yhk%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;656&quot; height=&quot;356&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;589&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 step으로 넘어가기 전 &lt;i&gt;GitHub hook trigger for GITScm polling &lt;/i&gt;옵션이 무엇인지 알아보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;GitHub&amp;nbsp;hook&amp;nbsp;trigger&amp;nbsp;for&amp;nbsp;GITScm&amp;nbsp;polling&lt;/b&gt;이란?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub는 이벤트가 발생할 때 webhook을 트리거합니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;webhook은 이벤트 발생시 지정된 URL로 HTTP POST 요청을 보내는 기능을 말합니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkins는 이러한 webhook을 통해 GitHub의 변경 사항을 감지합니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkins는 변경 사항이 없어도 주기적으로 저장소를 확인하고 변경 사항이 있는지 여부를 확인하게 되는데 이때 GITScm polling을 사용하게 됩니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이것이 바로 변경 사항이 발생하지 않아도 Jenkins가 build를 트리거할 수 있는 이유입니다. &lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Configure의 Pipeline 탭에서 Definition을 &amp;ldquo;Pipeline script from SCM&amp;rdquo;으로 변경합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 그 후, SCM에 대해 &amp;ldquo;Git&amp;rdquo;을 선택합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmhZtc/btsGvtHnicb/tw63494BKRT7nBPU485pW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmhZtc/btsGvtHnicb/tw63494BKRT7nBPU485pW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmhZtc/btsGvtHnicb/tw63494BKRT7nBPU485pW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmhZtc%2FbtsGvtHnicb%2Ftw63494BKRT7nBPU485pW1%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;614&quot; height=&quot;284&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;429&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Repository에 GitHub의 URL 주소를 입력합니다. (본 테스트의 경우 기존에 작성해 둔 Terraform 코드와 관련된 Repository를 사용합니다.)&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; GitHub로 이동해 [&amp;lt; &amp;gt; Code] 버튼을 클릭하여 HTTPS 형식의 GitHub URL 주소를 복사해 옵니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mb94y/btsGuYt8RpX/HeR5CD4rNtfkUBGv83rzyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mb94y/btsGuYt8RpX/HeR5CD4rNtfkUBGv83rzyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mb94y/btsGuYt8RpX/HeR5CD4rNtfkUBGv83rzyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMb94y%2FbtsGuYt8RpX%2FHeR5CD4rNtfkUBGv83rzyK%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;693&quot; height=&quot;329&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;439&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 다시 Jenkins로 돌아와 복사한 Repository URL을 붙여 넣은 후 GitHub 계정 이름과 PAT를 사용하여 Credentials을 생성합니다. &lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; PAT 발급 관련 설명은&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://with-cloud.tistory.com/19#2._GitHub_-_Jenkins_연결&quot;&gt;https://with-cloud.tistory.com/19#2._GitHub_-_Jenkins_연결&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 참고해 주세요.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1894&quot; data-origin-height=&quot;851&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJrHlS/btsGuL9LtlS/eI31y8pXitCEBlGstLO2h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJrHlS/btsGuL9LtlS/eI31y8pXitCEBlGstLO2h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJrHlS/btsGuL9LtlS/eI31y8pXitCEBlGstLO2h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJrHlS%2FbtsGuL9LtlS%2FeI31y8pXitCEBlGstLO2h0%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;798&quot; height=&quot;359&quot; data-origin-width=&quot;1894&quot; data-origin-height=&quot;851&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 마지막으로 Configure의 Pipeline 탭에서 Script Path를 확인합니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; GitHub Repository 내 Jenkinsfile의 위치를 확인합니다. GitHub Repository의 가장 상단에 Jenkinsfile이 존재할 경우 default 경로를 변경할 필요는 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwVUGZ/btsGusWTD2j/KHn7DkWOQuKXFbc0JZ8v5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwVUGZ/btsGusWTD2j/KHn7DkWOQuKXFbc0JZ8v5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwVUGZ/btsGusWTD2j/KHn7DkWOQuKXFbc0JZ8v5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwVUGZ%2FbtsGusWTD2j%2FKHn7DkWOQuKXFbc0JZ8v5K%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;659&quot; height=&quot;319&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;438&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Project 설정이 완료되었으면 [Save] 버튼을 클릭하여 변경 사항을 저장합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.2 Jenkins Pipeline 생성 - 두 번째 Pipeline&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;Project&amp;nbsp;이름을&amp;nbsp;입력하고&amp;nbsp;Project&amp;nbsp;타입은&amp;nbsp;[Pipeline]을&amp;nbsp;선택합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1183&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ObrQ8/btsGwxWOzbw/Yse4JcwTM0zAiwxUTky41K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ObrQ8/btsGwxWOzbw/Yse4JcwTM0zAiwxUTky41K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ObrQ8/btsGwxWOzbw/Yse4JcwTM0zAiwxUTky41K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FObrQ8%2FbtsGwxWOzbw%2FYse4JcwTM0zAiwxUTky41K%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;572&quot; height=&quot;357&quot; data-origin-width=&quot;1183&quot; data-origin-height=&quot;738&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 첫 번째 Pipeline에 의해 트리거 되어야 하기 때문에 다른 설정은 하지 않고 Pipeline 부분만 설정을 진행해 줍니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Repository URL은 결과값이 저장될 GitHub 레포지토리를 지정해 줍니다. (Credentials의 경우 이전에 설정한 것을 사용해도 무방합니다.)&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u24ug/btsGwNZqB2W/J8A5TDIgJpWmDQA2t46kvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u24ug/btsGwNZqB2W/J8A5TDIgJpWmDQA2t46kvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u24ug/btsGwNZqB2W/J8A5TDIgJpWmDQA2t46kvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu24ug%2FbtsGwNZqB2W%2FJ8A5TDIgJpWmDQA2t46kvK%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;596&quot; height=&quot;359&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;467&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.3 Jenkinsfile 구성 확인&amp;nbsp;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;첫&amp;nbsp;번째&amp;nbsp;Jenkins&amp;nbsp;Pipeline의&amp;nbsp;Jenkinsfile은&amp;nbsp;하기와&amp;nbsp;같습니다. &lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CAMWe/btsGuNmetma/QrkbBy7UKvWct7BdszaVM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CAMWe/btsGuNmetma/QrkbBy7UKvWct7BdszaVM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CAMWe/btsGuNmetma/QrkbBy7UKvWct7BdszaVM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCAMWe%2FbtsGuNmetma%2FQrkbBy7UKvWct7BdszaVM1%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;603&quot; height=&quot;379&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;test라는 이름의 GitHub 레포지토리를 clone해 오는 stage와 두 번째 Pipeline을 트리거하는 stage로 이루어져 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BUILD_NUMBER라는 built-in 변수를 parameters를 사용하여 두 번째 Pipeline에 전달하게 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 두 번째 Jenkins Pipeline의 Jenkinsfile은 하기와 같습니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1686&quot; data-origin-height=&quot;1093&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bbd8Q/btsGxCQLw54/Pmr8GntrlcL24yUCYeQ0KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bbd8Q/btsGxCQLw54/Pmr8GntrlcL24yUCYeQ0KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bbd8Q/btsGxCQLw54/Pmr8GntrlcL24yUCYeQ0KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBbd8Q%2FbtsGxCQLw54%2FPmr8GntrlcL24yUCYeQ0KK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;645&quot; height=&quot;418&quot; data-origin-width=&quot;1686&quot; data-origin-height=&quot;1093&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;environment block에서 첫 번째 Pipeline의 Build 번호를 FIRST_PIPELINE_BUILD_NUMBER라는 변수에 저장합니다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Build&amp;nbsp;stage에서&amp;nbsp;README.md&amp;nbsp;파일에&amp;nbsp;현재&amp;nbsp;Pipeline의&amp;nbsp;Build&amp;nbsp;번호를&amp;nbsp;추가하고&amp;nbsp;Commit&amp;nbsp;and&amp;nbsp;Push&amp;nbsp;stage에서&amp;nbsp;이를&amp;nbsp;result라는&amp;nbsp;이름의&amp;nbsp;GitHub&amp;nbsp;레포지토리에&amp;nbsp;push합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.4 Jenkinsfile 구성 확인&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞서 말씀 드렸듯이, Pipeline 구성 시 Pipeline 탭의 Repository URL 입력 부분에서 하기와 같은 이슈가 발생할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1942&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GzBl3/btsGw1wvhDl/1ztqi7kNmlFvwRaZdK70S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GzBl3/btsGw1wvhDl/1ztqi7kNmlFvwRaZdK70S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GzBl3/btsGw1wvhDl/1ztqi7kNmlFvwRaZdK70S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGzBl3%2FbtsGw1wvhDl%2F1ztqi7kNmlFvwRaZdK70S1%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;703&quot; height=&quot;152&quot; data-origin-width=&quot;1942&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Failed to connect to repository : Error performing git command: git.exe ls-remote -h https://github.com/{계정 이름}/test.git HEAD&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같은 에러가 발생하는 이유는 서버에 Git이 설치 되어 있지 않기 때문에 발생하는 문제이므로 1번 과정과 같이 Git을 서버에 설치한 후 Jenkins를 다시 시작해 주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins를 다시 시작하는 방법은 아래와 같습니다. (Windows 기준)&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;윈도우&amp;nbsp;로고&amp;nbsp;키를&amp;nbsp;마우스&amp;nbsp;우클릭한&amp;nbsp;후&amp;nbsp;Task&amp;nbsp;Manager를&amp;nbsp;클릭합니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2GFY4/btsGtS9ehYc/tJe8yqk20OnPMC18pPREJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2GFY4/btsGtS9ehYc/tJe8yqk20OnPMC18pPREJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2GFY4/btsGtS9ehYc/tJe8yqk20OnPMC18pPREJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2GFY4%2FbtsGtS9ehYc%2FtJe8yqk20OnPMC18pPREJK%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;182&quot; height=&quot;256&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;425&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Services 탭으로 이동하여 Jenkins를 검색합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1043&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGA1ln/btsGu3Ca4Ah/jElpH91tECuO77OO922AC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGA1ln/btsGu3Ca4Ah/jElpH91tECuO77OO922AC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGA1ln/btsGu3Ca4Ah/jElpH91tECuO77OO922AC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGA1ln%2FbtsGu3Ca4Ah%2FjElpH91tECuO77OO922AC1%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;661&quot; height=&quot;351&quot; data-origin-width=&quot;1043&quot; data-origin-height=&quot;554&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Jenkins Service를 마우스 우클릭한 후 [Restart]를 눌러 Jenkins를 다시 실행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZ8V1C/btsGwhGRJu1/Hp7SgX4owIrR45ecSkz7Yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZ8V1C/btsGwhGRJu1/Hp7SgX4owIrR45ecSkz7Yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZ8V1C/btsGwhGRJu1/Hp7SgX4owIrR45ecSkz7Yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZ8V1C%2FbtsGwhGRJu1%2FHp7SgX4owIrR45ecSkz7Yk%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;428&quot; height=&quot;237&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Pipeline을 생성하는 부분까지 알아보았는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 GitHub Webhook Trigger를 생성하고 Jenkins Pipeline을 실행하는 과정에 대해 다뤄보겠습니다.  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TOPIC/DevOps</category>
      <category>Azure</category>
      <category>git</category>
      <category>Github</category>
      <category>Jenkins</category>
      <category>Jenkins Pipeline</category>
      <category>가상 머신</category>
      <category>젠킨스</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/36</guid>
      <comments>https://with-cloud.tistory.com/36#entry36comment</comments>
      <pubDate>Wed, 10 Apr 2024 12:47:40 +0900</pubDate>
    </item>
    <item>
      <title>Azure Cloud Shell에 Private하게 접근하기 (2)</title>
      <link>https://with-cloud.tistory.com/35</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;오늘은 지난 글에 이어 Azure Relay를 사용하여 Azure Cloud Shell을 가상 네트워크에 배포하는 방법에 대해 알아보겠습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;지난 글 : &lt;a href=&quot;https://with-cloud.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/31&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712100483872&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;Azure Cloud Shell에 Private하게 접근하기 (1)&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 오늘은 Azure Cloud Shell에 Private하게 접근하는 방법에 대해 알아보겠습니다.   결과부터 말하자면, Local PC에서 Cloud Shell에 접근하는 것 자체를 제어하는 것은 하기에 적은 &quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/31&quot; data-og-url=&quot;https://with-cloud.tistory.com/31&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/s7vX1/hyVGQg1CbY/Jmw9u9N0ylMxaa2tjb1jq0/img.png?width=800&amp;amp;height=273&amp;amp;face=0_0_800_273,https://scrap.kakaocdn.net/dn/UHbE4/hyVJVVkM1j/MqSnDnvEI48gFKjyetaFIk/img.png?width=800&amp;amp;height=273&amp;amp;face=0_0_800_273,https://scrap.kakaocdn.net/dn/K7Ngi/hyVJ0oOMsc/30o1R5i4XIP6Rt7YaRRHr1/img.png?width=1117&amp;amp;height=896&amp;amp;face=0_0_1117_896&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/31&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/s7vX1/hyVGQg1CbY/Jmw9u9N0ylMxaa2tjb1jq0/img.png?width=800&amp;amp;height=273&amp;amp;face=0_0_800_273,https://scrap.kakaocdn.net/dn/UHbE4/hyVJVVkM1j/MqSnDnvEI48gFKjyetaFIk/img.png?width=800&amp;amp;height=273&amp;amp;face=0_0_800_273,https://scrap.kakaocdn.net/dn/K7Ngi/hyVJ0oOMsc/30o1R5i4XIP6Rt7YaRRHr1/img.png?width=1117&amp;amp;height=896&amp;amp;face=0_0_1117_896');&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;Azure Cloud Shell에 Private하게 접근하기 (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 오늘은 Azure Cloud Shell에 Private하게 접근하는 방법에 대해 알아보겠습니다.   결과부터 말하자면, Local PC에서 Cloud Shell에 접근하는 것 자체를 제어하는 것은 하기에 적은&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 3. 가상 네트워크에서 Cloud Shell 사용하기 - Azure Relay&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;※ 3번에서 진행되는 리소스는 &lt;b&gt;Southeast Asia&lt;/b&gt;에 배포합니다. Korea Central로 region 지정 시 오류가 발생합니다. ※&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.1 Azure Relay란?&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 Azure Relay가 무엇인지부터 확인하고 넘어가도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Relay는 클라우드와 온프레미스 서비스가 서로 연결될 수 있는 지점을 제공하는 Azure의 서비스입니다.&amp;nbsp;&lt;br /&gt;만약, 온프레미스에 있는 서비스가 클라우드 구성 요소와 통신해야 하지만 VPN 또는 ExpressRoute와 같이 온프레미스와 클라우드 간 사설 네트워크 망을 구축하거나, 방화벽을 통해 특정 포트를 여는 방식을 사용하고자 하지 않을 경우 Azure Relay를 사용할 수 있습니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.2 사전 리소스 생성&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 템플릿을 사용하여 가상 네트워크에 Cloud Shell을 배포하기 전에 사전에 생성해야 하는 리소스를 배포하고 필요한 데이터를 확인해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[체크리스트]&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ 가상 네트워크 생성&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅&amp;nbsp;Azure Container Instance OID 확인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅&amp;nbsp;Azure Relay 네임스페이스 생성&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅&amp;nbsp;NSG 생성&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저, 가상 네트워크를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서브넷의 경우 컨테이너 서브넷, 릴레이 서브넷, 스토리지 서브넷이 필요합니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&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;span style=&quot;color: #000000;&quot;&gt; [기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1141&quot; data-origin-height=&quot;905&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5l7vw/btsGkuZ5qBe/IRDxLq7Xo6G5voeREkxO41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5l7vw/btsGkuZ5qBe/IRDxLq7Xo6G5voeREkxO41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5l7vw/btsGkuZ5qBe/IRDxLq7Xo6G5voeREkxO41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5l7vw%2FbtsGkuZ5qBe%2FIRDxLq7Xo6G5voeREkxO41%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;609&quot; height=&quot;483&quot; data-origin-width=&quot;1141&quot; data-origin-height=&quot;905&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [IP 주소] 탭 &lt;i&gt;(optional)&lt;/i&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 각 서브넷의 이름과 대역을 메모해 둡니다. (ARM Template에서 생성해 줘도 됩니다.)&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;953&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MGMSN/btsGjQP6WRA/bf0Z19Hhx7cgRLmvmnkrw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MGMSN/btsGjQP6WRA/bf0Z19Hhx7cgRLmvmnkrw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MGMSN/btsGjQP6WRA/bf0Z19Hhx7cgRLmvmnkrw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMGMSN%2FbtsGjQP6WRA%2Fbf0Z19Hhx7cgRLmvmnkrw0%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;685&quot; height=&quot;580&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;953&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [검토 + 만들기] 탭을 클릭하여 유효성 검사 후 가상 네트워크 생성을 진행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음으로, Azure Container Instance OID를 확인합니다. &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;span style=&quot;color: #000000;&quot;&gt; [Microsoft Entra ID] &amp;gt; [개요] &amp;gt; &amp;ldquo;azure container instance service&amp;rdquo; 검색&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZIy2y/btsGjLgXYS4/E1Jc4OXGbpYouOJfo9eoG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZIy2y/btsGjLgXYS4/E1Jc4OXGbpYouOJfo9eoG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZIy2y/btsGjLgXYS4/E1Jc4OXGbpYouOJfo9eoG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZIy2y%2FbtsGjLgXYS4%2FE1Jc4OXGbpYouOJfo9eoG0%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;700&quot; height=&quot;180&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;418&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [개체 ID]를 복사한 후 메모해 둡니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZQGbA/btsGjDKdoTm/ATUDECfwCnAckw3qEyQkzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZQGbA/btsGjDKdoTm/ATUDECfwCnAckw3qEyQkzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZQGbA/btsGjDKdoTm/ATUDECfwCnAckw3qEyQkzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZQGbA%2FbtsGjDKdoTm%2FATUDECfwCnAckw3qEyQkzK%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;533&quot; height=&quot;281&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Azure Relay 네임스페이스를 생성합니다.&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;span style=&quot;color: #000000;&quot;&gt; [기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PPHrj/btsGjZMO4lR/KUX8yt2WIqRfei8XoFso70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PPHrj/btsGjZMO4lR/KUX8yt2WIqRfei8XoFso70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PPHrj/btsGjZMO4lR/KUX8yt2WIqRfei8XoFso70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPPHrj%2FbtsGjZMO4lR%2FKUX8yt2WIqRfei8XoFso70%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;597&quot; height=&quot;386&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;718&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [검토 + 만들기] 탭을 클릭하여 유효성 검사 후 Relay 생성을 진행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; NSG를 생성합니다.&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;span style=&quot;color: #000000;&quot;&gt; [기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;541&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kygun/btsGjJXLH89/loqoMDsVkHLypl8yCqBQC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kygun/btsGjJXLH89/loqoMDsVkHLypl8yCqBQC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kygun/btsGjJXLH89/loqoMDsVkHLypl8yCqBQC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKygun%2FbtsGjJXLH89%2FloqoMDsVkHLypl8yCqBQC1%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;606&quot; height=&quot;288&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;541&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [검토 + 만들기] 탭을 클릭하여 유효성 검사 후 NSG 생성을 진행합니다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.3 템플릿을 사용하여 가상 네트워크에 Cloud Shell 배포&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ARM Template을 사용하여 가상 네트워크에서 Cloud Shell 리소스를 생성합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/samples/azure/azure-quickstart-templates/cloud-shell-vnet/&quot;&gt;https://learn.microsoft.com/ko-kr/samples/azure/azure-quickstart-templates/cloud-shell-vnet/&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하기 스크린샷과 같이 [Deploy to Azure] 버튼을 클릭하여 템플릿 페이지로 이동합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/meMei/btsGh33XDWy/knvJOkkHptcKoZh5rVdpz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/meMei/btsGh33XDWy/knvJOkkHptcKoZh5rVdpz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/meMei/btsGh33XDWy/knvJOkkHptcKoZh5rVdpz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmeMei%2FbtsGh33XDWy%2FknvJOkkHptcKoZh5rVdpz0%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;453&quot; height=&quot;286&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;375&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 하기 스크린샷과 같이 배포에 필요한 정보를 입력합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;741&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXfvHl/btsGjFgYIvN/PUk842xnFh0KMAIUNOjTpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXfvHl/btsGjFgYIvN/PUk842xnFh0KMAIUNOjTpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXfvHl/btsGjFgYIvN/PUk842xnFh0KMAIUNOjTpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXfvHl%2FbtsGjFgYIvN%2FPUk842xnFh0KMAIUNOjTpk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;532&quot; height=&quot;552&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;741&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;716&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDU1sN/btsGhQw0tOl/POBEZzA5WkXSKlHJt88x40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDU1sN/btsGhQw0tOl/POBEZzA5WkXSKlHJt88x40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDU1sN/btsGhQw0tOl/POBEZzA5WkXSKlHJt88x40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDU1sN%2FbtsGhQw0tOl%2FPOBEZzA5WkXSKlHJt88x40%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;530&quot; height=&quot;200&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [검토 + 만들기] 탭을 클릭하여 ARM Template을 통한 배포를 진행합니다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.4 템플릿을 사용하여 가상 네트워크 내에 Storage Account 생성&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ARM Template을 사용하여 가상 네트워크에서 Cloud Shell 리소스를 생성합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/samples/azure/azure-quickstart-templates/cloud-shell-vnet-storage/&quot;&gt;https://learn.microsoft.com/ko-kr/samples/azure/azure-quickstart-templates/cloud-shell-vnet-storage/&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하기 스크린샷과 같이 [Deploy to Azure] 버튼을 클릭하여 템플릿 페이지로 이동합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c09HaF/btsGlyAT4uj/aRLlUMAcqlKEsAYCkukGBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c09HaF/btsGlyAT4uj/aRLlUMAcqlKEsAYCkukGBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c09HaF/btsGlyAT4uj/aRLlUMAcqlKEsAYCkukGBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc09HaF%2FbtsGlyAT4uj%2FaRLlUMAcqlKEsAYCkukGBK%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;438&quot; height=&quot;228&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;324&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 하기 스크린샷과 같이 배포에 필요한 정보를 입력합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;767&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwWFfp/btsGlfH9ps5/AHM9ql6wKGjo5QPqK6U3Hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwWFfp/btsGlfH9ps5/AHM9ql6wKGjo5QPqK6U3Hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwWFfp/btsGlfH9ps5/AHM9ql6wKGjo5QPqK6U3Hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwWFfp%2FbtsGlfH9ps5%2FAHM9ql6wKGjo5QPqK6U3Hk%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;510&quot; height=&quot;547&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;767&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [검토 + 만들기] 탭을 클릭하여 ARM Template을 통한 배포를 진행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.5 가상 네트워크를 사용하도록 Cloud Shell 구성 - Local PC&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 배포가 완료된 후 사용자 별 Private Cloud Shell 인스턴스를 사용하도록 구성을 변경해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Cloud Shell을 실행한 후 ⚙️ 버튼을 클릭하여 [사용자 설정 다시 설정] 버튼을 클릭합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKg95x/btsGizhepPU/DH0tqT0qY5qpAE9IveF8aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKg95x/btsGizhepPU/DH0tqT0qY5qpAE9IveF8aK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKg95x/btsGizhepPU/DH0tqT0qY5qpAE9IveF8aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKg95x%2FbtsGizhepPU%2FDH0tqT0qY5qpAE9IveF8aK%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;395&quot; height=&quot;197&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;267&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 사용자 설정 다시 설정 창이 표시되면 [초기화]를 클릭합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bka7Cm/btsGjYG8Rrc/vGWIXxrHF4mb0Dtk4NUezK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bka7Cm/btsGjYG8Rrc/vGWIXxrHF4mb0Dtk4NUezK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bka7Cm/btsGjYG8Rrc/vGWIXxrHF4mb0Dtk4NUezK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbka7Cm%2FbtsGjYG8Rrc%2FvGWIXxrHF4mb0Dtk4NUezK%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;593&quot; height=&quot;174&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;242&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Azure Cloud Shell 시작 창이 표시되면 [Bash]를 클릭합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C62Tx/btsGhRJwJi1/qkANDNPxP60uoUQL6Fn5JK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C62Tx/btsGhRJwJi1/qkANDNPxP60uoUQL6Fn5JK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C62Tx/btsGhRJwJi1/qkANDNPxP60uoUQL6Fn5JK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC62Tx%2FbtsGhRJwJi1%2FqkANDNPxP60uoUQL6Fn5JK%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;200&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;271&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 스토리지와의 연결을 위해 하기 스크린샷과 같이 VNET 격리 설정을 진행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1087&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mNvem/btsGizO1ZDe/gtegaBzGdgvVSH00E9lBPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mNvem/btsGizO1ZDe/gtegaBzGdgvVSH00E9lBPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mNvem/btsGizO1ZDe/gtegaBzGdgvVSH00E9lBPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmNvem%2FbtsGizO1ZDe%2FgtegaBzGdgvVSH00E9lBPk%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;712&quot; height=&quot;169&quot; data-origin-width=&quot;1087&quot; data-origin-height=&quot;258&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;1077&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSDUWy/btsGlhlFAx1/dqxkMtqHhrAwLWg91H3vpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSDUWy/btsGlhlFAx1/dqxkMtqHhrAwLWg91H3vpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSDUWy/btsGlhlFAx1/dqxkMtqHhrAwLWg91H3vpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSDUWy%2FbtsGlhlFAx1%2FdqxkMtqHhrAwLWg91H3vpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;708&quot; height=&quot;125&quot; data-origin-width=&quot;1077&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 하기 스크린샷과 같이 Virtual Network에 있는 Cloud Shell에 요청을 보낸 후 Cloud Shell에 연결되는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1356&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uvj86/btsGmgtADQc/GZkysApZnYp86OowMJJ131/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uvj86/btsGmgtADQc/GZkysApZnYp86OowMJJ131/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uvj86/btsGmgtADQc/GZkysApZnYp86OowMJJ131/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUvj86%2FbtsGmgtADQc%2FGZkysApZnYp86OowMJJ131%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;700&quot; height=&quot;306&quot; data-origin-width=&quot;1356&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약, Cloud Shell에서 ifconfig를 날리면 어떻게 될까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하기와 같은 ip가 출력됩니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD6ZI1/btsGiShbd9c/OUHsd46uGb6LDEJTMeKkN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD6ZI1/btsGiShbd9c/OUHsd46uGb6LDEJTMeKkN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD6ZI1/btsGiShbd9c/OUHsd46uGb6LDEJTMeKkN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD6ZI1%2FbtsGiShbd9c%2FOUHsd46uGb6LDEJTMeKkN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;569&quot; height=&quot;375&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 vnet-cs-hyein이라는 이름의 가상 네트워크 내 존재하는 snet-con이라는 이름의 서브넷에 속해 있는 ip입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 Cloud Shell이 가상 네트워크 내에 잘 격리되어 있는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 Azure Relay를 확인해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Azure Relay] &amp;gt; [엔터티] &amp;gt; [하이브리드 연결]로 이동하면 연결이 1개 생성되어 있는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o03ie/btsGkTllnfM/mhL3wiUKU8ekpdTbK08UC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o03ie/btsGkTllnfM/mhL3wiUKU8ekpdTbK08UC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o03ie/btsGkTllnfM/mhL3wiUKU8ekpdTbK08UC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo03ie%2FbtsGkTllnfM%2FmhL3wiUKU8ekpdTbK08UC0%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;675&quot; height=&quot;235&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;235&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면 하이브리드 연결은 무엇일까요?&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하이브리드 연결은 웹 소켓 또는 HTTP(S)를 통해 요청을 보내고 응답을 받을 수 있도록 하는 연결 기능입니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쉽게 말하자면 요청을 보내고 받는 각각의 애플리케이션 또는 당사자들이 각자의 네트워크 내에서 도달할 수 있는 Azure 영역에 &lt;u&gt;랑데부, 즉 서로가 만날 수 있는 지점&lt;/u&gt;를 만드는 것을 하이브리드 연결이라고 할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 각자의 네트워크가 서로 연결되어 있지 않아도 직접 연결된 것처럼 릴레이를 통해 요청 및 응답을 교환할 수 있게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 외에도 Azure Relay에서는 WCF 연결도 지원하고 있지만 이 부분은 이번 글에서는 다루지 않도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면, Cloud Shell을 통해 private ip만 attach된 Linux 가상 머신에 접근할 수 있을까요?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 확인해 보기 위해 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;vnet-cs-hyein이라는 이름의 가상 네트워크에 snet-vm이라는 이름의 서브넷을 생성합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;snet-vm이라는 이름의 서브넷을 생성하고 ip 대역은 172.19.3.0/24로 할당합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TMYBK/btsGjOdIzcY/TvqJ42YEB8GanzMkRPG2ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TMYBK/btsGjOdIzcY/TvqJ42YEB8GanzMkRPG2ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TMYBK/btsGjOdIzcY/TvqJ42YEB8GanzMkRPG2ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTMYBK%2FbtsGjOdIzcY%2FTvqJ42YEB8GanzMkRPG2ik%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;524&quot; height=&quot;285&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;328&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Linux 가상 머신을 생성합니다. (자세한 내용은 생략합니다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA1SeW/btsGjXO0sxI/NkW4rQoMBiOGgzIGjmW2UK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA1SeW/btsGjXO0sxI/NkW4rQoMBiOGgzIGjmW2UK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA1SeW/btsGjXO0sxI/NkW4rQoMBiOGgzIGjmW2UK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA1SeW%2FbtsGjXO0sxI%2FNkW4rQoMBiOGgzIGjmW2UK%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;737&quot; height=&quot;198&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;255&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 Cloud Shell에서 Linux 가상 머신의 private ip로 ping을 날려 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;405&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZ019M/btsGizB0uoO/2pYAxnt5plyA0gj0ig4uA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZ019M/btsGizB0uoO/2pYAxnt5plyA0gj0ig4uA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZ019M/btsGizB0uoO/2pYAxnt5plyA0gj0ig4uA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZ019M%2FbtsGizB0uoO%2F2pYAxnt5plyA0gj0ig4uA0%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;732&quot; height=&quot;239&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;405&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cloud Shell을 가상 네트워크에 배포하지 않은 환경에서 가상 머신의 private ip로 ping을 날리면 하기와 같이 packet loss가 발생합니다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bO2KYP/btsGirjH6gv/K7PLkYQtsVSGJ6sX29QQH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bO2KYP/btsGirjH6gv/K7PLkYQtsVSGJ6sX29QQH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bO2KYP/btsGirjH6gv/K7PLkYQtsVSGJ6sX29QQH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbO2KYP%2FbtsGirjH6gv%2FK7PLkYQtsVSGJ6sX29QQH1%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;580&quot; height=&quot;113&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 두 환경의 차이를 통해서 Cloud Shell이 가상 네트워크 내에 잘 구성되었다는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면 SSH 접근은 가능할까요?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;답은 YES입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdqxcp/btsGjY8KsZd/ZkPz086Yim8GKJtmbPGW11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdqxcp/btsGjY8KsZd/ZkPz086Yim8GKJtmbPGW11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdqxcp/btsGjY8KsZd/ZkPz086Yim8GKJtmbPGW11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdqxcp%2FbtsGjY8KsZd%2FZkPz086Yim8GKJtmbPGW11%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;639&quot; height=&quot;212&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크 내에서 동작하는 것이기 때문에 가상 머신의 NSG에 별도의 인바운드 규칙 추가 없이 접근이 가능합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 테스트하려는 가상 머신이 배포되어 있는 가상 네트워크와 Cloud Shell을 격리한 가상 네트워크가 서로 다르다면 VNet Peering만 해주면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.6 가상 네트워크를 사용하도록 Cloud Shell 구성 - Virtual Machine&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 가상 머신에서 Cloud Shell을 실행했을 때 Local PC에서 접근하는 것과 어떤 차이가 있는지 알아보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 위해 먼저 Windows 가상 머신을 생성합니다. &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(자세한 내용은 생략합니다.)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pAVQ4/btsGkpqXWza/NVhVeoD1i4xZ0cxhoyk1gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pAVQ4/btsGkpqXWza/NVhVeoD1i4xZ0cxhoyk1gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pAVQ4/btsGkpqXWza/NVhVeoD1i4xZ0cxhoyk1gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpAVQ4%2FbtsGkpqXWza%2FNVhVeoD1i4xZ0cxhoyk1gk%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;635&quot; height=&quot;240&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;429&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RDP를 통해 Windows 가상 머신에 접근합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2255&quot; data-origin-height=&quot;1433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wt0EV/btsGkVKs1Al/fvhCiyFNflxYCVOUpBd2kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wt0EV/btsGkVKs1Al/fvhCiyFNflxYCVOUpBd2kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wt0EV/btsGkVKs1Al/fvhCiyFNflxYCVOUpBd2kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwt0EV%2FbtsGkVKs1Al%2FfvhCiyFNflxYCVOUpBd2kk%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;755&quot; height=&quot;480&quot; data-origin-width=&quot;2255&quot; data-origin-height=&quot;1433&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Portal로 이동하여 Cloud Shell을 실행합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하기 스크린샷과 같이 별도의 설정 없이 바로 Cloud Shell을 사용할 수 있는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1890&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LQS9E/btsGkUx00wB/2etyPktwb8JR5ZTP1vKhX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LQS9E/btsGkUx00wB/2etyPktwb8JR5ZTP1vKhX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LQS9E/btsGkUx00wB/2etyPktwb8JR5ZTP1vKhX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLQS9E%2FbtsGkUx00wB%2F2etyPktwb8JR5ZTP1vKhX0%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;753&quot; height=&quot;84&quot; data-origin-width=&quot;1890&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 Azure Relay를 사용하여 Local PC에서 가상 네트워크에 격리된 Cloud Shell을 사용하는 방법, 그리고 가상 머신에서 가상 네트워크에 격리된 Cloud Shell을 사용하는 방법에 대해 알아보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저번 글에서도 말씀 드렸듯이, Cloud Shell에 대한 완전한 접근 차단을 위해서는 별도의 도메인을 방화벽 등에서 차단해야 한다는 점 참고해 주시면 감사하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 글은 Jenkins와 GitHub를 Private하게 연결하는 법에 대해 다뤄보겠습니다.  &lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>Azure</category>
      <category>Azure Relay</category>
      <category>Cloud Shell</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/35</guid>
      <comments>https://with-cloud.tistory.com/35#entry35comment</comments>
      <pubDate>Wed, 3 Apr 2024 15:45:40 +0900</pubDate>
    </item>
    <item>
      <title>[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #04 Always On 가용성 그룹 구성</title>
      <link>https://with-cloud.tistory.com/34</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 포스팅을 마지막 으로 시리즈의 막을 내리며,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 SQL Server 고가용성을 위한&amp;nbsp; &quot;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;#04&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;Always On 가용성 그룹&lt;/span&gt;&lt;/span&gt;&quot;&lt;/b&gt;에 관한 내용을 다룹니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;&lt;b&gt;#01 ~ 03&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;진행한 구성은 계속되는 과정에서 필수적인 환경으로 아래 링크를 참고하여 함께 팔로잉 해주세요!&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712023149853&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;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #01 용어 정리 및 구성도 공유 그리고 AD 구축&quot; data-og-description=&quot;안녕하세요. TAK 입니다:)  봄이 부쩍 가까워진 3월에 다시 인사드립니다(^꾸_벅^)  회사 업무로 Azure VM 기반 MSSQL FCI 구성한 적이 있는데.. 이후에 Always ON 가용성 그룹 구성이 자꾸 아른?..거려&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/28&quot; data-og-url=&quot;https://with-cloud.tistory.com/28&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rPAfD/hyVGEnf21l/Z0T4ADKunbd3omnyo643D1/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/sOsTA/hyVJQ7nSo6/uvjVlcap97OroDGJoC2Z3K/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/c499BQ/hyVGGyy0o8/q6jZT2h3rgpZsO8rwh9nvk/img.png?width=1750&amp;amp;height=944&amp;amp;face=0_0_1750_944&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/28&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rPAfD/hyVGEnf21l/Z0T4ADKunbd3omnyo643D1/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/sOsTA/hyVJQ7nSo6/uvjVlcap97OroDGJoC2Z3K/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/c499BQ/hyVGGyy0o8/q6jZT2h3rgpZsO8rwh9nvk/img.png?width=1750&amp;amp;height=944&amp;amp;face=0_0_1750_944');&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;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #01 용어 정리 및 구성도 공유 그리고 AD 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. TAK 입니다:)  봄이 부쩍 가까워진 3월에 다시 인사드립니다(^꾸_벅^)  회사 업무로 Azure VM 기반 MSSQL FCI 구성한 적이 있는데.. 이후에 Always ON 가용성 그룹 구성이 자꾸 아른?..거려&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1712023172189&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;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #02 Failover Cluster 구성&quot; data-og-description=&quot;안녕하세요. TAK 입니다:) 일교차가 큰 요즘.. 다들 잘 지내고 계신가요? 감기 조심하세요!  이어지는 포스팅인 만큼 흐름을 이어가고자 빠르게? 다시 찾아왔습니다  (저만의 초기 감기 꿀팁을&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/30&quot; data-og-url=&quot;https://with-cloud.tistory.com/30&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/myZTn/hyVGP99AKo/dRolvJ4mmU0YvKQoUksu10/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/TivWH/hyVJ2mrJAu/cfvO99ehlkLD8Q6UJCst2k/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/cP1S7B/hyVJRd8UhS/aRO7skHTsuX1u38uLK69A1/img.png?width=2000&amp;amp;height=1634&amp;amp;face=0_0_2000_1634&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/30&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/30&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/myZTn/hyVGP99AKo/dRolvJ4mmU0YvKQoUksu10/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/TivWH/hyVJ2mrJAu/cfvO99ehlkLD8Q6UJCst2k/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/cP1S7B/hyVJRd8UhS/aRO7skHTsuX1u38uLK69A1/img.png?width=2000&amp;amp;height=1634&amp;amp;face=0_0_2000_1634');&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;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #02 Failover Cluster 구성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. TAK 입니다:) 일교차가 큰 요즘.. 다들 잘 지내고 계신가요? 감기 조심하세요!  이어지는 포스팅인 만큼 흐름을 이어가고자 빠르게? 다시 찾아왔습니다  (저만의 초기 감기 꿀팁을&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1712023198513&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;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #03 SQL Server 구성&quot; data-og-description=&quot;안녕하세요. TAK 입니다:) 벚꽃이 개화하면서, 봄이 가까워졌음을 알리는 요즘 인사드립니다  (아직까지 일교차가 크기에 건강 유의하셔요  ) 이번에는 실제 SQL Server 설치과 구성을 위한 단계&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/32&quot; data-og-url=&quot;https://with-cloud.tistory.com/32&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/p1B9G/hyVGOpQC7Y/uFwYRpmT9Kvg9YiN2kNRC0/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/cruuvw/hyVGK13SDe/NgSuZSqIoafYmkkMOzkGuk/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/6pP3I/hyVJYK6oa6/1JmgtXpoKsokkBIIogLjiK/img.png?width=1440&amp;amp;height=1265&amp;amp;face=0_0_1440_1265&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/32&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/32&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/p1B9G/hyVGOpQC7Y/uFwYRpmT9Kvg9YiN2kNRC0/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/cruuvw/hyVGK13SDe/NgSuZSqIoafYmkkMOzkGuk/img.png?width=800&amp;amp;height=279&amp;amp;face=0_0_800_279,https://scrap.kakaocdn.net/dn/6pP3I/hyVJYK6oa6/1JmgtXpoKsokkBIIogLjiK/img.png?width=1440&amp;amp;height=1265&amp;amp;face=0_0_1440_1265');&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;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #03 SQL Server 구성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. TAK 입니다:) 벚꽃이 개화하면서, 봄이 가까워졌음을 알리는 요즘 인사드립니다  (아직까지 일교차가 크기에 건강 유의하셔요  ) 이번에는 실제 SQL Server 설치과 구성을 위한 단계&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 오늘도 힘차게 출발하겠습니다 &lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends2&quot; data-emoticon-name=&quot;013&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/013.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/013.png&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 가용성 그룹 생성 전, 구성 사항&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. Enable Always On 가용성 그룹&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 사전 단계에서 SQL Server 정상 설치되어 있으며, SSMS를 통해 접근하게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이때, Always On High Availability 클릭하게 된다면, SQL Server Configuration Manager를 통해서 사용가능한 상태로 설정하는 에러와 함께 가이드하기 때문에 Enable 하는 사전 작업을 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL Server Configuration Manager 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjCUab/btsGhFO4WU2/6Qf6n31wh9HiMbyXJMp2kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjCUab/btsGhFO4WU2/6Qf6n31wh9HiMbyXJMp2kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjCUab/btsGhFO4WU2/6Qf6n31wh9HiMbyXJMp2kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjCUab%2FbtsGhFO4WU2%2F6Qf6n31wh9HiMbyXJMp2kk%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;2000&quot; height=&quot;1423&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1423&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL Server Servies &amp;gt; SQL Server(MSSQLSERVER) &amp;gt; 오른쪽 마우스 클릭 후, Properties(속성)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;581&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwsagA/btsGfh9ekkC/Cv0biZcROIrXZkI3KJoHy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwsagA/btsGfh9ekkC/Cv0biZcROIrXZkI3KJoHy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwsagA/btsGfh9ekkC/Cv0biZcROIrXZkI3KJoHy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwsagA%2FbtsGfh9ekkC%2FCv0biZcROIrXZkI3KJoHy0%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;2000&quot; height=&quot;581&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;581&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Enable Always On Availability Groups&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eglsss/btsGgdlbOra/J2iHiKKLTBEh3BnGoPkjgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eglsss/btsGgdlbOra/J2iHiKKLTBEh3BnGoPkjgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eglsss/btsGgdlbOra/J2iHiKKLTBEh3BnGoPkjgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feglsss%2FbtsGgdlbOra%2FJ2iHiKKLTBEh3BnGoPkjgk%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;2000&quot; height=&quot;2393&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2393&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성 사항을 서비스에 적용하기 위해, Restart&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lV2h3/btsGg15PD7Q/0EwZUBjIgbMKRktCOx2WYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lV2h3/btsGg15PD7Q/0EwZUBjIgbMKRktCOx2WYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lV2h3/btsGg15PD7Q/0EwZUBjIgbMKRktCOx2WYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlV2h3%2FbtsGg15PD7Q%2F0EwZUBjIgbMKRktCOx2WYK%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;2000&quot; height=&quot;730&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;730&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;background-color: #f6e199; color: #000000;&quot;&gt;&lt;b&gt; &amp;rarr; 상기 작업은 각 SQL Server(복제본 서버)에서도 동일하게 Enable 적용하여야 합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2. 데이터베이스 백업&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 가용성 그룹 생성 전, 요구 사항(가용성 데이터베이스)으로 실제 가용성 그룹 생성 후에 데이터베이스를 추가하기 위해서는 전체 데이터베이스 백업을 하나 이상 소유하여야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 다음과 같은 이유로 필요로 하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- 가용성 그룹의 초기 데이터 동기화: 가용성 그룹을 구성할 때, 가용성 그룹에 속하는 모든 데이터베이스의 초기 동기화를 위해 백업이 사용됩니다. 이러한 초기 백업은 주요 데이터베이스의 백업을 사용하여 데이터베이스의 상태를 가용성 그룹의 다른 노드로 전송합니다. 이는 가용성 그룹의 복제된 데이터베이스들이 동일한 출발점에서 시작할 수 있도록 보장합니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- 가용성 그룹의 가동성 보장: 가용성 그룹을 구성하면 데이터베이스의 가용성과 장애 조치 기능을 향상시키는 것이 목적입니다. 초기 백업을 설정함으로써 데이터 손실을 방지하고 장애 발생 시 데이터베이스를 복구하는 데 필요한 준비를 합니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- 복구 지점의 설정: 초기 백업은 가용성 그룹의 복구 지점을 설정하는 데 사용됩니다. 복구 지점은 장애 발생 시 데이터베이스를 복구할 때 사용되는 시점을 나타냅니다. 초기 백업을 설정하면 이러한 복구 지점을 명확하게 정의할 수 있습니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- 성능 및 안정성: 초기 백업을 사용하여 가용성 그룹을 생성하면 데이터 전송 속도를 최적화하고 데이터 동기화 프로세스를 안정화할 수 있습니다. 또한 가용성 그룹을 생성하는 동안 발생할 수 있는 네트워크 문제 또는 장애에 대비하여 데이터의 안정성을 높일 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공유 백업 포함하여 구선 전 고려해야 할 사항들은 아래 Docs를 참고해 주세요.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712031019730&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;가용성 그룹: 필수 구성 요소, 제한 사항 및 권장 사항 - SQL Server Always On&quot; data-og-description=&quot;SQL Server에 Always On 가용성 그룹을 배포하기 위한 필수 조건, 제한 사항 및 권장 사항에 대한 설명입니다.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/sql/database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability?view=sql-server-ver16&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/sql/database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability?view=sql-server-ver16&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bNadIz/hyVJUPudbD/sQ36DK4ND9zZPP4LlE60o1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/sql/database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability?view=sql-server-ver16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/sql/database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability?view=sql-server-ver16&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bNadIz/hyVJUPudbD/sQ36DK4ND9zZPP4LlE60o1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;가용성 그룹: 필수 구성 요소, 제한 사항 및 권장 사항 - SQL Server Always On&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SQL Server에 Always On 가용성 그룹을 배포하기 위한 필수 조건, 제한 사항 및 권장 사항에 대한 설명입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2-1.&amp;nbsp; 공유 폴더 생성&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;SQL Server의 Server Manager &amp;gt; Computer Management&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IBHFs/btsGhVLcFXI/0wEVqAU2qHAsKoFCQltDSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IBHFs/btsGhVLcFXI/0wEVqAU2qHAsKoFCQltDSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IBHFs/btsGhVLcFXI/0wEVqAU2qHAsKoFCQltDSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIBHFs%2FbtsGhVLcFXI%2F0wEVqAU2qHAsKoFCQltDSK%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;2000&quot; height=&quot;582&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;582&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Shared Folders &amp;gt; Shares &amp;gt; New Share&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5blpe/btsGh5mAgLQ/bgSvCEmRmITuPwcem9WQ5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5blpe/btsGh5mAgLQ/bgSvCEmRmITuPwcem9WQ5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5blpe/btsGh5mAgLQ/bgSvCEmRmITuPwcem9WQ5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5blpe%2FbtsGh5mAgLQ%2FbgSvCEmRmITuPwcem9WQ5k%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;2000&quot; height=&quot;1152&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1152&quot;/&gt;&lt;/span&gt;&lt;/figure&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/budgMG/btsGjDJBk0c/PX8sf3Zqh0EC2hw7BaJTL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/budgMG/btsGjDJBk0c/PX8sf3Zqh0EC2hw7BaJTL0/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1579&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4342%; margin-right: 10px;&quot; data-widthpercent=&quot;50.02&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/budgMG/btsGjDJBk0c/PX8sf3Zqh0EC2hw7BaJTL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbudgMG%2FbtsGjDJBk0c%2FPX8sf3Zqh0EC2hw7BaJTL0%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;2000&quot; height=&quot;1579&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nq6Vj/btsGiStwlxA/C5JMoIiw8osOq8LTvNoHkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nq6Vj/btsGiStwlxA/C5JMoIiw8osOq8LTvNoHkk/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1580&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.403%;&quot; data-widthpercent=&quot;49.98&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nq6Vj/btsGiStwlxA/C5JMoIiw8osOq8LTvNoHkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNq6Vj%2FbtsGiStwlxA%2FC5JMoIiw8osOq8LTvNoHkk%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;2000&quot; height=&quot;1580&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공유 폴더 Permission &amp;gt; 관리자 계정 선&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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/d0fd1R/btsGio7hkqp/0qTdQGdfxwKKkyuxb4KjWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0fd1R/btsGio7hkqp/0qTdQGdfxwKKkyuxb4KjWk/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1586&quot; data-is-animation=&quot;false&quot; style=&quot;width: 60.3412%; margin-right: 10px;&quot; data-widthpercent=&quot;61.05&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0fd1R/btsGio7hkqp/0qTdQGdfxwKKkyuxb4KjWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0fd1R%2FbtsGio7hkqp%2F0qTdQGdfxwKKkyuxb4KjWk%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;2000&quot; height=&quot;1586&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxpewR/btsGieX4t8K/M111lx9SjbpIy4o1I8LjA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxpewR/btsGieX4t8K/M111lx9SjbpIy4o1I8LjA0/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2486&quot; data-is-animation=&quot;false&quot; style=&quot;width: 38.496%;&quot; data-widthpercent=&quot;38.95&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxpewR/btsGieX4t8K/M111lx9SjbpIy4o1I8LjA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxpewR%2FbtsGieX4t8K%2FM111lx9SjbpIy4o1I8LjA0%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;2000&quot; height=&quot;2486&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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/b2vq8m/btsGiQbnKz2/u1k2IIBtl8nUEE88OkJ3mK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2vq8m/btsGiQbnKz2/u1k2IIBtl8nUEE88OkJ3mK/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1103&quot; data-is-animation=&quot;false&quot; style=&quot;width: 58.1894%; margin-right: 10px;&quot; data-widthpercent=&quot;58.87&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2vq8m/btsGiQbnKz2/u1k2IIBtl8nUEE88OkJ3mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2vq8m%2FbtsGiQbnKz2%2Fu1k2IIBtl8nUEE88OkJ3mK%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;2000&quot; height=&quot;1103&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3e5Ek/btsGhEC1pzA/UMerXmic0joJIGlDLj7Z9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3e5Ek/btsGhEC1pzA/UMerXmic0joJIGlDLj7Z9k/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1579&quot; data-is-animation=&quot;false&quot; style=&quot;width: 40.6478%;&quot; data-widthpercent=&quot;41.13&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3e5Ek/btsGhEC1pzA/UMerXmic0joJIGlDLj7Z9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3e5Ek%2FbtsGhEC1pzA%2FUMerXmic0joJIGlDLj7Z9k%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;2000&quot; height=&quot;1579&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공유 폴더 구성 및 생성 완료 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1447&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OLeEl/btsGj0j2gUZ/1Dr5soIcGQ1norFNKrKAuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OLeEl/btsGj0j2gUZ/1Dr5soIcGQ1norFNKrKAuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OLeEl/btsGj0j2gUZ/1Dr5soIcGQ1norFNKrKAuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOLeEl%2FbtsGj0j2gUZ%2F1Dr5soIcGQ1norFNKrKAuk%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;2000&quot; height=&quot;1447&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1447&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;&lt;span style=&quot;color: #000000;&quot;&gt;1-2-2. SQL Server의 (Sample)DB의 백업 설정&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;사전에 생성한 SampleDB에 대한 Back Up 진행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1692&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nnzzo/btsGjX8Grri/Kh3WwK09Cals5zb6qCfgw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nnzzo/btsGjX8Grri/Kh3WwK09Cals5zb6qCfgw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nnzzo/btsGjX8Grri/Kh3WwK09Cals5zb6qCfgw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnnzzo%2FbtsGjX8Grri%2FKh3WwK09Cals5zb6qCfgw0%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;2000&quot; height=&quot;1692&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1692&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;span style=&quot;color: #000000;&quot;&gt;2. 가용성 그룹&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-1. 가용성 그룹 만들기&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Always On High Availability &amp;gt; New Availability Group Wizard&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1690&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xaA2G/btsGg0sHP2G/sS6MLr38HXru5TspTxOMFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xaA2G/btsGg0sHP2G/sS6MLr38HXru5TspTxOMFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xaA2G/btsGg0sHP2G/sS6MLr38HXru5TspTxOMFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxaA2G%2FbtsGg0sHP2G%2FsS6MLr38HXru5TspTxOMFK%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;2000&quot; height=&quot;1690&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1690&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;2000&quot; data-origin-height=&quot;1832&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwfuQU/btsGhGtZYLa/Q4OGeZQLU59hSRZLEA34FK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwfuQU/btsGhGtZYLa/Q4OGeZQLU59hSRZLEA34FK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwfuQU/btsGhGtZYLa/Q4OGeZQLU59hSRZLEA34FK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwfuQU%2FbtsGhGtZYLa%2FQ4OGeZQLU59hSRZLEA34FK%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;2000&quot; height=&quot;1832&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1832&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가용성 그룹 이름 입력&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1817&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvMfzT/btsGjl93MkR/uonkVjimPNOVCl3gZSy121/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvMfzT/btsGjl93MkR/uonkVjimPNOVCl3gZSy121/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvMfzT/btsGjl93MkR/uonkVjimPNOVCl3gZSy121/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvMfzT%2FbtsGjl93MkR%2FuonkVjimPNOVCl3gZSy121%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;2000&quot; height=&quot;1817&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1817&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가용성 그룹에 포함할 데이터베이스 선택&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사전에 백업을 진행하였기에 조건에 충족한다는 멘트를 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1822&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uMNmK/btsGiAfvu1f/9BzjT9QSrtoAVf2OUXZER1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uMNmK/btsGiAfvu1f/9BzjT9QSrtoAVf2OUXZER1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uMNmK/btsGiAfvu1f/9BzjT9QSrtoAVf2OUXZER1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuMNmK%2FbtsGiAfvu1f%2F9BzjT9QSrtoAVf2OUXZER1%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;2000&quot; height=&quot;1822&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1822&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;2000&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tL2VD/btsGjLHrFoJ/EfKDk9Gp7E65bWQVnOVIm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tL2VD/btsGjLHrFoJ/EfKDk9Gp7E65bWQVnOVIm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tL2VD/btsGjLHrFoJ/EfKDk9Gp7E65bWQVnOVIm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtL2VD%2FbtsGjLHrFoJ%2FEfKDk9Gp7E65bWQVnOVIm1%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;2000&quot; height=&quot;422&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;422&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2. 가용성 그룹 생성(+ Add Replica)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 위 단계와 이어지는 단계로 해당 작업은 SQL-01, 즉 Primary(주) 서버에서 진행한 단계로 가용성 그룹에 추가로 Secondary(보조) 서버를 추가하는 과정입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우선 주(Primary) 서버와 보조 혹은 복제(Secondary) 서버의 네트워크 설정을 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2-1. SQL Server 간 네트워크 통신을 위한 설정&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 각 SQL Server들이 가용성 그룹으로 묶고, 네트워크 통신을 하기 위한 작업입니다. (모든 SQL Server에서 동일하게 진행)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL Server Configuration Manager&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1025&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0bI09/btsGkqbN8kq/b1XpvQ2JGWa0r00QSZ7Jnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0bI09/btsGkqbN8kq/b1XpvQ2JGWa0r00QSZ7Jnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0bI09/btsGkqbN8kq/b1XpvQ2JGWa0r00QSZ7Jnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0bI09%2FbtsGkqbN8kq%2Fb1XpvQ2JGWa0r00QSZ7Jnk%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;1440&quot; height=&quot;1025&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1025&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL Server Network Configuration &amp;gt; Protocols for MSSQLSERVER &amp;gt;&amp;nbsp;&lt;b&gt;TCP/IP Enable&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7zxTb/btsGj5FFfPj/OLuaN7EATeiUNsBPWkoCuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7zxTb/btsGj5FFfPj/OLuaN7EATeiUNsBPWkoCuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7zxTb/btsGj5FFfPj/OLuaN7EATeiUNsBPWkoCuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7zxTb%2FbtsGj5FFfPj%2FOLuaN7EATeiUNsBPWkoCuk%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;1440&quot; height=&quot;552&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;552&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;1440&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zNsY8/btsGjmgWN5p/UPtJxIUP9Ba27KE6upK8e1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zNsY8/btsGjmgWN5p/UPtJxIUP9Ba27KE6upK8e1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zNsY8/btsGjmgWN5p/UPtJxIUP9Ba27KE6upK8e1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzNsY8%2FbtsGjmgWN5p%2FUPtJxIUP9Ba27KE6upK8e1%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;1440&quot; height=&quot;650&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;650&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL Server Serives 재시작&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;798&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BnkhK/btsGhGVbYas/CQ846VBgn7l1GXnEw7h9C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BnkhK/btsGhGVbYas/CQ846VBgn7l1GXnEw7h9C1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BnkhK/btsGhGVbYas/CQ846VBgn7l1GXnEw7h9C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBnkhK%2FbtsGhGVbYas%2FCQ846VBgn7l1GXnEw7h9C1%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;1440&quot; height=&quot;798&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;798&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;1440&quot; data-origin-height=&quot;770&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsTWEl/btsGhGnl2Pz/EMfzt1HhVXhOD0IA2cvqEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsTWEl/btsGhGnl2Pz/EMfzt1HhVXhOD0IA2cvqEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsTWEl/btsGhGnl2Pz/EMfzt1HhVXhOD0IA2cvqEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsTWEl%2FbtsGhGnl2Pz%2FEMfzt1HhVXhOD0IA2cvqEk%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;1440&quot; height=&quot;770&quot; data-origin-width=&quot;1440&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2-2. 보조 혹은 복제(Replica) 서버 가용성 그룹에 추가&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;Specify Replicas &amp;gt; Add Replica...&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1818&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSKshI/btsGhGHxgl4/KTU6h9UKefx88gLbfycPc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSKshI/btsGhGHxgl4/KTU6h9UKefx88gLbfycPc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSKshI/btsGhGHxgl4/KTU6h9UKefx88gLbfycPc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSKshI%2FbtsGhGHxgl4%2FKTU6h9UKefx88gLbfycPc0%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;2000&quot; height=&quot;1818&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1818&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SQL-02, SQL-03 서버 연결&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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/Sx1IL/btsGidERtST/g9iGBsEN73JnOBxgozIVk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sx1IL/btsGidERtST/g9iGBsEN73JnOBxgozIVk1/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1314&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4374%; margin-right: 10px;&quot; data-widthpercent=&quot;50.02&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sx1IL/btsGidERtST/g9iGBsEN73JnOBxgozIVk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSx1IL%2FbtsGidERtST%2Fg9iGBsEN73JnOBxgozIVk1%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;2000&quot; height=&quot;1314&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzw6XQ/btsGhpMArsg/xuaD6r7nje23aYNrwZWx5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzw6XQ/btsGhpMArsg/xuaD6r7nje23aYNrwZWx5K/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1315&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.3998%;&quot; data-widthpercent=&quot;49.98&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzw6XQ/btsGhpMArsg/xuaD6r7nje23aYNrwZWx5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbzw6XQ%2FbtsGhpMArsg%2FxuaD6r7nje23aYNrwZWx5K%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;2000&quot; height=&quot;1315&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정상적으로 등록됨을 확&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/co86Ao/btsGjX10niw/KwFyFHnmZdddRIXhyKGfBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/co86Ao/btsGjX10niw/KwFyFHnmZdddRIXhyKGfBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/co86Ao/btsGjX10niw/KwFyFHnmZdddRIXhyKGfBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fco86Ao%2FbtsGjX10niw%2FKwFyFHnmZdddRIXhyKGfBK%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;1440&quot; height=&quot;1310&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1310&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Endpoints 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgZL6N/btsGkoLPYo9/KnKtlAbZukWz22KQHh2o9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgZL6N/btsGkoLPYo9/KnKtlAbZukWz22KQHh2o9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgZL6N/btsGkoLPYo9/KnKtlAbZukWz22KQHh2o9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgZL6N%2FbtsGkoLPYo9%2FKnKtlAbZukWz22KQHh2o9k%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;1440&quot; height=&quot;377&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;377&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Listener 설정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;추후 Azure Load Balancer의 IP로 Cluster의 Listener 설정할 예정으로 현 단계에서 Do not create 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;1310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cl6PV5/btsGgzvfhlx/3yA5bGFIM5fYSDDTk5zWnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cl6PV5/btsGgzvfhlx/3yA5bGFIM5fYSDDTk5zWnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cl6PV5/btsGgzvfhlx/3yA5bGFIM5fYSDDTk5zWnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcl6PV5%2FbtsGgzvfhlx%2F3yA5bGFIM5fYSDDTk5zWnK%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;1440&quot; height=&quot;1310&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1310&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;위 단계에서 구성한 공유 폴더를 [Full database and log backup] 파일 저장 경로로 지정&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lfTSS/btsGhoAgsc4/IO2JCC7xMbaN4x5pX1b4Ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lfTSS/btsGhoAgsc4/IO2JCC7xMbaN4x5pX1b4Ak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lfTSS/btsGhoAgsc4/IO2JCC7xMbaN4x5pX1b4Ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlfTSS%2FbtsGhoAgsc4%2FIO2JCC7xMbaN4x5pX1b4Ak%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;1440&quot; height=&quot;1312&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1312&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성 적용 전 유효성 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSLdqg/btsGjn1eD4c/40dabRMByqY8ahOJStfvkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSLdqg/btsGjn1eD4c/40dabRMByqY8ahOJStfvkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSLdqg/btsGjn1eD4c/40dabRMByqY8ahOJStfvkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSLdqg%2FbtsGjn1eD4c%2F40dabRMByqY8ahOJStfvkk%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;1440&quot; height=&quot;1310&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1310&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가용성 그룹 최종 Summary 확&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo5CjO/btsGhFvgYAE/DqPTxJ8yRvJJLjHHd9xsPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo5CjO/btsGhFvgYAE/DqPTxJ8yRvJJLjHHd9xsPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo5CjO/btsGhFvgYAE/DqPTxJ8yRvJJLjHHd9xsPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo5CjO%2FbtsGhFvgYAE%2FDqPTxJ8yRvJJLjHHd9xsPk%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;1440&quot; height=&quot;1314&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1314&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;&lt;span style=&quot;color: #000000;&quot;&gt;2-2-3. 가용성 그룹 확인&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 지금까지 구성한 값들이 정상적으로 적용되어 생성되었는지 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;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;1440&quot; data-origin-height=&quot;1637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b97rK3/btsGhRoJlGY/qWCzxYVlYCoHZH72gEdfA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b97rK3/btsGhRoJlGY/qWCzxYVlYCoHZH72gEdfA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b97rK3/btsGhRoJlGY/qWCzxYVlYCoHZH72gEdfA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb97rK3%2FbtsGhRoJlGY%2FqWCzxYVlYCoHZH72gEdfA1%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;1440&quot; height=&quot;1637&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1637&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;1440&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvZJ1F/btsGjMsTISi/8KM3eoSinUXeiAbjKJdaik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvZJ1F/btsGjMsTISi/8KM3eoSinUXeiAbjKJdaik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvZJ1F/btsGjMsTISi/8KM3eoSinUXeiAbjKJdaik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvZJ1F%2FbtsGjMsTISi%2F8KM3eoSinUXeiAbjKJdaik%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;1440&quot; height=&quot;485&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;485&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;1440&quot; data-origin-height=&quot;1184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by6YQh/btsGjRgCE53/eP8fkKU6yxd5ai2UKgtO4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by6YQh/btsGjRgCE53/eP8fkKU6yxd5ai2UKgtO4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by6YQh/btsGjRgCE53/eP8fkKU6yxd5ai2UKgtO4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby6YQh%2FbtsGjRgCE53%2FeP8fkKU6yxd5ai2UKgtO4K%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;1440&quot; height=&quot;1184&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1184&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;span style=&quot;color: #000000;&quot;&gt;3. Listener(수신기)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 장애 조치(failover) 클러스터에서 가용성 그룹 Listener(수신기)를 생성합니다. Listener(수신기)는 DB의 V(Virtual)IP로 해당 IP로 Failover 시, Cluster의 Master 혹은 Slave의 Role이 바뀌어도 해당 IP를 그대로 사용하기 위해 사용되며, 해당 IP 주소는 사용하지 않는 IP를 입력하여합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(**Azure의 경우, 브로드캐스트 하지 못해 Internal Load Balancer를 연결해야 합니다.)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3-1. Azure Load Balancer 생성 및 Clienc Access Point 설정&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Internal Load Balancer 구성&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 과정에서는 LB 배포하는 과정은 생략되어 있음을 참고해 주세요.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Internal Load Balancer의 경우, 프라이빗 형식으로 서브넷 내 배포되며, 서브넷 대역의 사설 IP를 할당받습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;986&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beBqmR/btsGiBMleO7/vsGuD3IGBK65u2ZKmSEci0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beBqmR/btsGiBMleO7/vsGuD3IGBK65u2ZKmSEci0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beBqmR/btsGiBMleO7/vsGuD3IGBK65u2ZKmSEci0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeBqmR%2FbtsGiBMleO7%2FvsGuD3IGBK65u2ZKmSEci0%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;1440&quot; height=&quot;986&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;986&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성한 Internal Load Balancer의 IP(172.168.1.59)의 값을 수신기 IP로 등록&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가용성 그룹 선택 &amp;gt; 클라이언트 액세스 지점 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;1351&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/33QDw/btsGg07s1tH/mKJ641SyHuGVxKKFdKqam1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/33QDw/btsGg07s1tH/mKJ641SyHuGVxKKFdKqam1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/33QDw/btsGg07s1tH/mKJ641SyHuGVxKKFdKqam1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F33QDw%2FbtsGg07s1tH%2FmKJ641SyHuGVxKKFdKqam1%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;1440&quot; height=&quot;1351&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1351&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;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;* Fail over Cluster의 Network 정보 확인&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqtwN2/btsGj2oF4U0/oNzGIewxkhEPoIOrwRGu9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqtwN2/btsGj2oF4U0/oNzGIewxkhEPoIOrwRGu9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqtwN2/btsGj2oF4U0/oNzGIewxkhEPoIOrwRGu9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqtwN2%2FbtsGj2oF4U0%2FoNzGIewxkhEPoIOrwRGu9k%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;1440&quot; height=&quot;1114&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1114&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트 액세스 포인트 지정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1001&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dk36bE/btsGh3bkVG8/Cx52mz0IxsdP1ce6eJwGV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dk36bE/btsGh3bkVG8/Cx52mz0IxsdP1ce6eJwGV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dk36bE/btsGh3bkVG8/Cx52mz0IxsdP1ce6eJwGV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdk36bE%2FbtsGh3bkVG8%2FCx52mz0IxsdP1ce6eJwGV0%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;1440&quot; height=&quot;1001&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1001&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;1440&quot; data-origin-height=&quot;998&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccGPMy/btsGiy9WxAD/gydU5bZ7lkYKkBysKK9xfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccGPMy/btsGiy9WxAD/gydU5bZ7lkYKkBysKK9xfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccGPMy/btsGiy9WxAD/gydU5bZ7lkYKkBysKK9xfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccGPMy%2FbtsGiy9WxAD%2FgydU5bZ7lkYKkBysKK9xfk%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;1440&quot; height=&quot;998&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;998&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;1440&quot; data-origin-height=&quot;997&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/etDtjj/btsGknMXpaE/daPOQTw3hQ9fWcRwT3kGWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/etDtjj/btsGknMXpaE/daPOQTw3hQ9fWcRwT3kGWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/etDtjj/btsGknMXpaE/daPOQTw3hQ9fWcRwT3kGWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FetDtjj%2FbtsGknMXpaE%2FdaPOQTw3hQ9fWcRwT3kGWK%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;1440&quot; height=&quot;997&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;997&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성 값 반영 여부 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;885&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvB7Q6/btsGjCc0bUo/dBV4daHXD6YGXdI0iKS060/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvB7Q6/btsGjCc0bUo/dBV4daHXD6YGXdI0iKS060/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvB7Q6/btsGjCc0bUo/dBV4daHXD6YGXdI0iKS060/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvB7Q6%2FbtsGjCc0bUo%2FdBV4daHXD6YGXdI0iKS060%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;1440&quot; height=&quot;885&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;885&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;1440&quot; data-origin-height=&quot;1755&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/camInu/btsGjPiOmwp/scESVCmm0YkOUweKG7J431/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/camInu/btsGjPiOmwp/scESVCmm0YkOUweKG7J431/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/camInu/btsGjPiOmwp/scESVCmm0YkOUweKG7J431/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcamInu%2FbtsGjPiOmwp%2FscESVCmm0YkOUweKG7J431%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;1440&quot; height=&quot;1755&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1755&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;1440&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIQfLU/btsGiAUeF3t/oT29O1yB4pD1sCbU3Iv8tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIQfLU/btsGiAUeF3t/oT29O1yB4pD1sCbU3Iv8tK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIQfLU/btsGiAUeF3t/oT29O1yB4pD1sCbU3Iv8tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIQfLU%2FbtsGiAUeF3t%2FoT29O1yB4pD1sCbU3Iv8tK%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;1440&quot; height=&quot;485&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;485&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;1440&quot; data-origin-height=&quot;1754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/98FaB/btsGhRvuvYL/kQdk2kxZTZcY8XpmFqqXFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/98FaB/btsGhRvuvYL/kQdk2kxZTZcY8XpmFqqXFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/98FaB/btsGhRvuvYL/kQdk2kxZTZcY8XpmFqqXFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F98FaB%2FbtsGhRvuvYL%2FkQdk2kxZTZcY8XpmFqqXFk%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;1440&quot; height=&quot;1754&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1754&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Dependency Report 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 단계에서 구성한 값들을 바탕으로 Fail over 조치가 이뤄질 있도록 종속성이 올바르게 연결되었는지 확인&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;837&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm8Gi1/btsGjmOOsFx/UqTQk1I2Wb0XLq1bX19yx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm8Gi1/btsGjmOOsFx/UqTQk1I2Wb0XLq1bX19yx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm8Gi1/btsGjmOOsFx/UqTQk1I2Wb0XLq1bX19yx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm8Gi1%2FbtsGjmOOsFx%2FUqTQk1I2Wb0XLq1bX19yx0%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;1440&quot; height=&quot;837&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;837&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;1440&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2WOnt/btsGif3QPgB/1KdcxwXUu6w1YWcUcSX8i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2WOnt/btsGif3QPgB/1KdcxwXUu6w1YWcUcSX8i1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2WOnt/btsGif3QPgB/1KdcxwXUu6w1YWcUcSX8i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2WOnt%2FbtsGif3QPgB%2F1KdcxwXUu6w1YWcUcSX8i1%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;1440&quot; height=&quot;578&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3-2. Listener Online(Up) 구성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 해당 작업을 통해 수신기 상태를 온라인으로 전환합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; PowerShell 명령어를 통해 클러스터 매게 변수 설정되며, 옵션은 다음과 같습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 옵션값은 사용자 환경에 맞게 변수를 업데이트하여 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- $ClusterNetworkName은 &lt;b&gt;네트워크&lt;/b&gt;를 선택하여&amp;nbsp;&lt;b&gt;장애 조치(failover) 클러스터 관리자&lt;/b&gt;에서 이름을 찾습니다. 네트워크를 마우스 오른쪽 단추로 클릭하고&amp;nbsp;&lt;b&gt;속성&lt;/b&gt;을 선택합니다.&amp;nbsp;&lt;b&gt;$ClusterNetworkName&lt;/b&gt;은 일반 탭의&amp;nbsp;&lt;b&gt;이름&lt;/b&gt; 아래에 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;- $IPResourceName은 &lt;/span&gt;&lt;b&gt;장애 조치(failover) 클러스터 관리자&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;의 IP 주소 리소스에 지정된 이름입니다. 이 이름은&amp;nbsp;&lt;/span&gt;&lt;b&gt;역할&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;을 선택하여&amp;nbsp;&lt;/span&gt;&lt;b&gt;장애 조치(failover) 클러스터 관리자&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;에서 찾을 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;b&gt;SQL Server AG 또는 FCI 이름&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;을 선택하고,&amp;nbsp;&lt;/span&gt;&lt;b&gt;서버 이름&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;아래에서&amp;nbsp;&lt;/span&gt;&lt;b&gt;리소스&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;탭을 선택하고, IP 주소 리소스를 마우스 오른쪽 단추로 클릭하고,&amp;nbsp;&lt;/span&gt;&lt;b&gt;속성&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;을 선택합니다. 올바른 값은 일반 탭의&amp;nbsp;&lt;/span&gt;&lt;b&gt;이름&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; 아래에 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- $ListenerILBIP는 가용성 그룹 수신기에 대해 Azure 부하 분산 장치에서 만든 IP 주소입니다. SQL Server AG/FCI 수신기 리소스 이름과 동일한 속성 페이지의 &lt;b&gt;장애 조치(failover) 클러스터 관리자&lt;/b&gt;에서&amp;nbsp;&lt;b&gt;$ListenerILBIP&lt;/b&gt;를 찾습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- $ListenerProbePort는 가용성 그룹 수신기에 대해 Azure 부하 분산 장치에서 구성한 포트(예: 59999)입니다. 사용하지 않는 모든 TCP 포트는 유효합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1712044108080&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ClusterNetworkName = &quot;Cluster Network 1&quot; # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name.
$IPResourceName = &quot;IP Address 172.168.1.59&quot; # The IP address resource name.
$ListenerILBIP = &quot;172.168.1.59&quot; # The IP address of the internal load balancer. This is the static IP address for the load balancer that you configured in the Azure portal.
[int]$ListenerProbePort = 59999

Import-Module FailoverClusters

Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{&quot;Address&quot;=&quot;$ListenerILBIP&quot;;&quot;ProbePort&quot;=$ListenerProbePort;&quot;SubnetMask&quot;=&quot;255.255.255.255&quot;;&quot;Network&quot;=&quot;$ClusterNetworkName&quot;;&quot;EnableDhcp&quot;=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;1440&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nJ5S9/btsGiqKUup7/hy93FFw5CFv9uvlBQi0OZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nJ5S9/btsGiqKUup7/hy93FFw5CFv9uvlBQi0OZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nJ5S9/btsGiqKUup7/hy93FFw5CFv9uvlBQi0OZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnJ5S9%2FbtsGiqKUup7%2Fhy93FFw5CFv9uvlBQi0OZ0%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;1440&quot; height=&quot;116&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;116&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;1440&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqBqIH/btsGisaV3IU/xkBmBz4IkxMkYRYSDcpJk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqBqIH/btsGisaV3IU/xkBmBz4IkxMkYRYSDcpJk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqBqIH/btsGisaV3IU/xkBmBz4IkxMkYRYSDcpJk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqBqIH%2FbtsGisaV3IU%2FxkBmBz4IkxMkYRYSDcpJk1%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;1440&quot; height=&quot;524&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;524&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설정 이후, [Start Role] 클릭하여 온라인 상태로 전환&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;847&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LqMts/btsGhQDlmee/VK1NBmr4iqgJoaafILrTjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LqMts/btsGhQDlmee/VK1NBmr4iqgJoaafILrTjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LqMts/btsGhQDlmee/VK1NBmr4iqgJoaafILrTjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLqMts%2FbtsGhQDlmee%2FVK1NBmr4iqgJoaafILrTjk%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;1440&quot; height=&quot;847&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;847&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;가용성 그룹의 수신기(Listener) 정보 확인&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/23eLm/btsGi1xi62c/xpepRhMPeUxvQ69vefihKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/23eLm/btsGi1xi62c/xpepRhMPeUxvQ69vefihKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/23eLm/btsGi1xi62c/xpepRhMPeUxvQ69vefihKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F23eLm%2FbtsGi1xi62c%2FxpepRhMPeUxvQ69vefihKK%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;1440&quot; height=&quot;1664&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1664&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;1440&quot; data-origin-height=&quot;1260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nkTgx/btsGjZlh7RL/L0M45gw3gVH1lYAfyUzY0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nkTgx/btsGjZlh7RL/L0M45gw3gVH1lYAfyUzY0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nkTgx/btsGjZlh7RL/L0M45gw3gVH1lYAfyUzY0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnkTgx%2FbtsGjZlh7RL%2FL0M45gw3gVH1lYAfyUzY0K%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;1440&quot; height=&quot;1260&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1260&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MSSQL Always On 가용성 그룹을 위한 Azure의 NSG 설정값 정보&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL Server: 기본 인스턴스에 대해&lt;span style=&quot;letter-spacing: 0px; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;1433&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터베이스 미러링 엔드포인트:&lt;span style=&quot;letter-spacing: 0px; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;5022&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #ffffff;&quot;&gt;또는 사용 가능한 모든 포트&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가용성 그룹에 대한 부하 분산 장치 IP 주소 상태 프로브:&lt;span style=&quot;letter-spacing: 0px; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;59999&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #ffffff;&quot;&gt;또는 사용 가능한 포트&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클러스터 코어에 대한 부하 분산 장치 IP 주소 상태 프로브:&lt;span style=&quot;letter-spacing: 0px; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;58888&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #ffffff;&quot;&gt;또는 사용 가능한 포트&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1053&quot; data-origin-height=&quot;683&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rdcIU/btsGiAzXpwm/umPONApxzkCVa81GSPOX7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rdcIU/btsGiAzXpwm/umPONApxzkCVa81GSPOX7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rdcIU/btsGiAzXpwm/umPONApxzkCVa81GSPOX7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrdcIU%2FbtsGiAzXpwm%2FumPONApxzkCVa81GSPOX7k%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;1053&quot; height=&quot;683&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;683&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금까지&lt;b&gt; &quot;SQL Server Always On 가용성 그룹 on Azure&quot;&lt;/b&gt; 중 &lt;b&gt;Always On 가용성 그룹 구성&lt;/b&gt; 단계를 알아보았습니다. 이번 과정을 마지막으로 시리즈의 막을 내리겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅을 준비하면서 여러 구성과 설정 등 고려해야 할 점들 파악하면서 많은 것들을 배울 수 있는 시간이었습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(함께 따라오시는 분들도 그렇길 바라면서...ㅎㅎ)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(!!많관부!!) 다음에도 유익한 주제로 찾아뵙겠습니다 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러분의 생각하는 부족한 점, 궁금한 점 등 자유로운 의견을 남겨주세요!&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/DB</category>
      <category>always on</category>
      <category>Azure</category>
      <category>cloud</category>
      <category>listener</category>
      <category>Load Balancer</category>
      <category>mssql</category>
      <category>MSSQL Always on 가용성 그룹</category>
      <category>SQL Server</category>
      <category>가용성 그룹</category>
      <category>수신기</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/34</guid>
      <comments>https://with-cloud.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 2 Apr 2024 17:06:36 +0900</pubDate>
    </item>
    <item>
      <title>Windows에 Jenkins 설치하기</title>
      <link>https://with-cloud.tistory.com/33</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘은 Windows에 Jenkins를 설치하는 방법에 대해 알아보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문득 Jenkins는 Linux에만 설치를 해봤다는 생각이 들어서 이번 글을 적게 되었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는 Jenkins를 설치할 가상 머신을 생성하는 과정과 Jenkins를 Windows VM에 설치하는 방법에 대해 다뤄보고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 글에서는 Jenkins Pipeline가 동작하며, GitHub와 같은 소스 코드 레포지토리의 소스 코드가 Windows VM의 어떤 Directory로 떨어지는지 확인해 보고자 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 1. 테스트 환경 생성 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt; [시나리오] &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RDP(3389) 포트를 통해 외부에서 접근할 수 있는 Windows 가상 머신을 한 대 생성합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 가상 머신에서 접근 가능한, Public IP가 없는 Window 가상 머신을 한 대 생성합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 가상 머신은 다른 가상 네트워크에 존재하며, VNet Peering을 통해 연결되어 있습니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;※ 리소스 그룹 한 개에 모든 리소스를 전부 다 배포할 예정입니다.※&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 1.1 리소스 그룹 생성 &lt;/span&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;span style=&quot;color: #000000;&quot;&gt;[기본]&amp;nbsp;탭&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlOAEK/btsGh7kpwvk/oV09Pk1f8pMwMVfRJsaLSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlOAEK/btsGh7kpwvk/oV09Pk1f8pMwMVfRJsaLSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlOAEK/btsGh7kpwvk/oV09Pk1f8pMwMVfRJsaLSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlOAEK%2FbtsGh7kpwvk%2FoV09Pk1f8pMwMVfRJsaLSK%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;627&quot; height=&quot;322&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;371&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토&amp;nbsp;+&amp;nbsp;만들기]&amp;nbsp;버튼을&amp;nbsp;클릭하여&amp;nbsp;리소스&amp;nbsp;그룹&amp;nbsp;생성을&amp;nbsp;완료합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.2 가상 네트워크 생성 - Hub &lt;/span&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;span style=&quot;color: #000000;&quot;&gt; [기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi6E49/btsGjOjKGqg/ZdAVGVCf6YPNaksKG1w2vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi6E49/btsGjOjKGqg/ZdAVGVCf6YPNaksKG1w2vK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi6E49/btsGjOjKGqg/ZdAVGVCf6YPNaksKG1w2vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi6E49%2FbtsGjOjKGqg%2FZdAVGVCf6YPNaksKG1w2vK%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;612&quot; height=&quot;488&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;600&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [IP 주소] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsUM0R/btsGjM0CJDH/hv6eNSiq90hsqFjTlKoy40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsUM0R/btsGjM0CJDH/hv6eNSiq90hsqFjTlKoy40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsUM0R/btsGjM0CJDH/hv6eNSiq90hsqFjTlKoy40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsUM0R%2FbtsGjM0CJDH%2Fhv6eNSiq90hsqFjTlKoy40%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;623&quot; height=&quot;448&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;538&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [검토 + 만들기] 버튼을 클릭하여 Hub 가상 네트워크 생성을 완료합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.3 가상 네트워크 생성 - Spoke &lt;/span&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;span style=&quot;color: #000000;&quot;&gt; [기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uunYZ/btsGjYmcyqM/n9ktj2GCBTuemZ8O142kn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uunYZ/btsGjYmcyqM/n9ktj2GCBTuemZ8O142kn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uunYZ/btsGjYmcyqM/n9ktj2GCBTuemZ8O142kn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuunYZ%2FbtsGjYmcyqM%2Fn9ktj2GCBTuemZ8O142kn1%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;608&quot; height=&quot;484&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;598&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [IP 주소] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qvTxY/btsGgZN5UJG/sRyzwPAdGgdgcHre0UP7V0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qvTxY/btsGgZN5UJG/sRyzwPAdGgdgcHre0UP7V0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qvTxY/btsGgZN5UJG/sRyzwPAdGgdgcHre0UP7V0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqvTxY%2FbtsGgZN5UJG%2FsRyzwPAdGgdgcHre0UP7V0%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;612&quot; height=&quot;437&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;535&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [검토 + 만들기] 버튼을 클릭하여 Spoke 가상 네트워크 생성을 완료합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.4&amp;nbsp;VNet Peering 구성&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;[가상&amp;nbsp;네트워크]&amp;nbsp;&amp;gt;&amp;nbsp;[설정]&amp;nbsp;&amp;gt;&amp;nbsp;[피어링]&amp;nbsp;&amp;gt;&amp;nbsp;[+&amp;nbsp;추가]&amp;nbsp;버튼을&amp;nbsp;클릭하여&amp;nbsp;피어링&amp;nbsp;구성을&amp;nbsp;진행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zIYK1/btsGhDYlASf/ZqOYvTFKNtIgoDpoKoARsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zIYK1/btsGhDYlASf/ZqOYvTFKNtIgoDpoKoARsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zIYK1/btsGhDYlASf/ZqOYvTFKNtIgoDpoKoARsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzIYK1%2FbtsGhDYlASf%2FZqOYvTFKNtIgoDpoKoARsk%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;637&quot; height=&quot;221&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;295&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 피어링 링크 이름 및 원격 가상 네트워크를 선택한 후 [추가] 버튼을 클릭하여 피어링 구성을 완료합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;769&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0ZuH0/btsGj3122OJ/tw0x4vKueGwg5iXHd86mt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0ZuH0/btsGj3122OJ/tw0x4vKueGwg5iXHd86mt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0ZuH0/btsGj3122OJ/tw0x4vKueGwg5iXHd86mt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0ZuH0%2FbtsGj3122OJ%2Ftw0x4vKueGwg5iXHd86mt0%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;622&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;769&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.5 가상 머신 생성 (Public IP O)&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;[기본&amp;nbsp;사항]&amp;nbsp;탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;715&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo3K3d/btsGjKPgR1t/8xaa9DeR5keTjdCFRQ3AdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo3K3d/btsGjKPgR1t/8xaa9DeR5keTjdCFRQ3AdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo3K3d/btsGjKPgR1t/8xaa9DeR5keTjdCFRQ3AdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo3K3d%2FbtsGjKPgR1t%2F8xaa9DeR5keTjdCFRQ3AdK%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;577&quot; height=&quot;531&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;715&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;774&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkZ7eE/btsGgA1TRpU/dkIgSgwdC4A2KjapyRQ2l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkZ7eE/btsGgA1TRpU/dkIgSgwdC4A2KjapyRQ2l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkZ7eE/btsGgA1TRpU/dkIgSgwdC4A2KjapyRQ2l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkZ7eE%2FbtsGgA1TRpU%2FdkIgSgwdC4A2KjapyRQ2l0%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;576&quot; height=&quot;505&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;678&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [네트워킹] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IWJeC/btsGisu7xdu/pB7aicKJbARAHve0JKPWy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IWJeC/btsGisu7xdu/pB7aicKJbARAHve0JKPWy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IWJeC/btsGisu7xdu/pB7aicKJbARAHve0JKPWy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIWJeC%2FbtsGisu7xdu%2FpB7aicKJbARAHve0JKPWy1%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;606&quot; height=&quot;484&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;604&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [검토 + 만들기] 버튼을 클릭하여 가상 머신 생성을 완료합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.6 가상 머신 생성 (Public IP X) &lt;/span&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;span style=&quot;color: #000000;&quot;&gt;[기본&amp;nbsp;사항]&amp;nbsp;탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;707&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ERNDg/btsGjl3ka3w/FUXjMtRkmckvAkqgfCA9Pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ERNDg/btsGjl3ka3w/FUXjMtRkmckvAkqgfCA9Pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ERNDg/btsGjl3ka3w/FUXjMtRkmckvAkqgfCA9Pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FERNDg%2FbtsGjl3ka3w%2FFUXjMtRkmckvAkqgfCA9Pk%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;614&quot; height=&quot;567&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;707&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;770&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CaDZt/btsGgzu87Nd/N7vEFUIZLv3PsKBLCHmBU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CaDZt/btsGgzu87Nd/N7vEFUIZLv3PsKBLCHmBU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CaDZt/btsGgzu87Nd/N7vEFUIZLv3PsKBLCHmBU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCaDZt%2FbtsGgzu87Nd%2FN7vEFUIZLv3PsKBLCHmBU1%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;617&quot; height=&quot;521&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;650&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[네트워킹] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2zEEe/btsGgcNHcAw/QRAxNsmwuHgta1NBfxBcDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2zEEe/btsGgcNHcAw/QRAxNsmwuHgta1NBfxBcDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2zEEe/btsGgcNHcAw/QRAxNsmwuHgta1NBfxBcDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2zEEe%2FbtsGgcNHcAw%2FQRAxNsmwuHgta1NBfxBcDk%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;624&quot; height=&quot;497&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;604&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 버튼을 클릭하여 가상 머신 생성을 완료합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Jenkins 설치 - Spoke 가상 머신 &lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.1 Spoke 가상 머신에 접근 &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Local PC에서 Hub 가상 머신에 붙은 Public IP를 통해 Hub 가상 머신에 접근한 후, 가상 머신 내에서 Remote Desktop Connection을 통해 Spoke 가상 머신에 접근합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2249&quot; data-origin-height=&quot;1429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJuxL4/btsGjFtQrHV/jPmC5kLenYTBk2gYlm3xbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJuxL4/btsGjFtQrHV/jPmC5kLenYTBk2gYlm3xbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJuxL4/btsGjFtQrHV/jPmC5kLenYTBk2gYlm3xbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJuxL4%2FbtsGjFtQrHV%2FjPmC5kLenYTBk2gYlm3xbK%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;2249&quot; height=&quot;1429&quot; data-origin-width=&quot;2249&quot; data-origin-height=&quot;1429&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.2 Java 설치 &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkins를 설치하기 전에, 먼저 Spoke 가상 머신에 Java를 설치해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러나 Oracle 페이지로 이동해서 Java를 다운로드 받기 위한 버튼을 누르면 Oracle에 로그인하는 페이지로 리다이렉트 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 계정이 없을 경우,&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.jenkins.io/doc/book/installing/windows/&quot;&gt;https://www.jenkins.io/doc/book/installing/windows/&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에서 Open JDK를 다운로드 받을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 페이지로 이동해 하기 과정을 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [java SE 21]을 클릭한 후 msi 파일을 다운로드 합니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PjHXd/btsGhoNJE5d/RwWzhujyrwidZKjTHLxByk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PjHXd/btsGhoNJE5d/RwWzhujyrwidZKjTHLxByk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PjHXd/btsGhoNJE5d/RwWzhujyrwidZKjTHLxByk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPjHXd%2FbtsGhoNJE5d%2FRwWzhujyrwidZKjTHLxByk%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;579&quot; height=&quot;445&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;558&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 다운 받은 파일을 압축 해제한 후 압축 해제된 폴더의 경로를 복사합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R24hj/btsGjRHzktz/XEyLwZ1Fda2kjhLDRNQBs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R24hj/btsGjRHzktz/XEyLwZ1Fda2kjhLDRNQBs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R24hj/btsGjRHzktz/XEyLwZ1Fda2kjhLDRNQBs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR24hj%2FbtsGjRHzktz%2FXEyLwZ1Fda2kjhLDRNQBs0%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;679&quot; height=&quot;623&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;623&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 시스템 환경 변수에 해당 경로를 등록하기 위해 로고 키를 눌러 시스템 환경 변수 편집 (Edit the system environment variables)를 클릭합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qoMDk/btsGhUS5kUY/UrroKVJEH3dRH9gcrz3QGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qoMDk/btsGhUS5kUY/UrroKVJEH3dRH9gcrz3QGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qoMDk/btsGhUS5kUY/UrroKVJEH3dRH9gcrz3QGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqoMDk%2FbtsGhUS5kUY%2FUrroKVJEH3dRH9gcrz3QGk%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;740&quot; height=&quot;283&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;437&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [환경 변수 (Environment Variables)] &amp;gt; [새로 만들기 (New)] 버튼을 클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1753&quot; data-origin-height=&quot;964&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBtZ6v/btsGizAUfI5/8UC284Mi4kwLyUwZEkoxbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBtZ6v/btsGizAUfI5/8UC284Mi4kwLyUwZEkoxbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBtZ6v/btsGizAUfI5/8UC284Mi4kwLyUwZEkoxbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBtZ6v%2FbtsGizAUfI5%2F8UC284Mi4kwLyUwZEkoxbK%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;427&quot; data-origin-width=&quot;1753&quot; data-origin-height=&quot;964&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 변수 이름 (Variable name)에 JAVA_HOME을, 변수 값 (Variable value)에 복사해 둔 경로를 입력합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;922&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDnKjy/btsGiyBXQdm/d0qwVIUQjhp5fqT8aqcTF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDnKjy/btsGiyBXQdm/d0qwVIUQjhp5fqT8aqcTF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDnKjy/btsGiyBXQdm/d0qwVIUQjhp5fqT8aqcTF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDnKjy%2FbtsGiyBXQdm%2Fd0qwVIUQjhp5fqT8aqcTF1%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;646&quot; height=&quot;181&quot; data-origin-width=&quot;922&quot; data-origin-height=&quot;258&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Path라는 변수에 등록한 환경 변수에 대한 bin 경로를 추가해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1826&quot; data-origin-height=&quot;967&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHpZhD/btsGhVEqN9C/EUYVSlpTko4Yuul1lV9PIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHpZhD/btsGhVEqN9C/EUYVSlpTko4Yuul1lV9PIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHpZhD/btsGhVEqN9C/EUYVSlpTko4Yuul1lV9PIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHpZhD%2FbtsGhVEqN9C%2FEUYVSlpTko4Yuul1lV9PIk%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;760&quot; height=&quot;402&quot; data-origin-width=&quot;1826&quot; data-origin-height=&quot;967&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cmd&amp;nbsp;창에서&amp;nbsp;&lt;i&gt;&lt;b&gt;java&amp;nbsp;-version&lt;/b&gt;&lt;/i&gt;&amp;nbsp;명령어를&amp;nbsp;입력하여&amp;nbsp;Java&amp;nbsp;버전이&amp;nbsp;정상적으로&amp;nbsp;조회되는지&amp;nbsp;확인합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qyP36/btsGh7krGWe/70Q24r7mTvpIib4dENDqNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qyP36/btsGh7krGWe/70Q24r7mTvpIib4dENDqNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qyP36/btsGh7krGWe/70Q24r7mTvpIib4dENDqNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqyP36%2FbtsGh7krGWe%2F70Q24r7mTvpIib4dENDqNk%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;578&quot; height=&quot;174&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.3 Jenkins 설치 &lt;/span&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;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.jenkins.io/download/#downloading-jenkins&quot;&gt;https://www.jenkins.io/download/#downloading-jenkins&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 이동하여 Windows용 LTS 버전을 다운로드 받습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;953&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UnJvo/btsGip6dBlO/2MnVjuqSiWMYhTCrxlelZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UnJvo/btsGip6dBlO/2MnVjuqSiWMYhTCrxlelZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UnJvo/btsGip6dBlO/2MnVjuqSiWMYhTCrxlelZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUnJvo%2FbtsGip6dBlO%2F2MnVjuqSiWMYhTCrxlelZk%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;720&quot; height=&quot;376&quot; data-origin-width=&quot;1824&quot; data-origin-height=&quot;953&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자동으로 다운로드 되는 &lt;i&gt;jenkins.msi &lt;/i&gt;파일을 실행하여 설치를 진행합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Service Logon Credentials 창이 나올 때까지 Next를 누른 후 [Run service as a local or domain user :] 옵션을 사용합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(단, 해당 옵션에서 사용되는 Account는 미리 해당 가상 머신에 생성되어 있어야 합니다. [Settings] &amp;gt; [Accounts] &amp;gt; [Add account]에서 생성 가능)&lt;br /&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ppX1b/btsGif3ILHr/x9i5arSYotlXOfPmku35kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ppX1b/btsGif3ILHr/x9i5arSYotlXOfPmku35kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ppX1b/btsGif3ILHr/x9i5arSYotlXOfPmku35kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FppX1b%2FbtsGif3ILHr%2Fx9i5arSYotlXOfPmku35kK%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;566&quot; height=&quot;438&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: left;&quot;&gt; [Troubleshooting]&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 account가 있음에도 하기와 같은 에러가 발생할 경우,&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;This account either does not have the privilege to logon as a service or the account was unable to be verified. &lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[로컬 보안 정책 (Local Security Policy)] &amp;gt; [로컬 정책 (Local Policies)] &amp;gt; [사용자 권한 할당 (User Rights Assignment)] &amp;gt; [서비스로 로그온 (Log on as a service)]으로 이동합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VSLnD/btsGj2ozjmS/skfrhUCPk0nToTksOtEt01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VSLnD/btsGj2ozjmS/skfrhUCPk0nToTksOtEt01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VSLnD/btsGj2ozjmS/skfrhUCPk0nToTksOtEt01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVSLnD%2FbtsGj2ozjmS%2FskfrhUCPk0nToTksOtEt01%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;524&quot; height=&quot;332&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;474&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [Add User or Group] 버튼을 클릭한 후 해당 account를 추가해 줍니다. 그 후 [Apply] 버튼을 클릭하여 변경 사항을 저장합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3grmh/btsGiyvfEf7/6wGnCwC5O9r4QFYhXVlw60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3grmh/btsGiyvfEf7/6wGnCwC5O9r4QFYhXVlw60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3grmh/btsGiyvfEf7/6wGnCwC5O9r4QFYhXVlw60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3grmh%2FbtsGiyvfEf7%2F6wGnCwC5O9r4QFYhXVlw60%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;437&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;529&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Port Selection 창이 나올 때까지 Next를 누른 후 사용할 Port를 입력하고 Test 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKc7R8/btsGj2hNUpB/bk3Wz9aWHopKmh2NdxBKv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKc7R8/btsGj2hNUpB/bk3Wz9aWHopKmh2NdxBKv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKc7R8/btsGj2hNUpB/bk3Wz9aWHopKmh2NdxBKv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKc7R8%2FbtsGj2hNUpB%2Fbk3Wz9aWHopKmh2NdxBKv1%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;393&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;590&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Java Home Directory에 대해 default 경로를 실제 Java가 설치된 경로로 변경해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2tCsl/btsGiZlPRML/wzPzqqvWKPRXEgUiMcsx31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2tCsl/btsGiZlPRML/wzPzqqvWKPRXEgUiMcsx31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2tCsl/btsGiZlPRML/wzPzqqvWKPRXEgUiMcsx31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2tCsl%2FbtsGiZlPRML%2FwzPzqqvWKPRXEgUiMcsx31%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;398&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;594&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 모든 설정이 완료되면 [Install] 버튼을 클릭하여 설치를 완료합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.4 Jenkins 초기 설정&lt;/span&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;span style=&quot;color: #000000;&quot;&gt; 인터넷 창에서 가상 머신 private ip:8080을 입력하여 Jenkins Admin 페이지에 접근합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 초기 비밀번호를 확인하기 위해 해당 페이지에 출력된 경로를 복사하여 해당 파일을 엽니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2198&quot; data-origin-height=&quot;1095&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cspVsD/btsGisoimi5/AaDosR0OhzCEKWdfTk2zck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cspVsD/btsGisoimi5/AaDosR0OhzCEKWdfTk2zck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cspVsD/btsGisoimi5/AaDosR0OhzCEKWdfTk2zck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcspVsD%2FbtsGisoimi5%2FAaDosR0OhzCEKWdfTk2zck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683&quot; height=&quot;340&quot; data-origin-width=&quot;2198&quot; data-origin-height=&quot;1095&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 복사한 비밀번호를 Jenkins Admin 페이지에 입력하여 접속합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgj52k/btsGjnz3NWU/78Q2K2qjgdOEXz1swKBpS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgj52k/btsGjnz3NWU/78Q2K2qjgdOEXz1swKBpS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgj52k/btsGjnz3NWU/78Q2K2qjgdOEXz1swKBpS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcgj52k%2FbtsGjnz3NWU%2F78Q2K2qjgdOEXz1swKBpS1%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;420&quot; height=&quot;166&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;206&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 필요한 Plugin은 추후에 설치하면 되기 때문에 [Install suggested plugins]를 클릭합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;902&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FFvlw/btsGidERMil/WvN5lDte8dTKCElL0kZYZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FFvlw/btsGidERMil/WvN5lDte8dTKCElL0kZYZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FFvlw/btsGidERMil/WvN5lDte8dTKCElL0kZYZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFFvlw%2FbtsGidERMil%2FWvN5lDte8dTKCElL0kZYZK%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;528&quot; height=&quot;324&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;902&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Create First Admin User 페이지는 필요한 경우 새로 생성하거나, [Skip and continue as admin] 버튼을 클릭하여 건너뜁니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;995&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wAivt/btsGiX9mD7t/TmlLlk4drLzwKzV3kUSKRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wAivt/btsGiX9mD7t/TmlLlk4drLzwKzV3kUSKRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wAivt/btsGiX9mD7t/TmlLlk4drLzwKzV3kUSKRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwAivt%2FbtsGiX9mD7t%2FTmlLlk4drLzwKzV3kUSKRK%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;278&quot; data-origin-width=&quot;995&quot; data-origin-height=&quot;538&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Jenkins URL은 default 값이 맞는지 확인하고 Save and Finish를 클릭하여 Jenkins를 시작합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 과정이 제대로 진행되었다면 Jenkins 설치가 완료된 것입니다 !&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 Windows VM에 Jenkins를 설치하는 과정에 대해 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Linux VM보다 Java에 대한 부분에서 좀 더 신경을 써야 하기 때문에 다음에는 그냥 Ubuntu VM에 올리자 라는 생각을 하게 만는 테스트 였습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 글은 Jenkins와 GitHub를 연결하는 부분과, Jenkins Pipeline의 결과물(?)이 어떤 directory에 떨어지는지 확인하는 과정에 대해 다뤄보겠습니다!&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/DevOps</category>
      <category>Azure</category>
      <category>java</category>
      <category>Jenkins</category>
      <category>젠킨스</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/33</guid>
      <comments>https://with-cloud.tistory.com/33#entry33comment</comments>
      <pubDate>Tue, 2 Apr 2024 15:22:13 +0900</pubDate>
    </item>
    <item>
      <title>[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #03 SQL Server 구성</title>
      <link>https://with-cloud.tistory.com/32</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;벚꽃이 개화하면서, 봄이 가까워졌음을 알리는 요즘 인사드립니다 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(아직까지 일교차가 크기에 건강 유의하셔요 &lt;span style=&quot;text-align: start;&quot;&gt; )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 실제 SQL Server 설치과 구성을 위한 단계인 &quot;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;#03&lt;/span&gt;&lt;span&gt; SQL Server 구성&lt;/span&gt;&quot;&lt;/b&gt;에 관한 내용을 다룹니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;&lt;b&gt;#01 ~ 02&lt;/b&gt;&lt;/span&gt; 진행한 초기 구성은 계속되는 과정에서 필수적인 환경으로 아래 링크를 참고하여 함께 팔로잉 해주세요!&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1711944536432&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;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #01 용어 정리 및 구성도 공유 그리고 AD 구축&quot; data-og-description=&quot;안녕하세요. TAK 입니다:)  봄이 부쩍 가까워진 3월에 다시 인사드립니다(^꾸_벅^)  회사 업무로 Azure VM 기반 MSSQL FCI 구성한 적이 있는데.. 이후에 Always ON 가용성 그룹 구성이 자꾸 아른?..거려&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/28?category=1170322&quot; data-og-url=&quot;https://with-cloud.tistory.com/28&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/boekio/hyVGK8Cwq8/SAkOK2w1kkiMCTySc3cKsK/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/bweehO/hyVGGE8wma/5kAgKZqF5nSkpzTDDJ4eIK/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/sRDrG/hyVGSZTARd/xDPhTtRZ5DPeFHm85N3dkk/img.png?width=2000&amp;amp;height=1422&amp;amp;face=0_0_2000_1422&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/28?category=1170322&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/28?category=1170322&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/boekio/hyVGK8Cwq8/SAkOK2w1kkiMCTySc3cKsK/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/bweehO/hyVGGE8wma/5kAgKZqF5nSkpzTDDJ4eIK/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/sRDrG/hyVGSZTARd/xDPhTtRZ5DPeFHm85N3dkk/img.png?width=2000&amp;amp;height=1422&amp;amp;face=0_0_2000_1422');&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;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #01 용어 정리 및 구성도 공유 그리고 AD 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. TAK 입니다:)  봄이 부쩍 가까워진 3월에 다시 인사드립니다(^꾸_벅^)  회사 업무로 Azure VM 기반 MSSQL FCI 구성한 적이 있는데.. 이후에 Always ON 가용성 그룹 구성이 자꾸 아른?..거려&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1711944579344&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c8uxUd/hyVJ3k9uHH/7dvNkNeeK1S3KTo34OonM1/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/HfbNC/hyVGQ139Gm/r7OOm0heUWUc5nzeCS9gwK/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/LfDWN/hyVJRSySIh/WFi4IM34AuoIwZVWlXKCk0/img.png?width=2000&amp;amp;height=1634&amp;amp;face=0_0_2000_1634&quot; data-og-url=&quot;https://with-cloud.tistory.com/30&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/30&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-description=&quot;안녕하세요. TAK 입니다:) 일교차가 큰 요즘.. 다들 잘 지내고 계신가요? 감기 조심하세요!  이어지는 포스팅인 만큼 흐름을 이어가고자 빠르게? 다시 찾아왔습니다  (저만의 초기 감기 꿀팁을&quot; data-og-title=&quot;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #02 Failover Cluster 구성&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://with-cloud.tistory.com/30&quot; data-source-url=&quot;https://with-cloud.tistory.com/30&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c8uxUd/hyVJ3k9uHH/7dvNkNeeK1S3KTo34OonM1/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/HfbNC/hyVGQ139Gm/r7OOm0heUWUc5nzeCS9gwK/img.png?width=800&amp;amp;height=441&amp;amp;face=0_0_800_441,https://scrap.kakaocdn.net/dn/LfDWN/hyVJRSySIh/WFi4IM34AuoIwZVWlXKCk0/img.png?width=2000&amp;amp;height=1634&amp;amp;face=0_0_2000_1634');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #02 Failover Cluster 구성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. TAK 입니다:) 일교차가 큰 요즘.. 다들 잘 지내고 계신가요? 감기 조심하세요!  이어지는 포스팅인 만큼 흐름을 이어가고자 빠르게? 다시 찾아왔습니다  (저만의 초기 감기 꿀팁을&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 시작하겠습니다!&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;008&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/008.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/008.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. SQL Server&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. SQL Server 설치&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 해당 과정에서는 SQL Server 2022 및 개발자 버전을 설치하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL Server 2022 다운로드&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[개발자] 선택&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;letter-spacing: 0px; color: #000000;&quot; href=&quot;https://www.microsoft.com/ko-kr/sql-server/sql-server-downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.microsoft.com/ko-kr/sql-server/sql-server-downloads&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;699&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBX3EQ/btsGf9IGfy9/GAK36zK7pU2K2IDonRZm7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBX3EQ/btsGf9IGfy9/GAK36zK7pU2K2IDonRZm7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBX3EQ/btsGf9IGfy9/GAK36zK7pU2K2IDonRZm7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBX3EQ%2FbtsGf9IGfy9%2FGAK36zK7pU2K2IDonRZm7K%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;2000&quot; height=&quot;699&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;699&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL Server 2022 에 대한 세부 사항 Docs&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;letter-spacing: 0px; color: #000000;&quot; href=&quot;https://learn.microsoft.com/ko-kr/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/ko-kr/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1711945786541&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SQL Server 2022의 버전 및 지원하는 기능 - SQL Server&quot; data-og-description=&quot;SQL Server 2022의 버전 및 지원하는 기능&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cAY8f6/hyVJVgmqHO/KElALxrJTpkwHk6GXtD27K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cAY8f6/hyVJVgmqHO/KElALxrJTpkwHk6GXtD27K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SQL Server 2022의 버전 및 지원하는 기능 - SQL Server&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SQL Server 2022의 버전 및 지원하는 기능&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL Server에서 다운로드 파일 실행 후&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Download Media] 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;1136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWN0wd/btsGd8xBFou/UWrvKgZ1IFQgTjGSNZsuT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWN0wd/btsGd8xBFou/UWrvKgZ1IFQgTjGSNZsuT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWN0wd/btsGd8xBFou/UWrvKgZ1IFQgTjGSNZsuT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWN0wd%2FbtsGd8xBFou%2FUWrvKgZ1IFQgTjGSNZsuT1%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;1440&quot; height=&quot;1136&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1136&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;언어 및 설치 패키지&lt;b&gt;(ISO)&lt;/b&gt; 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIHlU7/btsGeQwcX5R/6fk6A5g1nlHeNk3QlpygZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIHlU7/btsGeQwcX5R/6fk6A5g1nlHeNk3QlpygZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIHlU7/btsGeQwcX5R/6fk6A5g1nlHeNk3QlpygZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIHlU7%2FbtsGeQwcX5R%2F6fk6A5g1nlHeNk3QlpygZ1%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;1440&quot; height=&quot;1142&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1142&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다운로드 후, &lt;b&gt;ISO 이미지 파일 MOUNT&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;721&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nvIm9/btsGexDGX5n/KkFqTbIJeYTt63VggCTsA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nvIm9/btsGexDGX5n/KkFqTbIJeYTt63VggCTsA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nvIm9/btsGexDGX5n/KkFqTbIJeYTt63VggCTsA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnvIm9%2FbtsGexDGX5n%2FKkFqTbIJeYTt63VggCTsA0%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;1440&quot; height=&quot;721&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;721&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일 탐색기 내, 정상적으로 마운트 여부 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후, setup 실행 파일을 &lt;b&gt;[관리자 권한으로 실행]&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;762&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsDO8I/btsGgBZoArK/wGrkCEr5oBoe4fIZ8e9udK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsDO8I/btsGgBZoArK/wGrkCEr5oBoe4fIZ8e9udK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsDO8I/btsGgBZoArK/wGrkCEr5oBoe4fIZ8e9udK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsDO8I%2FbtsGgBZoArK%2FwGrkCEr5oBoe4fIZ8e9udK%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;1440&quot; height=&quot;762&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;762&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2. SQL Server 설치 Configuration&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: SQL Sever 설치 시, Installation Center를 통해 세부 사항을 설정하여 설치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;신규 SQL Server 설치 관련 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1082&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brQSFe/btsGeQJPnes/heifwK3lqbj2oJQdjIHgT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brQSFe/btsGeQJPnes/heifwK3lqbj2oJQdjIHgT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brQSFe/btsGeQJPnes/heifwK3lqbj2oJQdjIHgT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrQSFe%2FbtsGeQJPnes%2FheifwK3lqbj2oJQdjIHgT0%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;1440&quot; height=&quot;1082&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1082&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Free Edition 선택&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 단계에서 다운로드를 &lt;b&gt;개발자(Developer)&lt;/b&gt; 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;1265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1bst6/btsGhRHykeZ/rJqzUkTvnWqyFHL9k2NCQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1bst6/btsGhRHykeZ/rJqzUkTvnWqyFHL9k2NCQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1bst6/btsGhRHykeZ/rJqzUkTvnWqyFHL9k2NCQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1bst6%2FbtsGhRHykeZ%2FrJqzUkTvnWqyFHL9k2NCQk%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;1440&quot; height=&quot;1265&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1265&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라이센스 조건에 대한 동의&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LSL5R/btsGfizmGar/1Kpwaw3bglbWKkICjqlYmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LSL5R/btsGfizmGar/1Kpwaw3bglbWKkICjqlYmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LSL5R/btsGfizmGar/1Kpwaw3bglbWKkICjqlYmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLSL5R%2FbtsGfizmGar%2F1Kpwaw3bglbWKkICjqlYmK%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;1440&quot; height=&quot;1268&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1268&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Microsoft Update(선택 사항)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lCYvM/btsGfM797G4/YXk8KFbKBZnlFtWPqAJIZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lCYvM/btsGfM797G4/YXk8KFbKBZnlFtWPqAJIZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lCYvM/btsGfM797G4/YXk8KFbKBZnlFtWPqAJIZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlCYvM%2FbtsGfM797G4%2FYXk8KFbKBZnlFtWPqAJIZK%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;1440&quot; height=&quot;1265&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1265&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Install Rules (default 선택 및 Next)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZmowY/btsGgCxqHWU/EJxBUmsOqpEmxjWWyoKo8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZmowY/btsGgCxqHWU/EJxBUmsOqpEmxjWWyoKo8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZmowY/btsGgCxqHWU/EJxBUmsOqpEmxjWWyoKo8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZmowY%2FbtsGgCxqHWU%2FEJxBUmsOqpEmxjWWyoKo8k%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;1440&quot; height=&quot;1263&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1263&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Feature Selection&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Database Engine Services]&lt;/b&gt; 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;1268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7kv7z/btsGeA1Fm4q/RPHZ4sgEWfOvFRLLbzNg6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7kv7z/btsGeA1Fm4q/RPHZ4sgEWfOvFRLLbzNg6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7kv7z/btsGeA1Fm4q/RPHZ4sgEWfOvFRLLbzNg6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7kv7z%2FbtsGeA1Fm4q%2FRPHZ4sgEWfOvFRLLbzNg6k%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;1440&quot; height=&quot;1268&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1268&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Instance Configuration&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Default instance] 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;1262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCtvBQ/btsGgaOzsnF/oweg4C9jep3xCvEvbB2Lq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCtvBQ/btsGgaOzsnF/oweg4C9jep3xCvEvbB2Lq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCtvBQ/btsGgaOzsnF/oweg4C9jep3xCvEvbB2Lq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCtvBQ%2FbtsGgaOzsnF%2Foweg4C9jep3xCvEvbB2Lq0%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;1440&quot; height=&quot;1262&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1262&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server Configuration(Service Accounts)&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;lt;&amp;lt;Browe..&amp;gt;&amp;gt; 선택하여 [SQL Server Agent &amp;amp; SQL Server Database Engine]의 Account Name을 AD 서버의 도메인 관리자 값(tak2on\admintak)으로 설정 후, Password 입력&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;1754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NpB3w/btsGidDAnpU/Mi7SLC5bI7dycJfNoKDIfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NpB3w/btsGidDAnpU/Mi7SLC5bI7dycJfNoKDIfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NpB3w/btsGidDAnpU/Mi7SLC5bI7dycJfNoKDIfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNpB3w%2FbtsGidDAnpU%2FMi7SLC5bI7dycJfNoKDIfK%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;2000&quot; height=&quot;1754&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1754&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;2000&quot; data-origin-height=&quot;1101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oaLEm/btsGfzOCA9z/Iru0Kk1kfmYKHeMsd2baZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oaLEm/btsGfzOCA9z/Iru0Kk1kfmYKHeMsd2baZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oaLEm/btsGfzOCA9z/Iru0Kk1kfmYKHeMsd2baZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoaLEm%2FbtsGfzOCA9z%2FIru0Kk1kfmYKHeMsd2baZ0%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;2000&quot; height=&quot;1101&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1101&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;2000&quot; data-origin-height=&quot;1865&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGc7nz/btsGetO9vEN/XsKHaLwKmdhWKOTXCSMJk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGc7nz/btsGetO9vEN/XsKHaLwKmdhWKOTXCSMJk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGc7nz/btsGetO9vEN/XsKHaLwKmdhWKOTXCSMJk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGc7nz%2FbtsGetO9vEN%2FXsKHaLwKmdhWKOTXCSMJk0%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;2000&quot; height=&quot;1865&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1865&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;2000&quot; data-origin-height=&quot;1103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ygVz3/btsGh3nvO6z/PkDo9DOCj3BdkUOkjrhqkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ygVz3/btsGh3nvO6z/PkDo9DOCj3BdkUOkjrhqkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ygVz3/btsGh3nvO6z/PkDo9DOCj3BdkUOkjrhqkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FygVz3%2FbtsGh3nvO6z%2FPkDo9DOCj3BdkUOkjrhqkK%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;2000&quot; height=&quot;1103&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1103&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Server Configuration(Collation)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 기본&amp;nbsp;서버&amp;nbsp;데이터&amp;nbsp;정렬은&amp;nbsp;SQL&amp;nbsp;Server&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세부 사항은 아래 공식 Docs 참고&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1711949645618&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;데이터 정렬 및 유니코드 지원 - SQL Server&quot; data-og-description=&quot;SQL Server의 데이터 정렬 및 유니코드 지원에 대해 알아봅니다.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver16&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver16&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/y8KO1/hyVJ2zNqg8/tnLgAR9cHqxz7YeySy3Qm1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver16&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/y8KO1/hyVJ2zNqg8/tnLgAR9cHqxz7YeySy3Qm1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;데이터 정렬 및 유니코드 지원 - SQL Server&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SQL Server의 데이터 정렬 및 유니코드 지원에 대해 알아봅니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6yqWp/btsGfeRnmSp/mRMBrbJHeVzfXUwgOQLckk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6yqWp/btsGfeRnmSp/mRMBrbJHeVzfXUwgOQLckk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6yqWp/btsGfeRnmSp/mRMBrbJHeVzfXUwgOQLckk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6yqWp%2FbtsGfeRnmSp%2FmRMBrbJHeVzfXUwgOQLckk%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;2000&quot; height=&quot;1752&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1752&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Database Engine Configuration&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server Configuration&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Mixed Mode 사용하여, AD 도메인 관리자를 SQL Server 시스템 관리자로 함께 등록하여 함께 사용합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000;&quot;&gt;(해당 과정은 테스트이므로 다음과 같이 구성하였지만, 별도의 SQL Server 시스템 관리자를 구성하는 것을 권장드립니다.)&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beuTCd/btsGebONEKr/a3iXma9EatybKldfquatM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beuTCd/btsGebONEKr/a3iXma9EatybKldfquatM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beuTCd/btsGebONEKr/a3iXma9EatybKldfquatM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeuTCd%2FbtsGebONEKr%2Fa3iXma9EatybKldfquatM0%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;2000&quot; height=&quot;1754&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1754&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/ySbH9/btsGgCEe0Kt/Zxjx4Hw0jDiK93soSBHkv0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;1101&quot; data-origin-width=&quot;2000&quot; /&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1865&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj3lvi/btsGe9io1DQ/61mqxZtkfc4vSOHfK0qf61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj3lvi/btsGe9io1DQ/61mqxZtkfc4vSOHfK0qf61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj3lvi/btsGe9io1DQ/61mqxZtkfc4vSOHfK0qf61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj3lvi%2FbtsGe9io1DQ%2F61mqxZtkfc4vSOHfK0qf61%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;2000&quot; height=&quot;1865&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1865&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/0tvc7/btsGhpq8kgX/C16U9BMA4rU4oXW6XTuCBK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;1103&quot; data-origin-width=&quot;2000&quot; /&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1749&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nZCpN/btsGeOFoZ2R/ULzTqZn0ok9kcYDuhOhXck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nZCpN/btsGeOFoZ2R/ULzTqZn0ok9kcYDuhOhXck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nZCpN/btsGeOFoZ2R/ULzTqZn0ok9kcYDuhOhXck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnZCpN%2FbtsGeOFoZ2R%2FULzTqZn0ok9kcYDuhOhXck%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;2000&quot; height=&quot;1749&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1749&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Data Directories&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 실제 사용자가 사용하는 Database의 데이터들에 대한 저장 경로 지정하는 단계입니다. 앞서 설명한 것처럼, Always on의 경우, Database 수준으로 이뤄지는 고가용성 서비스이므로 각 VM에 Attach 한 Data Disk 경로를 지정합니다. (백업 등 디스크 사용이 용이)&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k2JqY/btsGeRvkgGA/4djOtW9mMHDaYCkKu1KHRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k2JqY/btsGeRvkgGA/4djOtW9mMHDaYCkKu1KHRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k2JqY/btsGeRvkgGA/4djOtW9mMHDaYCkKu1KHRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk2JqY%2FbtsGeRvkgGA%2F4djOtW9mMHDaYCkKu1KHRK%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;2000&quot; height=&quot;1768&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/MlRrj/btsGfz2cvxD/8r2nxqXNHkqhSqfYRcRfu1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;2000&quot; data-origin-width=&quot;2000&quot; /&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1757&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4ltGk/btsGeMVe4LK/HKlHYoEZrKoRISoGuvlwj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4ltGk/btsGeMVe4LK/HKlHYoEZrKoRISoGuvlwj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4ltGk/btsGeMVe4LK/HKlHYoEZrKoRISoGuvlwj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4ltGk%2FbtsGeMVe4LK%2FHKlHYoEZrKoRISoGuvlwj0%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;2000&quot; height=&quot;1757&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1757&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TempDB&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 위와 같은 경로로 재정의 합니다.&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1759&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yjVaD/btsGeuN6ou5/avJJ42JlzdcMDVSG8xhQwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yjVaD/btsGeuN6ou5/avJJ42JlzdcMDVSG8xhQwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yjVaD/btsGeuN6ou5/avJJ42JlzdcMDVSG8xhQwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyjVaD%2FbtsGeuN6ou5%2FavJJ42JlzdcMDVSG8xhQwk%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;2000&quot; height=&quot;1759&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1759&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후, 기타 옵션은 Default 값 설정 후, 지금까지 구성 사항을 트리형식으로 확인 후, [Install]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mYgEC/btsGedshnhA/AVmnrMFB6Dy5AI4ZGfkpHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mYgEC/btsGedshnhA/AVmnrMFB6Dy5AI4ZGfkpHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mYgEC/btsGedshnhA/AVmnrMFB6Dy5AI4ZGfkpHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmYgEC%2FbtsGedshnhA%2FAVmnrMFB6Dy5AI4ZGfkpHk%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;2000&quot; height=&quot;1752&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1752&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정상적으로 설치된 것을 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1759&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmj4NI/btsGhUxyyni/KL5XAluLrBxxXhmuItAjk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmj4NI/btsGhUxyyni/KL5XAluLrBxxXhmuItAjk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmj4NI/btsGhUxyyni/KL5XAluLrBxxXhmuItAjk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdmj4NI%2FbtsGhUxyyni%2FKL5XAluLrBxxXhmuItAjk0%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;2000&quot; height=&quot;1759&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1759&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. SSMS&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: SSMS란, Microsoft SQL Server Management Studio의 줄임말로 &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;SQL 인프라를 관리하기 위한 통합 환경입니다. 쉽게 말해, SQL에 접근하여 Database의 데이터를 다룰 수 있는 툴이라고 생각할 수 있습니다.(ex, Heidisql, Dbeaver 등)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다운로드 및 설치&lt;/span&gt;&lt;br /&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://learn.microsoft.com/ko-kr/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16&quot;&gt;SSMS(SQL Server Management Studio) 다운로드 - SQL Server Management Studio (SSMS)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1711950573334&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SSMS(SQL Server Management Studio) 다운로드 - SQL Server Management Studio (SSMS)&quot; data-og-description=&quot;SQL Server 및 Azure SQL 인스턴스를 관리하고 구성하기 위한 최신 버전의 SSMS(SQL Server Management Studio)를 다운로드합니다.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cgZK0n/hyVJTJDkNp/WGLOvBn6Op8kZPVhPdhFyK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cgZK0n/hyVJTJDkNp/WGLOvBn6Op8kZPVhPdhFyK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SSMS(SQL Server Management Studio) 다운로드 - SQL Server Management Studio (SSMS)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SQL Server 및 Azure SQL 인스턴스를 관리하고 구성하기 위한 최신 버전의 SSMS(SQL Server Management Studio)를 다운로드합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;언어 설정(Korean) 제외하고 나머지 Default 값으로 구성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1725&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8KWSf/btsGibTl7Ft/ukihElMOcUjfAzaUnlpp71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8KWSf/btsGibTl7Ft/ukihElMOcUjfAzaUnlpp71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8KWSf/btsGibTl7Ft/ukihElMOcUjfAzaUnlpp71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8KWSf%2FbtsGibTl7Ft%2FukihElMOcUjfAzaUnlpp71%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;2000&quot; height=&quot;1725&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1725&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;접근 확인 및 테스트&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SQL-01 Server에서 위 단계에서 지정한 Account 정보를 입력하여 로그인합니다.&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1082&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVxArl/btsGe8Rl1mT/3eC6Z43prn6YYMfIPvN1Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVxArl/btsGe8Rl1mT/3eC6Z43prn6YYMfIPvN1Jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVxArl/btsGe8Rl1mT/3eC6Z43prn6YYMfIPvN1Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVxArl%2FbtsGe8Rl1mT%2F3eC6Z43prn6YYMfIPvN1Jk%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;2000&quot; height=&quot;1082&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1082&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;샘플 DB 및 테이블(데이터 포함) 생성&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1711950930295&quot; class=&quot;sql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 샘플 데이터베이스 생성
CREATE DATABASE SampleDB;

-- 생성된 데이터베이스로 이동
USE SampleDB;

-- 샘플 Employees 테이블 생성
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    Department NVARCHAR(50),
    Salary DECIMAL(10, 2)
);

-- 데이터 삽입
INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, Salary)
VALUES (1, 'John', 'Doe', 'HR', 55000.00);

INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, Salary)
VALUES (2, 'Jane', 'Smith', 'IT', 60000.00);

INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, Salary)
VALUES (3, 'Bob', 'Johnson', 'Finance', 62000.00);

INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, Salary)
VALUES (4, 'Alice', 'Williams', 'Marketing', 50000.00);

INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, Salary)
VALUES (5, 'Eve', 'Davis', 'IT', 65000.00);​&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Select 문 사용하여 데이터 조회&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ta9ic/btsGeAtStAK/uVBVWf8Mt1EWTu1vBSFaB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ta9ic/btsGeAtStAK/uVBVWf8Mt1EWTu1vBSFaB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ta9ic/btsGeAtStAK/uVBVWf8Mt1EWTu1vBSFaB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fta9ic%2FbtsGeAtStAK%2FuVBVWf8Mt1EWTu1vBSFaB0%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;1440&quot; height=&quot;882&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;882&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금까지 &lt;b&gt;&quot;SQL Server Always On 가용성 그룹 on Azure&quot;&lt;/b&gt;&amp;nbsp;중 &lt;b&gt;SQL Server 설치와 구성 단계&lt;/b&gt;에 대해서 알아보았습니다!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 포스팅에서는 대망의 마지막 단계인 SQL Server의 Always On 가용성 그룹 구성에 대해 살펴보고 시리즈를 마무리하려 합니다. (!! 많관부!!) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번&amp;nbsp;포스팅에서&amp;nbsp;부족한&amp;nbsp;점,&amp;nbsp;궁금한&amp;nbsp;점&amp;nbsp;등&amp;nbsp;자유로운&amp;nbsp;의견을&amp;nbsp;남겨주세요!&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/DB</category>
      <category>always on</category>
      <category>Azure</category>
      <category>cloud</category>
      <category>Database</category>
      <category>Microsoft</category>
      <category>mssql</category>
      <category>MSSQL Always on 가용성 그룹</category>
      <category>sql sever</category>
      <category>가용성 그룹</category>
      <category>고가용성</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/32</guid>
      <comments>https://with-cloud.tistory.com/32#entry32comment</comments>
      <pubDate>Mon, 1 Apr 2024 15:05:36 +0900</pubDate>
    </item>
    <item>
      <title>Azure Cloud Shell에 Private하게 접근하기 (1)</title>
      <link>https://with-cloud.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;오늘은 Azure Cloud Shell에 Private하게 접근하는 방법에 대해 알아보겠습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;결과부터 말하자면, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Local PC에서 Cloud Shell에 접근하는 것 &lt;b&gt;자체&lt;/b&gt;를 제어하는 것은 하기에 적은 테스트 방법으로는 불가합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Microsoft의 공식 문서에 따르면, Cloud Shell에 대한 접근 제어는 &lt;i&gt;ux.console.azure.com&lt;/i&gt; 이라는 도메인에 대한 액세스를 제어함으로서 가능하다고 합니다. (&lt;a href=&quot;https://learn.microsoft.com/ko-kr/azure/cloud-shell/faq-troubleshooting#block-cloud-shell-in-a-locked-down-network-environment&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/ko-kr/azure/cloud-shell/faq-troubleshooting#block-cloud-shell-in-a-locked-down-network-environment&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 가상 네트워크 즉, 허용된 가상 네트워크 대역에서만 Cloud Shell을 실행할 수 있도록, Local PC에서는 Cloud Shell에 접근이 되어도 정상적으로 Command를 날리지 못하게 하도록 하는 방법을 찾기 위해 이번 테스트를 수행해 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1711944933730&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Azure Cloud Shell FAQ(질문과 대답)&quot; data-og-description=&quot;이 문서에서는 일반적인 질문에 답변하고 Cloud Shell 문제를 해결하는 방법을 설명합니다.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/azure/cloud-shell/faq-troubleshooting#block-cloud-shell-in-a-locked-down-network-environment&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/azure/cloud-shell/faq-troubleshooting&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ba4Qdn/hyVGNK0wdl/0GT6Rkdjfy1sldUgZEwabk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/azure/cloud-shell/faq-troubleshooting#block-cloud-shell-in-a-locked-down-network-environment&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/azure/cloud-shell/faq-troubleshooting#block-cloud-shell-in-a-locked-down-network-environment&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ba4Qdn/hyVGNK0wdl/0GT6Rkdjfy1sldUgZEwabk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Azure Cloud Shell FAQ(질문과 대답)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 문서에서는 일반적인 질문에 답변하고 Cloud Shell 문제를 해결하는 방법을 설명합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.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;color: #000000;&quot;&gt;하기 테스트는 가상 네트워크 내에 Cloud Shell을 배포하는 방법에 대한 내용을 다루고 있음을 말씀드리며 이번 글을 시작해 보겠습니다 !&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Azure Cloud Shell이란?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 Azure Cloud Shell이 무엇인지에 대해 알아보고 가겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Cloud Shell은 Azure의 클라우드 기반 Command Line 환경입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure 리소스를 관리하기 위해 브라우저에서 액세스할 수 있는 인증된 대화형 터미널로 Bash, Powershell 두 가지 환경이 제공됩니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 로컬 환경에서 Azure CLI를 설치하거나 환경을 구성하지 않고도 Azure를 관리할 수 있습니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Portal (&lt;/span&gt;&lt;a href=&quot;https://portal.azure.com/#home&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://portal.azure.com/&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)에 접근하면 하기 스크린샷과 같은 아이콘이 우측 상단에 보입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2delJ/btsGeedr98B/GEYc9VhBxaGBpVxC0OTOl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2delJ/btsGeedr98B/GEYc9VhBxaGBpVxC0OTOl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2delJ/btsGeedr98B/GEYc9VhBxaGBpVxC0OTOl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2delJ%2FbtsGeedr98B%2FGEYc9VhBxaGBpVxC0OTOl0%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;820&quot; height=&quot;280&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이게 바로 Azure Cloud Shell로, Azure 환경에 대한 관리를 웹 상에서 간단하게 할 수 있는 Command Line 도구입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 가상 네트워크에서 Cloud Shell 사용하기 - Private Endpoint&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫 번째로 Cloud Shell이 사용하는 Storage Account의 Files에 대해 private endpoint를 생성하면 Local PC에서 접근이 어렵지 않을까 하는 생각에 테스트를 진행해 보았습니다.&amp;nbsp;&lt;/span&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2.1 Azure Cloud Shell 용 Storage Account 생성하기&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞서 설명 드린 것과 같이 Azure Portal의 우측 상단에서 Cloud Shell을 실행합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2delJ/btsGeedr98B/GEYc9VhBxaGBpVxC0OTOl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2delJ/btsGeedr98B/GEYc9VhBxaGBpVxC0OTOl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2delJ/btsGeedr98B/GEYc9VhBxaGBpVxC0OTOl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2delJ%2FbtsGeedr98B%2FGEYc9VhBxaGBpVxC0OTOl0%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;820&quot; height=&quot;280&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Cloud Shell을 사용하기 위해서는 새로운 Storage Account를 생성해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KtuMP/btsGesP7Om8/gMExuB0BjkNAp7HPbSE510/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KtuMP/btsGesP7Om8/gMExuB0BjkNAp7HPbSE510/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KtuMP/btsGesP7Om8/gMExuB0BjkNAp7HPbSE510/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKtuMP%2FbtsGesP7Om8%2FgMExuB0BjkNAp7HPbSE510%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;702&quot; height=&quot;238&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위와 같이 [새로 만들기] 옵션을 클릭하여 Storage Account와 리소스 그룹을 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2.2 가상 네트워크 생성하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Private Endpoint를 생성하기 위해서 가상 네트워크를 먼저 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N8Xln/btsGeLomEBJ/O8w68pXKCDDkAE6J9u7D30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N8Xln/btsGeLomEBJ/O8w68pXKCDDkAE6J9u7D30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N8Xln/btsGeLomEBJ/O8w68pXKCDDkAE6J9u7D30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN8Xln%2FbtsGeLomEBJ%2FO8w68pXKCDDkAE6J9u7D30%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;670&quot; height=&quot;537&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;896&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[IP 주소] 탭&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2225&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cofdq9/btsGehgSFXL/mFwfHgZmKtQaZpea0NmMMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cofdq9/btsGehgSFXL/mFwfHgZmKtQaZpea0NmMMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cofdq9/btsGehgSFXL/mFwfHgZmKtQaZpea0NmMMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcofdq9%2FbtsGehgSFXL%2FmFwfHgZmKtQaZpea0NmMMk%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;2225&quot; height=&quot;655&quot; data-origin-width=&quot;2225&quot; data-origin-height=&quot;655&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭을 클릭하여 유효성을 검사한 후 가상 네트워크를 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2.3 Storage Account에 Private Endpoint 연결하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cloud Shell 실행 시 생성한 Storage Account의 [공용 네트워크 액세스] 상태는 기본적으로 &lt;i&gt;&quot;모든 네트워크에서 사용&quot;&lt;/i&gt;&lt;br /&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공용 네트워크 액세스를 차단하기 위해 [공용 네트워크 액세스] 상태를&amp;nbsp;&lt;i&gt;&quot;사용 안 함&quot;&lt;/i&gt;으로 변경해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Portal로 이동하여 [Storage Account] &amp;gt; [보안 + 네트워킹] &amp;gt; [네트워킹] 탭 &amp;gt; [방화벽 및 가상 네트워크]에서 공용 네트워크 액세스에 대한 옵션을 [사용 안 함]으로 변경합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d5YveU/btsGhSTYbbz/AnEIl7Yi8X7MZIrLkWqDr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d5YveU/btsGhSTYbbz/AnEIl7Yi8X7MZIrLkWqDr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d5YveU/btsGhSTYbbz/AnEIl7Yi8X7MZIrLkWqDr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd5YveU%2FbtsGhSTYbbz%2FAnEIl7Yi8X7MZIrLkWqDr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;736&quot; height=&quot;409&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[저장] 버튼을 클릭하여 해당 내용을 저장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음으로 [프라이빗&amp;nbsp;엔드포인트]&amp;nbsp;연결&amp;nbsp;탭을&amp;nbsp;클릭하여&amp;nbsp;Storage&amp;nbsp;Account에&amp;nbsp;대한&amp;nbsp;Private&amp;nbsp;Endpoint를&amp;nbsp;생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[기본 사항] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfsQod/btsGefwBaIZ/M9T0Nc5pH7owghvTN6pDx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfsQod/btsGefwBaIZ/M9T0Nc5pH7owghvTN6pDx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfsQod/btsGefwBaIZ/M9T0Nc5pH7owghvTN6pDx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfsQod%2FbtsGefwBaIZ%2FM9T0Nc5pH7owghvTN6pDx1%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;707&quot; height=&quot;415&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;675&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[리소스] 탭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YgUbb/btsGgztQSLa/Q92pMlIIFqkBSAwwFnCCqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YgUbb/btsGgztQSLa/Q92pMlIIFqkBSAwwFnCCqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YgUbb/btsGgztQSLa/Q92pMlIIFqkBSAwwFnCCqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYgUbb%2FbtsGgztQSLa%2FQ92pMlIIFqkBSAwwFnCCqk%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;696&quot; height=&quot;332&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;550&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[가상 네트워크] 탭&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cH9YcO/btsGg1Rk9Sw/sfdcBCRxKlZCSNJtCbhiXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cH9YcO/btsGg1Rk9Sw/sfdcBCRxKlZCSNJtCbhiXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cH9YcO/btsGg1Rk9Sw/sfdcBCRxKlZCSNJtCbhiXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcH9YcO%2FbtsGg1Rk9Sw%2FsfdcBCRxKlZCSNJtCbhiXK%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;681&quot; height=&quot;286&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;480&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[DNS] 탭&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rR4T0/btsGeMU7j4W/Rvwzi8lWDsb07zoVOQTyk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rR4T0/btsGeMU7j4W/Rvwzi8lWDsb07zoVOQTyk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rR4T0/btsGeMU7j4W/Rvwzi8lWDsb07zoVOQTyk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrR4T0%2FbtsGeMU7j4W%2FRvwzi8lWDsb07zoVOQTyk0%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;680&quot; height=&quot;306&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위와 같은 설정을 마무리한 후 [검토 + 만들기] 탭으로 이동하여 Private Endpoint 생성을 완료합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2.4 Local PC에서 Cloud Shell 접근하기&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cloud Shell을 실행한 후 &lt;span&gt;⚙️&lt;/span&gt; 버튼을 클릭하여 [사용자 설정 다시 설정] 버튼을 클릭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7tUO9/btsGfyvlVTV/7B4vclleen7K77ckzwvZok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7tUO9/btsGfyvlVTV/7B4vclleen7K77ckzwvZok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7tUO9/btsGfyvlVTV/7B4vclleen7K77ckzwvZok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7tUO9%2FbtsGfyvlVTV%2F7B4vclleen7K77ckzwvZok%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;184&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 설정 다시 설정 창이 표시되면 [초기화]를 클릭합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eArYd6/btsGeMOoC8F/2Zb5WhWlSGSUmKpxbrdqG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eArYd6/btsGeMOoC8F/2Zb5WhWlSGSUmKpxbrdqG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eArYd6/btsGeMOoC8F/2Zb5WhWlSGSUmKpxbrdqG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeArYd6%2FbtsGeMOoC8F%2F2Zb5WhWlSGSUmKpxbrdqG0%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;564&quot; height=&quot;167&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;171&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;Azure Cloud Shell 시작 창이 표시되면 [Bash]를 클릭합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jgvv0/btsGefDnfna/U8B2424jaulHqBvx4xn0P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jgvv0/btsGefDnfna/U8B2424jaulHqBvx4xn0P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jgvv0/btsGefDnfna/U8B2424jaulHqBvx4xn0P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJgvv0%2FbtsGefDnfna%2FU8B2424jaulHqBvx4xn0P0%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;607&quot; height=&quot;231&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;271&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 한번, 스토리지와의 연결을 위해 하기와 같은 설정을 진행합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 [새로 만들기] 옵션이 아닌 [기존 항목 사용] 옵션을 사용해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;275&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9fAPO/btsGeyJve66/WfGFhpPP2XGdNWFNFKLqO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9fAPO/btsGeyJve66/WfGFhpPP2XGdNWFNFKLqO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9fAPO/btsGeyJve66/WfGFhpPP2XGdNWFNFKLqO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9fAPO%2FbtsGeyJve66%2FWfGFhpPP2XGdNWFNFKLqO0%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;748&quot; height=&quot;275&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;275&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과연! 결과는 어떨까요?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUfc5N/btsGhQaSy3q/RnWvnqVH1OBIuiwlOJuGmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUfc5N/btsGhQaSy3q/RnWvnqVH1OBIuiwlOJuGmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUfc5N/btsGhQaSy3q/RnWvnqVH1OBIuiwlOJuGmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUfc5N%2FbtsGhQaSy3q%2FRnWvnqVH1OBIuiwlOJuGmK%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;1048&quot; height=&quot;230&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;230&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;접근은 가능하지만 Azure file share에 접근이 되지 않아 cloud drive를 이용할 수 없다는 Error Message가 출력됩니다.&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;이 경우 Azure CLI 명령어는 사용할 수 있으나 git clone을 통해 가져온 파일의 경우는 Azure file share에 영구히 저장되지 않게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 테스트를 한번 진행해 보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;az group list -o table&lt;/b&gt; 명령어를 통해 현재 구독에 존재하는 리소스 그룹의 리스트를 테이블 형식으로 확인해 보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXJJbT/btsGfwdi6dJ/vZ3qbAa7WvQZzXiodf7Yq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXJJbT/btsGfwdi6dJ/vZ3qbAa7WvQZzXiodf7Yq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXJJbT/btsGfwdi6dJ/vZ3qbAa7WvQZzXiodf7Yq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXJJbT%2FbtsGfwdi6dJ%2FvZ3qbAa7WvQZzXiodf7Yq0%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;172&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어가 정상적으로 실행되는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 git clone 명령어를 통해 GitHub에 있는 소스 코드를 Cloud Shell로 가지고 와 보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git clone&amp;nbsp;https://github.com/carlosalexei/aks-workshop.git&lt;/b&gt; 명령어를 사용하여 Cloud Shell에 소스 코드를 가지고 옵니다. 그후&amp;nbsp;&lt;b&gt;ls&lt;/b&gt;를 입력하여 aks-workshop이라는 directory가 생성된 것을 확인합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4J1Ao/btsGhnmxlrH/mgZ3yKWHFtjGgNKErx1y6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4J1Ao/btsGhnmxlrH/mgZ3yKWHFtjGgNKErx1y6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4J1Ao/btsGhnmxlrH/mgZ3yKWHFtjGgNKErx1y6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4J1Ao%2FbtsGhnmxlrH%2FmgZ3yKWHFtjGgNKErx1y6K%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;662&quot; height=&quot;210&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;210&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;clone 해 온 소스 코드가 Cloud Shell을 다시 시작해도 여전히 남아 있는지 확인하기 위해 하기 스크린샷처럼 전원 버튼을 클릭합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lc4Ha/btsGhUYB7xO/FtMliP9inFnclSABKpxC10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lc4Ha/btsGhUYB7xO/FtMliP9inFnclSABKpxC10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lc4Ha/btsGhUYB7xO/FtMliP9inFnclSABKpxC10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flc4Ha%2FbtsGhUYB7xO%2FFtMliP9inFnclSABKpxC10%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;351&quot; height=&quot;79&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;79&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;[다시 시작] 버튼을 클릭하여 Cloud Shell을 다시 시작합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;588&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Av6cR/btsGfhN5wbT/Zi9LeMsx7bLd37WMbOdLqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Av6cR/btsGfhN5wbT/Zi9LeMsx7bLd37WMbOdLqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Av6cR/btsGfhN5wbT/Zi9LeMsx7bLd37WMbOdLqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAv6cR%2FbtsGfhN5wbT%2FZi9LeMsx7bLd37WMbOdLqK%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;588&quot; height=&quot;177&quot; data-origin-width=&quot;588&quot; data-origin-height=&quot;177&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;b&gt;ls -al&lt;/b&gt; 명령어를 사용하여 확인해 보면 동일한 위치임에도 불구하고 aks-workshop이라는 directory가 보이지 않는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1rpRJ/btsGh4mr1Ov/ncSt0WfWycV5FfkNX9gNI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1rpRJ/btsGh4mr1Ov/ncSt0WfWycV5FfkNX9gNI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1rpRJ/btsGh4mr1Ov/ncSt0WfWycV5FfkNX9gNI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1rpRJ%2FbtsGh4mr1Ov%2FncSt0WfWycV5FfkNX9gNI1%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;483&quot; height=&quot;196&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해, 상기 테스트한 방법으로는 Local PC에서 Cloud Shell을 사용하여 Azure 인프라를 관리하는 것을 막지 못한다는 것을 알 수 있습니다. 단순히 Cloud Shell이 재실행되거나 다시 연결될 때 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Cloud Shell에 업로드한 폴더나 파일에 대한 부분이 휘발되는 것일 뿐, 접근 제어와 command 실행 제어와는 Private Endpoint가 관련이 없다는 것을 확인하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 Azure Relay를 사용하여 Cloud Shell을 가상 네트워크 내에 배포하는 방법에 대해 알아보도록 하겠습니다.  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글 : &lt;a href=&quot;https://with-cloud.tistory.com/35&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/35&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1712126838260&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;Azure Cloud Shell에 Private하게 접근하기 (2)&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 오늘은 지난 글에 이어 Azure Relay를 사용하여 Azure Cloud Shell을 가상 네트워크에 배포하는 방법에 대해 알아보겠습니다.   지난 글 : https://with-cloud.tistory.com/31 Azure Cloud Shel&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/35&quot; data-og-url=&quot;https://with-cloud.tistory.com/35&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GalmA/hyVGEufJZI/FD99kGRgGPN9BwnKSvDs30/img.png?width=800&amp;amp;height=634&amp;amp;face=0_0_800_634,https://scrap.kakaocdn.net/dn/bAhfo9/hyVJUIX0J6/qvU2kgFWLfuCcZuaT3WfLK/img.png?width=800&amp;amp;height=634&amp;amp;face=0_0_800_634,https://scrap.kakaocdn.net/dn/ia0KY/hyVJ4dK2Vl/5clEbveXlLNLiiuImLHRKk/img.png?width=1125&amp;amp;height=953&amp;amp;face=0_0_1125_953&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/35&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/35&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GalmA/hyVGEufJZI/FD99kGRgGPN9BwnKSvDs30/img.png?width=800&amp;amp;height=634&amp;amp;face=0_0_800_634,https://scrap.kakaocdn.net/dn/bAhfo9/hyVJUIX0J6/qvU2kgFWLfuCcZuaT3WfLK/img.png?width=800&amp;amp;height=634&amp;amp;face=0_0_800_634,https://scrap.kakaocdn.net/dn/ia0KY/hyVJ4dK2Vl/5clEbveXlLNLiiuImLHRKk/img.png?width=1125&amp;amp;height=953&amp;amp;face=0_0_1125_953');&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;Azure Cloud Shell에 Private하게 접근하기 (2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 오늘은 지난 글에 이어 Azure Relay를 사용하여 Azure Cloud Shell을 가상 네트워크에 배포하는 방법에 대해 알아보겠습니다.   지난 글 : https://with-cloud.tistory.com/31 Azure Cloud Shel&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.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>TOPIC/Cloud</category>
      <category>Azure</category>
      <category>Azure Cloud Shell</category>
      <category>Bash</category>
      <category>Private Endpoint</category>
      <category>storage account</category>
      <category>스토리지 어카운트</category>
      <category>클라우드 쉘</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/31</guid>
      <comments>https://with-cloud.tistory.com/31#entry31comment</comments>
      <pubDate>Mon, 1 Apr 2024 14:48:20 +0900</pubDate>
    </item>
    <item>
      <title>[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #02 Failover Cluster 구성</title>
      <link>https://with-cloud.tistory.com/30</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일교차가 큰 요즘.. 다들 잘 지내고 계신가요? 감기 조심하세요! &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 이어지는 포스팅인 만큼 흐름을 이어가고자 빠르게? 다시 찾아왔습니다  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(저만의 초기 감기 꿀팁을 드리자면,, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;저는 약국 판콜 + 비타민 C + 홍삼꿀물 + 약간의 유산소 + 수면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;으로 초기 감기를 이겨내곤 한합니다... 하루 정도 나의 건강을 위해 빠르게 회복하는 방법이니 참고..해주세용 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 본격적으로 고가용성을 위한 기본 전제조건인 &quot;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;#02&lt;/span&gt; Failover Cluster 구성&quot;&lt;/b&gt;에 관한 내용을 다룹니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;&lt;b&gt;#01&lt;/b&gt;&lt;/span&gt;에서 진행한 초기 구성은 계속되는 구축 과정에서 필수적인 환경으로 아래 링크를 참고하여 함께 팔로잉 해주세요!&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710997754100&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;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #01 용어 정리 및 구성도 공유 그리고 AD 구축&quot; data-og-description=&quot;안녕하세요. TAK 입니다:)  봄이 부쩍 가까워진 3월에 다시 인사드립니다(^꾸_벅^)  회사 업무로 Azure VM 기반 MSSQL FCI 구성한 적이 있는데.. 이후에 Always ON 가용성 그룹 구성이 자꾸 아른?..거려&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/28&quot; data-og-url=&quot;https://with-cloud.tistory.com/28&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bKnKCb/hyVADINeLj/1oYaPAWMkPC4zXAk3fQnpK/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/cwZYa1/hyVDCaqvW1/OSGPkeZ6qG2VrcvK4LvfS1/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/35uZM/hyVDHiufdw/J8rl5a4pHAsUoXPmFiraz1/img.png?width=1750&amp;amp;height=944&amp;amp;face=0_0_1750_944&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/28&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bKnKCb/hyVADINeLj/1oYaPAWMkPC4zXAk3fQnpK/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/cwZYa1/hyVDCaqvW1/OSGPkeZ6qG2VrcvK4LvfS1/img.jpg?width=800&amp;amp;height=578&amp;amp;face=0_0_800_578,https://scrap.kakaocdn.net/dn/35uZM/hyVDHiufdw/J8rl5a4pHAsUoXPmFiraz1/img.png?width=1750&amp;amp;height=944&amp;amp;face=0_0_1750_944');&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;[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #01 용어 정리 및 구성도 공유 그리고 AD 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. TAK 입니다:)  봄이 부쩍 가까워진 3월에 다시 인사드립니다(^꾸_벅^)  회사 업무로 Azure VM 기반 MSSQL FCI 구성한 적이 있는데.. 이후에 Always ON 가용성 그룹 구성이 자꾸 아른?..거려&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.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;color: #000000;&quot;&gt;!!그럼 힘차게 시작하겠습니다!!&lt;/span&gt;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends2&quot; data-emoticon-name=&quot;088&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/088.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/088.png&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Failover Cluster 환경 및 생성 작업&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;현 구성의 총 3대의 SQL Server 전체 대상으로 &lt;u&gt;1-2 Failover Cluster 설치&lt;/u&gt; 단계까지 동일하게 진행하면 됩니다!&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. 방화벽 설정&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: SQL Server 와 고가용성을 위한 구성에서 통신을 위해 다음과 같이 방화벽 Port를 Open 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- SQL Server: 기본 인스턴스의 경우 &lt;b&gt;1433 &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- 데이터베이스 미러 엔드포인트: &lt;b&gt;5022&lt;/b&gt; 또는 사용 가능한 모든 포트 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- 가용성 그룹에 대한 부하 분산 장치 IP 주소 상태 프로브: &lt;b&gt;59999&lt;/b&gt; 또는 사용 가능한 모든 포트 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- 클러스터 코어에 대한 부하 분산 장치 IP 주소 상태 프로브: &lt;b&gt;58888&lt;/b&gt; 또는 사용 가능한 포트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Windows Defender Firewall with Advanced Security(Inbound Rules)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkQt7R/btsFXaoHqc6/AgA28Una65INauai8RudF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkQt7R/btsFXaoHqc6/AgA28Una65INauai8RudF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkQt7R/btsFXaoHqc6/AgA28Una65INauai8RudF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkQt7R%2FbtsFXaoHqc6%2FAgA28Una65INauai8RudF0%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;2000&quot; height=&quot;1104&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1104&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마우스&amp;nbsp;오른쪽&amp;nbsp;버튼&amp;nbsp;클릭&amp;nbsp;후,&amp;nbsp;[New&amp;nbsp;Rule&amp;hellip;]&amp;nbsp;선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBYd9F/btsFYpk1qTt/dpG4T7NayxizV7IM4r9mE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBYd9F/btsFYpk1qTt/dpG4T7NayxizV7IM4r9mE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBYd9F/btsFYpk1qTt/dpG4T7NayxizV7IM4r9mE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBYd9F%2FbtsFYpk1qTt%2FdpG4T7NayxizV7IM4r9mE0%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;2000&quot; height=&quot;1305&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1305&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;2000&quot; data-origin-height=&quot;1633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w9Lk3/btsFWMaAIy1/ZTKsCvA80UZSgDbX2RKllk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w9Lk3/btsFWMaAIy1/ZTKsCvA80UZSgDbX2RKllk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w9Lk3/btsFWMaAIy1/ZTKsCvA80UZSgDbX2RKllk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw9Lk3%2FbtsFWMaAIy1%2FZTKsCvA80UZSgDbX2RKllk%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;2000&quot; height=&quot;1633&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1633&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;2000&quot; data-origin-height=&quot;1634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXw9A8/btsFXabcwQL/MQ4nE8Tg8D9XEOKRGkF0Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXw9A8/btsFXabcwQL/MQ4nE8Tg8D9XEOKRGkF0Y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXw9A8/btsFXabcwQL/MQ4nE8Tg8D9XEOKRGkF0Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXw9A8%2FbtsFXabcwQL%2FMQ4nE8Tg8D9XEOKRGkF0Y1%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;2000&quot; height=&quot;1634&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1634&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;2000&quot; data-origin-height=&quot;1627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b34hxM/btsFZWIUENQ/mmIW3zd4hhofMvjYZX1oo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b34hxM/btsFZWIUENQ/mmIW3zd4hhofMvjYZX1oo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b34hxM/btsFZWIUENQ/mmIW3zd4hhofMvjYZX1oo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb34hxM%2FbtsFZWIUENQ%2FmmIW3zd4hhofMvjYZX1oo0%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;2000&quot; height=&quot;1627&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1627&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;2000&quot; data-origin-height=&quot;1633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s7hGV/btsFWCZVbYh/7QM8d9dL69hx6kiesagPj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s7hGV/btsFWCZVbYh/7QM8d9dL69hx6kiesagPj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s7hGV/btsFWCZVbYh/7QM8d9dL69hx6kiesagPj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs7hGV%2FbtsFWCZVbYh%2F7QM8d9dL69hx6kiesagPj1%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;2000&quot; height=&quot;1633&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1633&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 단계에서 지정한 값(Inbound Rule)에 대한 명명&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdgsZR/btsFYlJNJu5/xuQChR9RfQhABhEcgDHB71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdgsZR/btsFYlJNJu5/xuQChR9RfQhABhEcgDHB71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdgsZR/btsFYlJNJu5/xuQChR9RfQhABhEcgDHB71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdgsZR%2FbtsFYlJNJu5%2FxuQChR9RfQhABhEcgDHB71%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;2000&quot; height=&quot;1624&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1624&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;2000&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JL5Nl/btsFZHFecnn/rWo3uGUOPKDhOXo5bD0JG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JL5Nl/btsFZHFecnn/rWo3uGUOPKDhOXo5bD0JG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JL5Nl/btsFZHFecnn/rWo3uGUOPKDhOXo5bD0JG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJL5Nl%2FbtsFZHFecnn%2FrWo3uGUOPKDhOXo5bD0JG1%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;2000&quot; height=&quot;335&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2. Failover Cluster 설치&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Add roles and features&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;869&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jq694/btsFZN6n9He/htIMKCWucVj9AqLPjcRsb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jq694/btsFZN6n9He/htIMKCWucVj9AqLPjcRsb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jq694/btsFZN6n9He/htIMKCWucVj9AqLPjcRsb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJq694%2FbtsFZN6n9He%2FhtIMKCWucVj9AqLPjcRsb0%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;2000&quot; height=&quot;869&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;869&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;feaures 값만 설정하면 되기에, 앞 과정은 모두 기본값으로 설정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y7le9/btsFZTMcjMr/KRXTVo1D2BeOFHdRjfUkDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y7le9/btsFZTMcjMr/KRXTVo1D2BeOFHdRjfUkDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y7le9/btsFZTMcjMr/KRXTVo1D2BeOFHdRjfUkDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY7le9%2FbtsFZTMcjMr%2FKRXTVo1D2BeOFHdRjfUkDk%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;2000&quot; height=&quot;1422&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1422&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;2000&quot; data-origin-height=&quot;2005&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oKEyQ/btsFZtN0s54/Dk66CGpDSAGHuEVrlWCtG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oKEyQ/btsFZtN0s54/Dk66CGpDSAGHuEVrlWCtG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oKEyQ/btsFZtN0s54/Dk66CGpDSAGHuEVrlWCtG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoKEyQ%2FbtsFZtN0s54%2FDk66CGpDSAGHuEVrlWCtG0%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;2000&quot; height=&quot;2005&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2005&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;2000&quot; data-origin-height=&quot;1426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EV5mR/btsFYnHAue1/7CDqvT2lbmkfyiDL8G1ZYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EV5mR/btsFYnHAue1/7CDqvT2lbmkfyiDL8G1ZYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EV5mR/btsFYnHAue1/7CDqvT2lbmkfyiDL8G1ZYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEV5mR%2FbtsFYnHAue1%2F7CDqvT2lbmkfyiDL8G1ZYK%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;2000&quot; height=&quot;1426&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1426&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치 완료 후, 재부팅&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 명령어 통해서 Failver Cluster Manager 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;1109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnzcaX/btsFYLnQzgF/RLPiuwi9jxTkgTwfKfvQKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnzcaX/btsFYLnQzgF/RLPiuwi9jxTkgTwfKfvQKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnzcaX/btsFYLnQzgF/RLPiuwi9jxTkgTwfKfvQKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnzcaX%2FbtsFYLnQzgF%2FRLPiuwi9jxTkgTwfKfvQKk%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;2000&quot; height=&quot;1109&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1109&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;&lt;span style=&quot;color: #000000;&quot;&gt;1-2-1. Validate Configuration &lt;/span&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;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;text-align: left;&quot;&gt;Failver Cluster Manager 확인 후, [Validate Configuration] 작업&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 클러스터 구성 전, 확인 작업을 위하여 진행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHdA2e/btsFYmhDEds/RMKIpDM4pqjAkfH3yOA6YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHdA2e/btsFYmhDEds/RMKIpDM4pqjAkfH3yOA6YK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHdA2e/btsFYmhDEds/RMKIpDM4pqjAkfH3yOA6YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHdA2e%2FbtsFYmhDEds%2FRMKIpDM4pqjAkfH3yOA6YK%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;2000&quot; height=&quot;1533&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1533&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;2000&quot; data-origin-height=&quot;1388&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/10h5O/btsFYo0Ipqo/Qt1fJzVcSJ82PIseGkYmu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/10h5O/btsFYo0Ipqo/Qt1fJzVcSJ82PIseGkYmu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/10h5O/btsFYo0Ipqo/Qt1fJzVcSJ82PIseGkYmu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F10h5O%2FbtsFYo0Ipqo%2FQt1fJzVcSJ82PIseGkYmu0%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;2000&quot; height=&quot;1388&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1388&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;2000&quot; data-origin-height=&quot;1378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/30VVQ/btsFWBfG83b/QJDNlYPVADPHkxcZSTMVeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/30VVQ/btsFWBfG83b/QJDNlYPVADPHkxcZSTMVeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/30VVQ/btsFWBfG83b/QJDNlYPVADPHkxcZSTMVeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F30VVQ%2FbtsFWBfG83b%2FQJDNlYPVADPHkxcZSTMVeK%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;2000&quot; height=&quot;1378&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1378&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;2000&quot; data-origin-height=&quot;1101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beJHjc/btsFYCYSkC4/ed7s2VaeLbluwUjDfumv6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beJHjc/btsFYCYSkC4/ed7s2VaeLbluwUjDfumv6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beJHjc/btsFYCYSkC4/ed7s2VaeLbluwUjDfumv6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeJHjc%2FbtsFYCYSkC4%2Fed7s2VaeLbluwUjDfumv6k%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;2000&quot; height=&quot;1101&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1101&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Domain(tak2on.com) Join 된 SQL Server(Computer) 목록 찾기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pLhKS/btsFW7FoZHw/PRvjMRCbHc1OsXkTtHPUM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pLhKS/btsFW7FoZHw/PRvjMRCbHc1OsXkTtHPUM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pLhKS/btsFW7FoZHw/PRvjMRCbHc1OsXkTtHPUM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpLhKS%2FbtsFW7FoZHw%2FPRvjMRCbHc1OsXkTtHPUM0%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;2000&quot; height=&quot;2168&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2168&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;2000&quot; data-origin-height=&quot;1087&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/52KhS/btsFYDpUNzW/nGk3YnMkMLkkhd1uqK9IJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/52KhS/btsFYDpUNzW/nGk3YnMkMLkkhd1uqK9IJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/52KhS/btsFYDpUNzW/nGk3YnMkMLkkhd1uqK9IJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F52KhS%2FbtsFYDpUNzW%2FnGk3YnMkMLkkhd1uqK9IJK%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;2000&quot; height=&quot;1087&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1087&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;2000&quot; data-origin-height=&quot;1381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbaY8y/btsFZDQtXiZ/ESyv7sg5J0mrSSbDZ1qPrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbaY8y/btsFZDQtXiZ/ESyv7sg5J0mrSSbDZ1qPrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbaY8y/btsFZDQtXiZ/ESyv7sg5J0mrSSbDZ1qPrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbaY8y%2FbtsFZDQtXiZ%2FESyv7sg5J0mrSSbDZ1qPrK%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;2000&quot; height=&quot;1381&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1381&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클러스터 구성 테스트 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1369&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XyOOx/btsFZL1OgfL/MdKZc1QGy17LzjwYiKCvZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XyOOx/btsFZL1OgfL/MdKZc1QGy17LzjwYiKCvZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XyOOx/btsFZL1OgfL/MdKZc1QGy17LzjwYiKCvZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXyOOx%2FbtsFZL1OgfL%2FMdKZc1QGy17LzjwYiKCvZk%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;2000&quot; height=&quot;1369&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1369&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;2000&quot; data-origin-height=&quot;1379&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dotvy4/btsFX7roEVQ/VkYj26iKzp4GdjjcsHu6kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dotvy4/btsFX7roEVQ/VkYj26iKzp4GdjjcsHu6kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dotvy4/btsFX7roEVQ/VkYj26iKzp4GdjjcsHu6kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdotvy4%2FbtsFX7roEVQ%2FVkYj26iKzp4GdjjcsHu6kK%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;2000&quot; height=&quot;1379&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1379&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;유효 확인&lt;span style=&quot;text-align: left;&quot;&gt;(Vaildated) &lt;/span&gt;작업 완료&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QGOhS/btsFZFAELl4/lc1AR3eBo09iLjdCSFlvOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QGOhS/btsFZFAELl4/lc1AR3eBo09iLjdCSFlvOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QGOhS/btsFZFAELl4/lc1AR3eBo09iLjdCSFlvOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQGOhS%2FbtsFZFAELl4%2Flc1AR3eBo09iLjdCSFlvOK%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;2000&quot; height=&quot;1386&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1386&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;&lt;span style=&quot;color: #000000;&quot;&gt;1-2-2. Create Cluster&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;996&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CSk5B/btsFW8j0YW1/cJihHMBnXVdYwLVGOsuGfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CSk5B/btsFW8j0YW1/cJihHMBnXVdYwLVGOsuGfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CSk5B/btsFW8j0YW1/cJihHMBnXVdYwLVGOsuGfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCSk5B%2FbtsFW8j0YW1%2FcJihHMBnXVdYwLVGOsuGfK%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;1440&quot; height=&quot;996&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;996&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-2-1 과정과 동일하게 Domain(tak2on.com)에 Join 된 SQL Server 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;972&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfOu3J/btsFXM8XoBP/ENfKbXFicrpdfjdqPiTfK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfOu3J/btsFXM8XoBP/ENfKbXFicrpdfjdqPiTfK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfOu3J/btsFXM8XoBP/ENfKbXFicrpdfjdqPiTfK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfOu3J%2FbtsFXM8XoBP%2FENfKbXFicrpdfjdqPiTfK1%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;1440&quot; height=&quot;972&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;972&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클러스터 이름 지정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네이밍 룰(15 characters limit) 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;967&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xNJ10/btsFYCLjpnS/lTKGusD4fb4Cr0nEQpD8Ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xNJ10/btsFYCLjpnS/lTKGusD4fb4Cr0nEQpD8Ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xNJ10/btsFYCLjpnS/lTKGusD4fb4Cr0nEQpD8Ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxNJ10%2FbtsFYCLjpnS%2FlTKGusD4fb4Cr0nEQpD8Ok%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;1440&quot; height=&quot;967&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;967&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;1440&quot; data-origin-height=&quot;977&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z4sxi/btsFW4aSCZb/upTWuGDLojjx4XN8l9h0Q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z4sxi/btsFW4aSCZb/upTWuGDLojjx4XN8l9h0Q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z4sxi/btsFW4aSCZb/upTWuGDLojjx4XN8l9h0Q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz4sxi%2FbtsFW4aSCZb%2FupTWuGDLojjx4XN8l9h0Q1%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;1440&quot; height=&quot;977&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;977&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;1440&quot; data-origin-height=&quot;973&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yp56b/btsFWlxq35B/fuZ92jYle3GWx5oLhQAfJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yp56b/btsFWlxq35B/fuZ92jYle3GWx5oLhQAfJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yp56b/btsFWlxq35B/fuZ92jYle3GWx5oLhQAfJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyp56b%2FbtsFWlxq35B%2FfuZ92jYle3GWx5oLhQAfJ1%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;1440&quot; height=&quot;973&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;973&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클러스터링 정상 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;선택한 SQL Server가 Nodes 목록에 정상 등록 및 &lt;span style=&quot;color: #409d00;&quot;&gt;Status(Up)&lt;/span&gt; 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;797&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KKIIf/btsFYM1lVHp/kg9t3gLnWyBgP6yeMSuEm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KKIIf/btsFYM1lVHp/kg9t3gLnWyBgP6yeMSuEm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KKIIf/btsFYM1lVHp/kg9t3gLnWyBgP6yeMSuEm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKKIIf%2FbtsFYM1lVHp%2Fkg9t3gLnWyBgP6yeMSuEm0%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;1440&quot; height=&quot;797&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;797&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;1440&quot; data-origin-height=&quot;866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uPx9x/btsFXNNABG5/ukgBflaFE582KrgLW7agWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uPx9x/btsFXNNABG5/ukgBflaFE582KrgLW7agWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uPx9x/btsFXNNABG5/ukgBflaFE582KrgLW7agWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuPx9x%2FbtsFXNNABG5%2FukgBflaFE582KrgLW7agWk%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;1440&quot; height=&quot;866&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;866&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;span style=&quot;color: #000000;&quot;&gt;2. Quorum&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Quorum(쿼럼) 이란, HA(고가용성) 을 위해 사용되는 장치로 분산 시스템에서 일관된 동작과 안정성을 유지하기 위해 사용되는 개념입니다. 다수결(일반적으로 투표라 하며 다수결에 의해 Active Node를 결정)을 통해 시스템의 상태를 결정하고 조정함으로써 분산 시스템의 안정성을 보장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lyh0M/btsFW9DmJQr/DzIiHKbzd94sEKbBnVfpS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lyh0M/btsFW9DmJQr/DzIiHKbzd94sEKbBnVfpS0/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://learn.microsoft.com/en-us/windows-server/failover-clustering/media/deploy-a-cloud-witness-for-a-failover-cluster/cloudwitness_2.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lyh0M/btsFW9DmJQr/DzIiHKbzd94sEKbBnVfpS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flyh0M%2FbtsFW9DmJQr%2FDzIiHKbzd94sEKbBnVfpS0%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;935&quot; height=&quot;516&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://learn.microsoft.com/en-us/windows-server/failover-clustering/media/deploy-a-cloud-witness-for-a-failover-cluster/cloudwitness_2.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 다음과 같은 이유로 구성이 필수적입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- 고가용성과 장애 복구 : 분산 시스템에서 노드 간의 통신이 중단되는 경우, 시스템이 계속해서 정상적으로 작동하려면 여전히 다수의 노드가 동작해야 합니다. 쿼럼은 이러한 상황에서도 시스템이 올바르게 작동할 수 있도록 보장합니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- 일관성 유지 : 분산 시스템에서 여러 노드가 데이터를 공유하고 처리할 때, 일관된 상태를 유지하기 위해 쿼럼이 사용됩니다. 데이터의 일관성을 보장하기 위해서는 다수의 노드가 동일한 상태를 동의해야 합니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;- 스플릿 브레인(Split-brain) 문제 방지(해결) : 스플릿 브레인은 네트워크 분할로 인해 클러스터가 두 그룹으로 분리되는 상황을 말합니다. 이때 쿼럼을 사용하면 두 그룹 중 하나만이 시스템을 제어하도록 하여 데이터의 일관성과 안정성을 유지할 수 있습니다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현 구성은 Single Quorum 으로 비교적 작은 규모의 환경에서 사용되는 경우에 적합합니다. (의존성이 높음.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-1. Quorum 설정&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[클러스터 명] - [More Actions] - [Configure Cluster Quorum Settings]&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;869&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dB4P7G/btsFYmWjGVY/LT0qVzBkIKk5NhknyV7BlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dB4P7G/btsFYmWjGVY/LT0qVzBkIKk5NhknyV7BlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dB4P7G/btsFYmWjGVY/LT0qVzBkIKk5NhknyV7BlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdB4P7G%2FbtsFYmWjGVY%2FLT0qVzBkIKk5NhknyV7BlK%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;1440&quot; height=&quot;869&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;869&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;1440&quot; data-origin-height=&quot;993&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGq0BM/btsFYoT7JIy/ER8YVU5fktSIZExHJMdgmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGq0BM/btsFYoT7JIy/ER8YVU5fktSIZExHJMdgmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGq0BM/btsFYoT7JIy/ER8YVU5fktSIZExHJMdgmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGq0BM%2FbtsFYoT7JIy%2FER8YVU5fktSIZExHJMdgmK%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;1440&quot; height=&quot;993&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;993&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;1440&quot; data-origin-height=&quot;996&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mKyGq/btsFW5gxZ1j/TsNHf3Z9Pv2JIelUnPFa90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mKyGq/btsFW5gxZ1j/TsNHf3Z9Pv2JIelUnPFa90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mKyGq/btsFW5gxZ1j/TsNHf3Z9Pv2JIelUnPFa90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmKyGq%2FbtsFW5gxZ1j%2FTsNHf3Z9Pv2JIelUnPFa90%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;1440&quot; height=&quot;996&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;996&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Quorum Witness 옵션 중, Azure Storage Account(Blob)을 Quorum으로 사용하기 위해 [Cloud witness] 선택&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현 구성에서는 Private Link - Private Endpoint 구성을 통해 Private 구성된 상태&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1440&quot; data-origin-height=&quot;996&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FwDwc/btsFYk5fvBU/MA9qGlrfH4GC9o7skhGeU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FwDwc/btsFYk5fvBU/MA9qGlrfH4GC9o7skhGeU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FwDwc/btsFYk5fvBU/MA9qGlrfH4GC9o7skhGeU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFwDwc%2FbtsFYk5fvBU%2FMA9qGlrfH4GC9o7skhGeU0%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;1440&quot; height=&quot;996&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;996&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;1440&quot; data-origin-height=&quot;992&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVhetK/btsFYpFoisB/0a0acR4twPKSrxiaOJmvr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVhetK/btsFYpFoisB/0a0acR4twPKSrxiaOJmvr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVhetK/btsFYpFoisB/0a0acR4twPKSrxiaOJmvr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVhetK%2FbtsFYpFoisB%2F0a0acR4twPKSrxiaOJmvr0%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;1440&quot; height=&quot;992&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;992&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2. Quorum 구성 확인&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;991&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lg65E/btsFYMf4caU/mhm2MFbL2UYZubV3hu7Dck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lg65E/btsFYMf4caU/mhm2MFbL2UYZubV3hu7Dck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lg65E/btsFYMf4caU/mhm2MFbL2UYZubV3hu7Dck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flg65E%2FbtsFYMf4caU%2Fmhm2MFbL2UYZubV3hu7Dck%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;1440&quot; height=&quot;991&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;991&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연결한 Azure Storage Account(blob) - Container에서 정상 연결되었다면, [msft-cloud-witness] 컨테이너를 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnzjuR/btsFWAnCeRV/w9GczljYN9FsSHOSBnY5M0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnzjuR/btsFWAnCeRV/w9GczljYN9FsSHOSBnY5M0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnzjuR/btsFWAnCeRV/w9GczljYN9FsSHOSBnY5M0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnzjuR%2FbtsFWAnCeRV%2Fw9GczljYN9FsSHOSBnY5M0%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;1440&quot; height=&quot;345&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;345&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후, 보다 원활한 사용과 통신을 위해 IE 보안 강화 구성 해제&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 서버 대상&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bH6ODS/btsFYqxtM5C/OUSxKvT8AeHKfjW7pndqak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bH6ODS/btsFYqxtM5C/OUSxKvT8AeHKfjW7pndqak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bH6ODS/btsFYqxtM5C/OUSxKvT8AeHKfjW7pndqak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH6ODS%2FbtsFYqxtM5C%2FOUSxKvT8AeHKfjW7pndqak%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;1440&quot; height=&quot;481&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;481&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;1440&quot; data-origin-height=&quot;1556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Zqhj2/btsFZNFnhwS/S4XP5kts6jCrUmYo71P7uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Zqhj2/btsFZNFnhwS/S4XP5kts6jCrUmYo71P7uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Zqhj2/btsFZNFnhwS/S4XP5kts6jCrUmYo71P7uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZqhj2%2FbtsFZNFnhwS%2FS4XP5kts6jCrUmYo71P7uk%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;1440&quot; height=&quot;1556&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1556&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;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;마지막으로 여기서!!!!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;작업 단계를 정리하자면, 다음과 같습니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;- 현 구성에서는 총 3대의 SQL Server가 있으므로 대상 서버 모두 Failover Cluster 설치 단계까지 동일하게 진행&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- Clustering 구성은 1대의 서버에서만 정상적으로 구성이 되었다면, 1-2-1 과정 이후에 대해 반복하여 진행할 필요 없으며, 각 서버의 Failover Cluster Manager에서 확인 가능&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금까지 &lt;b&gt;&quot;SQL Server Always On 가용성 그룹 on Azure&quot;&lt;/b&gt;에서 고가용성을 위해 중요한&lt;b&gt; Failover Cluster 구성&lt;/b&gt;에 대해서 알아보았습니다!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 포스팅에서는 SQL Server의 SQL구성 그리고 Always On 가용성 그룹 구성까지 알아보겠습니다.(!!많관부!!) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번&amp;nbsp;포스팅에서&amp;nbsp;부족한&amp;nbsp;점,&amp;nbsp;궁금한&amp;nbsp;점&amp;nbsp;등&amp;nbsp;자유로운&amp;nbsp;의견을&amp;nbsp;남겨주세요!&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/DB</category>
      <category>always on</category>
      <category>Azure</category>
      <category>cloud</category>
      <category>Database</category>
      <category>failover</category>
      <category>mssql</category>
      <category>SQL</category>
      <category>SQL Server</category>
      <category>가용성 그룹</category>
      <category>고가용성</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/30</guid>
      <comments>https://with-cloud.tistory.com/30#entry30comment</comments>
      <pubDate>Thu, 21 Mar 2024 16:29:11 +0900</pubDate>
    </item>
    <item>
      <title>[경영정보시각화능력] 자격증 소개</title>
      <link>https://with-cloud.tistory.com/29</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;!!오늘은 따뜬한 자격증 정보를 들고 왔습니다!!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3월 어느날..&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터자격검정센터에서 메일이 와 확인해보니 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;신설 국가기술자격 경영정보시각화능력&lt;/b&gt;&lt;/span&gt; 안내를 하더랩죠...&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DkDiU/btsFXZMIFxy/Ly9aDLZG1rlsgD2CGO5G51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DkDiU/btsFXZMIFxy/Ly9aDLZG1rlsgD2CGO5G51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DkDiU/btsFXZMIFxy/Ly9aDLZG1rlsgD2CGO5G51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDkDiU%2FbtsFXZMIFxy%2FLy9aDLZG1rlsgD2CGO5G51%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;702&quot; height=&quot;1440&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;1440&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;background-color: #f6e199;&quot;&gt;&lt;b&gt;대한상공회의소&lt;/b&gt;&lt;/span&gt;에서 시행하는 시험이더라구요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2024년 신설되어 처음으로 시행하는 일정은 다시 한번 살펴보면 올해 필기는 2번, 실기는 1번으로 진행되네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1986&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LvRnt/btsFUXJTTXR/x7auftkEt4x4a1vdAJXIQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LvRnt/btsFUXJTTXR/x7auftkEt4x4a1vdAJXIQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LvRnt/btsFUXJTTXR/x7auftkEt4x4a1vdAJXIQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLvRnt%2FbtsFUXJTTXR%2Fx7auftkEt4x4a1vdAJXIQ0%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;1986&quot; height=&quot;636&quot; data-origin-width=&quot;1986&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 시험이다 보니, 수험자들의 이해를 돕기 위해 필기수험가이드북과 필기/실기 모의문제집을 무료로 배포하고 있다고 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1986&quot; data-origin-height=&quot;1513&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIa0ap/btsFUYWizG3/nEuZXDqj5KOCs4Sdee7AL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIa0ap/btsFUYWizG3/nEuZXDqj5KOCs4Sdee7AL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIa0ap/btsFUYWizG3/nEuZXDqj5KOCs4Sdee7AL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIa0ap%2FbtsFUYWizG3%2FnEuZXDqj5KOCs4Sdee7AL0%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;1986&quot; height=&quot;1513&quot; data-origin-width=&quot;1986&quot; data-origin-height=&quot;1513&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보다 시험 관련 자세한 내용은 아래 공식 홈페이지에서 확인하면 좋을것 같아요:)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://license.korcham.net/co/examguide.do?mm=28&amp;amp;cd=0108&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://license.korcham.net/co/examguide.do?mm=28&amp;amp;cd=0108&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710920388419&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;종목소개 시험안내&quot; data-og-description=&quot;경영정보시각화능력 종목소개 4차 산업혁명, 디지털 전환 등으로 인해 데이터에서 의미있는 정보를 도출하는 능력이 무엇보다 중요해지고 있습니다. &amp;lt;경영정보시각화능력(Business Intelligence Specia&quot; data-og-host=&quot;license.korcham.net&quot; data-og-source-url=&quot;https://license.korcham.net/co/examguide.do?mm=28&amp;amp;cd=0108&quot; data-og-url=&quot;https://license.korcham.net/co/examguide.do?cd=0108&amp;amp;mm=28&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://license.korcham.net/co/examguide.do?mm=28&amp;amp;cd=0108&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://license.korcham.net/co/examguide.do?mm=28&amp;amp;cd=0108&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;종목소개 시험안내&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;경영정보시각화능력 종목소개 4차 산업혁명, 디지털 전환 등으로 인해 데이터에서 의미있는 정보를 도출하는 능력이 무엇보다 중요해지고 있습니다. &amp;lt;경영정보시각화능력(Business Intelligence Specia&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;license.korcham.net&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이미 제 소개글에서 Data의 다양한 분야에 관심이 있다고 언급한 적이 있는데요.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 2024년 첫 자격증으로 신설된 [경영정보시각화능력] 취득에 도전하려고 합니다!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;009&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/009.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/009.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마침 수험 기본서 이벤트를 진행하는 굿 타이밍이라 이렇게 많은 분들과 공유하고 포스팅하게 되었습니다! (~ 03.24)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이벤트 참여 링크 : &lt;a href=&quot;https://form.naver.com/response/Lp7MDk8m5eanQk2P0ZDQfg&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://form.naver.com/response/Lp7MDk8m5eanQk2P0ZDQfg&lt;/a&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;686&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mOr8U/btsFVuAGtkG/76vnXIGLkI2cJxc1N47pp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mOr8U/btsFVuAGtkG/76vnXIGLkI2cJxc1N47pp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mOr8U/btsFVuAGtkG/76vnXIGLkI2cJxc1N47pp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmOr8U%2FbtsFVuAGtkG%2F76vnXIGLkI2cJxc1N47pp0%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;686&quot; height=&quot;1024&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관심있으신 분들은 이벤트도 참여하시고, 함께 도전해 보시는게 어떨까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;포스팅의 모든 그림(이미지) 출처는 &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://license.korcham.net/indexmain.jsp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;대한상공회의소(자격평가사업단)&lt;/a&gt; 입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/General</category>
      <category>powerbi</category>
      <category>tableau</category>
      <category>경영정보시각화능력</category>
      <category>대한상공회의소</category>
      <category>데이터자격증</category>
      <category>시각화</category>
      <category>자격증</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/29</guid>
      <comments>https://with-cloud.tistory.com/29#entry29comment</comments>
      <pubDate>Wed, 20 Mar 2024 17:16:42 +0900</pubDate>
    </item>
    <item>
      <title>[MSSQL Server Always ON 가용성 그룹 구성 on Azure VMs] #01 용어 정리 및 구성도 공유 그리고 AD 구축</title>
      <link>https://with-cloud.tistory.com/28</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt; 봄이 부쩍 가까워진 3월에 다시 인사드립니다(^꾸_벅^) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;회사 업무로 Azure VM 기반 MSSQL FCI 구성한 적이 있는데.. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이후에 Always ON 가용성 그룹 구성이 자꾸 아른?..거려서 작성하게 되었다는 그런 이상한 출발점으로 이번 포스팅을 준비했습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;그럼 &lt;b&gt;&quot;Azure 인프라 내에서 MSSQL과 Failover를 위한 Always ON 가용성 그룹 구성&lt;/b&gt;&quot;에 대해 찐~하게 살펴보겠습니다!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;찐~한만큼 구성의 단계별로 나눠서 포스팅할 예정입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(설정에 따라 구성이 많이 달라질 수 있는 점 참고해 주세요.)&lt;/span&gt;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;001&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/001.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/001.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자, 그럼 본격으로 1부 시작하겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;실제 테스트 구축 전, 우리가 함께 구성할 서비스에 대한 개념 정리 먼저 해보겠습니다.&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. MSSQL 이란?&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZrsVD/btsFNyvkaPh/wK8Ikgl1uxguAa2mO2RaAK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZrsVD/btsFNyvkaPh/wK8Ikgl1uxguAa2mO2RaAK/img.jpg&quot; data-alt=&quot;https://www.commvault.com/wp-content/uploads/2019/08/sql-server_logo.jpg?quality=80&amp;amp;amp;w=930&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZrsVD/btsFNyvkaPh/wK8Ikgl1uxguAa2mO2RaAK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZrsVD%2FbtsFNyvkaPh%2FwK8Ikgl1uxguAa2mO2RaAK%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;930&quot; height=&quot;672&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;672&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.commvault.com/wp-content/uploads/2019/08/sql-server_logo.jpg?quality=80&amp;amp;w=930&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: MSSQL이란, Microsoft SQL Server의 줄임말로 대표적인 RDBMS(Relational DataBase Management System) 중 하나입니다. 관계형 데이터베이스(RDB)는 테이블, 행(레코드 또는 튜플), 열(속성)의 정보를 구조화하는 방식입니다. RDB에는 테이블을 조인하여 정보 간 관계 또는 링크를 설정할 수 있는 기능이 있어, 여러 데이터 포인트 간의 관계를 쉽게 이해하고 정보를 얻을 수 있습니다.&amp;nbsp; 즉, RDBMS는 RDB를&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 생성, 관리, 업데이트 등에 사용되는 프로그램으로 볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특징은 다음과 같습니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- MySQL과 달리 오픈소스가 아님으로 라이센스 구매 필요한 Microsoft의 상용 제품&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Transact-SQL 또는 T-SQL 사용(표준 SQL + 추가 기능)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 위와 같은 이유로 주기적인 업데이트를 통해 데이터 암호화, 접근제어, 감사 로깅 등 보안에 강점&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 많이 사용되는 DB 제품으로 관련 정보를 쉽게 찾을 수 있으며, 트러블슈팅 등 다양한 지원에도 유리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- MSSQL은 중앙 집중식 데이터베이스 제어로 고가용성 솔루션이 있으며, 백업 및 복구 기능 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 주로 Windows OS를 통해 실행되며, 높은 호환성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- SSMS(SQL Server Management Studio) 혹은 Azure Data Studio와 같은 Tool을 통해 액세스 및 사용 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- RDBMS는 DBMS의 한 유형(ex. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MySQL, MariaDB, Oracle 등)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. 고가용성(High Availability) 솔루션&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 고가용성(HA, High Availability)이란, 오랜 기간 동안 지속적으로 정상 운영 가능한 상태를 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MSSQL에서는 대표적으로 아래 두 가지 고가용성 솔루션을 제공하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 두 고가용성의 설명은 MSSQL on Azure를 가정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1-1. FCI(Failover Cluster Instances)&lt;/span&gt;&lt;/h4&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/cwOG1S/btsFK7Ty75r/ytO0tjSojwrJfAtclX8txk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwOG1S/btsFK7Ty75r/ytO0tjSojwrJfAtclX8txk/img.png&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;477&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.65&quot; style=&quot;width: 32.8632%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwOG1S/btsFK7Ty75r/ytO0tjSojwrJfAtclX8txk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwOG1S%2FbtsFK7Ty75r%2FytO0tjSojwrJfAtclX8txk%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;741&quot; height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOHIis/btsFMN7zHu6/fTs0xRtpAEEHksqYgiV3yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOHIis/btsFMN7zHu6/fTs0xRtpAEEHksqYgiV3yk/img.png&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;487&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.4056%; margin-right: 10px;&quot; data-widthpercent=&quot;33.18&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOHIis/btsFMN7zHu6/fTs0xRtpAEEHksqYgiV3yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOHIis%2FbtsFMN7zHu6%2FfTs0xRtpAEEHksqYgiV3yk%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;746&quot; height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pF1bo/btsFMsiprDe/iiZ50UWETnjaI0UoCkp1vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pF1bo/btsFMsiprDe/iiZ50UWETnjaI0UoCkp1vk/img.png&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;487&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.4056%;&quot; data-widthpercent=&quot;33.17&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pF1bo/btsFMsiprDe/iiZ50UWETnjaI0UoCkp1vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpF1bo%2FbtsFMsiprDe%2FiiZ50UWETnjaI0UoCkp1vk%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;746&quot; height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;https://i0.wp.com/www.omegamadlab.com/wp-content/uploads/2020/07/S2DFCI-1.png?w=741&amp;amp;ssl=1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FCI는 기존의 Windows 클러스터링 기술을 사용하여 SQL Server를 실행하는 인스턴스&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&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;가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 대의 서버(노드)에 SQL Server를 설치하고, 클러스터를 형성하여 단일 데이터베이스 인스턴스를 공유&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 그림과 같이, 스토리지 구성에서 공유 필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FCI는 주로 단일 &lt;b&gt;데이터베이스 인스턴스의 고가용성&lt;/b&gt;을 제공하는 데 사용&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 고가용성(Protection)의 주체는 데이터베이스 인스턴스&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1-2. Always On Availability Group Cluster&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYIEgu/btsFLQDOwjw/yr56KrU0ijZTn90jEBeYEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYIEgu/btsFLQDOwjw/yr56KrU0ijZTn90jEBeYEK/img.png&quot; data-alt=&quot;https://i2.wp.com/www.omegamadlab.com/wp-content/uploads/2020/07/AG.png?w=745&amp;amp;amp;ssl=1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYIEgu/btsFLQDOwjw/yr56KrU0ijZTn90jEBeYEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYIEgu%2FbtsFLQDOwjw%2Fyr56KrU0ijZTn90jEBeYEK%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;745&quot; height=&quot;485&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;485&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://i2.wp.com/www.omegamadlab.com/wp-content/uploads/2020/07/AG.png?w=745&amp;amp;ssl=1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Always On 가용성 그룹은 &lt;b&gt;데이터베이스 수준의 고가용성&lt;/b&gt;을 제공&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 대의 서버(노드)에 데이터베이스의 복제본을 만들어 공유, 즉 Node에 연결된 개별 스토리지 필요(No Shared)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;복제본은 읽기 가능 또는 읽기 전용일 수 있으며, 여러 가용성 그룹을 구성하여 다양한 목적에 맞게 데이터베이스를 배포 가능&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;장애가 발생하면 해당 가용성 그룹의 복제본 중 하나로 자동으로 이동하여 서비스 지속 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Always On 가용성 그룹은 데이터베이스 단위로 고가용성을 제공하므로 다중 데이터베이스 솔루션에 적합&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1-2. FCI(Failover Cluster Instances) VS Always On Availability Group Cluster&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;background-color: #ffffff; color: #404040; text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Feature&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;FCIs&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;AGs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #f0f0f0;&quot;&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Licenses*&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Single license required&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Single license required for HA mode, additional licenses required for actively used secondary replicas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #f0f0f0;&quot;&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Storage &lt;br /&gt;Configuration&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Shared storage, eg SAN, Storage Spaces Direct, etc.&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;No shared storage needed, each replica has its own&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Storage &lt;br /&gt;Requirements&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;No additional store space required for user databases&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Each replica stores its own copy of the database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #f0f0f0;&quot;&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Protection&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Instance-level&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Database-level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Typical &lt;br /&gt;configuration&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;HA, with DR capabilities if combined with other technologies&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;HA or DR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #f0f0f0;&quot;&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;RPO: Potential data loss&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Typically no data loss during failover&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Typically no data loss during failover for synchronous-commit; potential data loss for asynchronous-commit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;RTO: Time to failover&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Potentially noticeable for large and active systems&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Typically fast and may be unnoticeable on many systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #f0f0f0;&quot;&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Administration&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Once configured, manage the instance. Use SQL Server Setup program to add/remove nodes&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Once configured, additional care must be taken for instance-level objects such as logins and jobs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Patching &amp;amp;&lt;br /&gt;maintenance&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Reduces downtime to failover time&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Reduces downtime to failover time&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;출처 : &lt;a href=&quot;https://theserogroup.com/sql-server/whats-the-difference-in-sql-server-fcis-and-ags/&quot;&gt;https://theserogroup.com/sql-server/whats-the-difference-in-sql-server-fcis-and-ags/&lt;/a&gt;&amp;nbsp;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;2. 구성도 및 인프라 세부 사항&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-1. 구성도&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 이번 포스팅에서는 &lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;Always On 가용성 그룹&lt;/b&gt;&lt;/span&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;1750&quot; data-origin-height=&quot;944&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6IbKt/btsFMDEaKbj/S73B2xw7bSh2GVkc1ilrF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6IbKt/btsFMDEaKbj/S73B2xw7bSh2GVkc1ilrF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6IbKt/btsFMDEaKbj/S73B2xw7bSh2GVkc1ilrF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6IbKt%2FbtsFMDEaKbj%2FS73B2xw7bSh2GVkc1ilrF1%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;1750&quot; height=&quot;944&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;944&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2. 인프라 세부 사항&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 한국 중부 리전의 가용성 영역(1,2,3) 구분하여 배포&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Azure Load Balancer (1ea) for Cluster Listener&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; - Storage Account - Blob (1ea) for Quorom&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Data Disk (3ea) for SQL Server Database Replication&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Virtual Machine Configuration&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 108px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 20px; text-align: center;&quot;&gt;구성&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 20px; text-align: center;&quot;&gt;AD-01&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 20px; text-align: center;&quot;&gt;AD-02&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 20px; text-align: center;&quot;&gt;SQL-01&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 20px; text-align: center;&quot;&gt;SQL-02&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 20px; text-align: center;&quot;&gt;SQL-03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OS&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.3335%; height: 17px; text-align: center;&quot; colspan=&quot;5&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; Windows Server 2019 R2&amp;nbsp; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HOSTNAME&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tak-ad-01&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tak-ad-02&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tak-sql-01&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tak-sql-02&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tak-sql-03&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SKU&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3334%; height: 20px; text-align: center;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Standard&amp;nbsp;B2s&lt;br /&gt;(2개&amp;nbsp;vcpu,&amp;nbsp;4GiB&amp;nbsp;메모리)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.0001%; height: 20px; text-align: center;&quot; colspan=&quot;3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Standard&amp;nbsp;B4als&amp;nbsp;v2&lt;br /&gt;(4개&amp;nbsp;vcpu,&amp;nbsp;8GiB&amp;nbsp;메모리)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IP&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 172.168.0.4 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 172.168.0.4 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 172.168.1.4 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 172.168.1.5&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 172.168.1.6&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DNS&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.3335%; height: 17px; text-align: center;&quot; colspan=&quot;5&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;tak2on.com(172.168.0.4, &lt;span style=&quot;text-align: start;&quot;&gt;172.168.0.5)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;3. AD 서버 구성&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: AD 서버는 MSSQL의 고가용성 구성을 위해 필수적인 리소스입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 구성에서는 주 서비스인 AD DC(Actice Directory Domain Services)는 윈도우 서버 운영체제의 기능을 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 다음과 같은 이유로 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- AD 사용자 및 그룹을 만들어 권한 할당 및 인증에 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;- 관리자 및 클라이언트에서 MSSQL Server에 액세스 할 때, AD를 통해서 인증에 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Window 기능 중 Failover를 위한 클러스터링 구성에서 모든 노드가 AD DC의 도메인에 속해야 하며, 이는 클러스터링 서비스, 관리 도구 과 통합되어 노드 Failover 시에 인증과 통신 등에 사용(+ 서비스로 등록)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr; 위와 같은 이유로 AD 서버의 고가용성을 고려하여 2대의 AD 서버를 구성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-1. AD 서버 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;2대의 AD 서버 동일하게 설정&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;합니다. 우선 1대의 AD 서버(tak-ad-01) 설정을 진행하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Add roles and freatures 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;859&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dENEqf/btsFM0MIURR/MtqcVgkbYFYzqKHsm3AEo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dENEqf/btsFM0MIURR/MtqcVgkbYFYzqKHsm3AEo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dENEqf/btsFM0MIURR/MtqcVgkbYFYzqKHsm3AEo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdENEqf%2FbtsFM0MIURR%2FMtqcVgkbYFYzqKHsm3AEo1%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;1750&quot; height=&quot;859&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;859&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;2000&quot; data-origin-height=&quot;1422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cq982B/btsFO0Se2lf/S9SEmEIFtWkGfAkelRhkIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cq982B/btsFO0Se2lf/S9SEmEIFtWkGfAkelRhkIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cq982B/btsFO0Se2lf/S9SEmEIFtWkGfAkelRhkIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcq982B%2FbtsFO0Se2lf%2FS9SEmEIFtWkGfAkelRhkIk%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;2000&quot; height=&quot;1422&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1422&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;2000&quot; data-origin-height=&quot;1418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMsdCR/btsFLUflXEV/kpgWk8qKLV84kC1sitZCQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMsdCR/btsFLUflXEV/kpgWk8qKLV84kC1sitZCQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMsdCR/btsFLUflXEV/kpgWk8qKLV84kC1sitZCQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMsdCR%2FbtsFLUflXEV%2FkpgWk8qKLV84kC1sitZCQK%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;2000&quot; height=&quot;1418&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1418&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AD 서버 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sU3wk/btsFM15Uzzq/7ZCTj0rjEL4Sapj2qXwZ7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sU3wk/btsFM15Uzzq/7ZCTj0rjEL4Sapj2qXwZ7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sU3wk/btsFM15Uzzq/7ZCTj0rjEL4Sapj2qXwZ7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsU3wk%2FbtsFM15Uzzq%2F7ZCTj0rjEL4Sapj2qXwZ7K%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;2000&quot; height=&quot;1429&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1429&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AD DS (Active Directory Domain Services)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1031&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mQlol/btsFOeKnDRJ/BdL4B0mcXyWFWWkmCsXp31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mQlol/btsFOeKnDRJ/BdL4B0mcXyWFWWkmCsXp31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mQlol/btsFOeKnDRJ/BdL4B0mcXyWFWWkmCsXp31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmQlol%2FbtsFOeKnDRJ%2FBdL4B0mcXyWFWWkmCsXp31%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;1440&quot; height=&quot;1031&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1031&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;1440&quot; data-origin-height=&quot;1492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/USbUS/btsFLvNEnYS/cYCIehlueex2RcjL2qm9m0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/USbUS/btsFLvNEnYS/cYCIehlueex2RcjL2qm9m0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/USbUS/btsFLvNEnYS/cYCIehlueex2RcjL2qm9m0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUSbUS%2FbtsFLvNEnYS%2FcYCIehlueex2RcjL2qm9m0%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;1440&quot; height=&quot;1492&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1492&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Features]&amp;nbsp;단계에서&amp;nbsp;Defaults&amp;nbsp;옵션&amp;nbsp;유지하여,&amp;nbsp;Next&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1029&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LxAMw/btsFO1Q9ID8/EdKeEnomrZIsCOFwTxKIK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LxAMw/btsFO1Q9ID8/EdKeEnomrZIsCOFwTxKIK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LxAMw/btsFO1Q9ID8/EdKeEnomrZIsCOFwTxKIK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLxAMw%2FbtsFO1Q9ID8%2FEdKeEnomrZIsCOFwTxKIK1%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;1440&quot; height=&quot;1029&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1029&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;1440&quot; data-origin-height=&quot;1021&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRJV6U/btsFMKpNinW/khkbMj1OaUkNs8KyyLYkd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRJV6U/btsFMKpNinW/khkbMj1OaUkNs8KyyLYkd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRJV6U/btsFMKpNinW/khkbMj1OaUkNs8KyyLYkd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRJV6U%2FbtsFMKpNinW%2FkhkbMj1OaUkNs8KyyLYkd1%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;1440&quot; height=&quot;1021&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1021&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;1440&quot; data-origin-height=&quot;1019&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tEe84/btsFMNzYIlk/ZaMaFRG3xQlI63xCxHaKS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tEe84/btsFMNzYIlk/ZaMaFRG3xQlI63xCxHaKS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tEe84/btsFMNzYIlk/ZaMaFRG3xQlI63xCxHaKS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtEe84%2FbtsFMNzYIlk%2FZaMaFRG3xQlI63xCxHaKS0%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;1440&quot; height=&quot;1019&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1019&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치&amp;nbsp;완료&amp;nbsp;후,&amp;nbsp;&amp;ldquo;Promote&amp;nbsp;This&amp;nbsp;server&amp;nbsp;to&amp;nbsp;a&amp;nbsp;domain&amp;nbsp;controller&amp;rdquo;&amp;nbsp;문구가&amp;nbsp;클릭&amp;nbsp;후,&amp;nbsp;Domain&amp;nbsp;Controller&amp;nbsp;구성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1028&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTPbH5/btsFOB6fe4N/obXrtK2hZRMkc8TGXTyo6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTPbH5/btsFOB6fe4N/obXrtK2hZRMkc8TGXTyo6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTPbH5/btsFOB6fe4N/obXrtK2hZRMkc8TGXTyo6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTPbH5%2FbtsFOB6fe4N%2FobXrtK2hZRMkc8TGXTyo6k%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;1440&quot; height=&quot;1028&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1028&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새로운 구성으로, Add a new forest 클릭 후, Root domain name 입력&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1057&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbF7mx/btsFLOzt480/p1OyaDF1edBOvmOK9zHiTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbF7mx/btsFLOzt480/p1OyaDF1edBOvmOK9zHiTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbF7mx/btsFLOzt480/p1OyaDF1edBOvmOK9zHiTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbF7mx%2FbtsFLOzt480%2Fp1OyaDF1edBOvmOK9zHiTK%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;1440&quot; height=&quot;1057&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1057&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;1440&quot; data-origin-height=&quot;1058&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2mOMQ/btsFOmBoVPy/KcOUzQwAnfWgj1eNWT48TK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2mOMQ/btsFOmBoVPy/KcOUzQwAnfWgj1eNWT48TK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2mOMQ/btsFOmBoVPy/KcOUzQwAnfWgj1eNWT48TK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2mOMQ%2FbtsFOmBoVPy%2FKcOUzQwAnfWgj1eNWT48TK%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;1440&quot; height=&quot;1058&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1058&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;1440&quot; data-origin-height=&quot;1063&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CLPxO/btsFOUSba1i/ZvMNWu94kT2nuXQbzoY5mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CLPxO/btsFOUSba1i/ZvMNWu94kT2nuXQbzoY5mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CLPxO/btsFOUSba1i/ZvMNWu94kT2nuXQbzoY5mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCLPxO%2FbtsFOUSba1i%2FZvMNWu94kT2nuXQbzoY5mk%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;1440&quot; height=&quot;1063&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1063&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;1440&quot; data-origin-height=&quot;1063&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/75rux/btsFMNGLByz/27AujQ6OC1RLTELmT8AkK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/75rux/btsFMNGLByz/27AujQ6OC1RLTELmT8AkK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/75rux/btsFMNGLByz/27AujQ6OC1RLTELmT8AkK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F75rux%2FbtsFMNGLByz%2F27AujQ6OC1RLTELmT8AkK1%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;1440&quot; height=&quot;1063&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1063&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;1440&quot; data-origin-height=&quot;1056&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AsOd8/btsFN66J2yo/KQU0bKME2KRRVx2wIKm9HK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AsOd8/btsFN66J2yo/KQU0bKME2KRRVx2wIKm9HK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AsOd8/btsFN66J2yo/KQU0bKME2KRRVx2wIKm9HK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAsOd8%2FbtsFN66J2yo%2FKQU0bKME2KRRVx2wIKm9HK%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;1440&quot; height=&quot;1056&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1056&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;1440&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E1Eeo/btsFOieLVk7/IZ6K1yDd0Gf9hXvTWzWHEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E1Eeo/btsFOieLVk7/IZ6K1yDd0Gf9hXvTWzWHEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E1Eeo/btsFOieLVk7/IZ6K1yDd0Gf9hXvTWzWHEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE1Eeo%2FbtsFOieLVk7%2FIZ6K1yDd0Gf9hXvTWzWHEK%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;1440&quot; height=&quot;1068&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1068&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정상적으로&amp;nbsp;설치&amp;nbsp;완료되었다면,&amp;nbsp;구성&amp;nbsp;사항&amp;nbsp;반영을&amp;nbsp;위해&amp;nbsp;Restart&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;688&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RmBWd/btsFLP6dUIL/6VR7mSsEqn24KKjqVj0yl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RmBWd/btsFLP6dUIL/6VR7mSsEqn24KKjqVj0yl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RmBWd/btsFLP6dUIL/6VR7mSsEqn24KKjqVj0yl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRmBWd%2FbtsFLP6dUIL%2F6VR7mSsEqn24KKjqVj0yl0%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;1440&quot; height=&quot;688&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;688&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3-2. AD 서버 접근 및 AD DS 확인&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AD 서버에 액세스 시, 위 단계에서 구성한 AD DS에 등록된 Domain Controllers 정보로 로그인합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;rarr; 정상적으로 Domain에 등록되었는지 확인을 위해&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;771&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hk9aT/btsFOEhBbR9/SEw0wpRpqDOKEOTf7281H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hk9aT/btsFOEhBbR9/SEw0wpRpqDOKEOTf7281H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hk9aT/btsFOEhBbR9/SEw0wpRpqDOKEOTf7281H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHk9aT%2FbtsFOEhBbR9%2FSEw0wpRpqDOKEOTf7281H0%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;1440&quot; height=&quot;771&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;771&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AD DS 및 DNS 구성 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;976&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdxMrz/btsFRufFOIt/R80FB7rmu8QcfkJw4Lx5vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdxMrz/btsFRufFOIt/R80FB7rmu8QcfkJw4Lx5vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdxMrz/btsFRufFOIt/R80FB7rmu8QcfkJw4Lx5vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdxMrz%2FbtsFRufFOIt%2FR80FB7rmu8QcfkJw4Lx5vk%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;2000&quot; height=&quot;976&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;976&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AD DS(Domain) 구성 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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/bWYlvl/btsFQgXbW33/Mx5Ky5xhkOjzOXlHYtG0w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWYlvl/btsFQgXbW33/Mx5Ky5xhkOjzOXlHYtG0w1/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1078&quot; data-is-animation=&quot;false&quot; style=&quot;width: 61.1083%; margin-right: 10px;&quot; data-widthpercent=&quot;61.83&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWYlvl/btsFQgXbW33/Mx5Ky5xhkOjzOXlHYtG0w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWYlvl%2FbtsFQgXbW33%2FMx5Ky5xhkOjzOXlHYtG0w1%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;2000&quot; height=&quot;1078&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p8NGh/btsFS1c9nEo/Hu9aixsia7huh6Kvt3ehQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p8NGh/btsFS1c9nEo/Hu9aixsia7huh6Kvt3ehQk/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1746&quot; data-is-animation=&quot;false&quot; style=&quot;width: 37.7289%;&quot; data-widthpercent=&quot;38.17&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p8NGh/btsFS1c9nEo/Hu9aixsia7huh6Kvt3ehQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp8NGh%2FbtsFS1c9nEo%2FHu9aixsia7huh6Kvt3ehQk%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;2000&quot; height=&quot;1746&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &amp;rarr; &lt;span style=&quot;color: #ee2323;&quot;&gt;다른 1대의 AD 서버(tak-ad-02)도 위 단계와 동일하게 구성&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하시면 됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 단계 일부 다른점은 AD DS 구성 설정 시, &lt;br /&gt;새로운 도메인 추가가 아닌 &lt;b&gt;기존 도메인에 Domain Controller를 추가&lt;/b&gt;하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFsAHH/btsFQb9g8C8/wWnGp21y6PpgDEHkBnidk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFsAHH/btsFQb9g8C8/wWnGp21y6PpgDEHkBnidk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFsAHH/btsFQb9g8C8/wWnGp21y6PpgDEHkBnidk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFsAHH%2FbtsFQb9g8C8%2FwWnGp21y6PpgDEHkBnidk1%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;2000&quot; height=&quot;1477&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인증 방법은 도메인 전체 혹은 도메인의 NetBOIS를 입력하는 2가지 방법 중 편하신 방법을 선택하여 인증&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BMkKY/btsFTb00ZHG/ab8KAryX76B6LtnHTK5omK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BMkKY/btsFTb00ZHG/ab8KAryX76B6LtnHTK5omK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BMkKY/btsFTb00ZHG/ab8KAryX76B6LtnHTK5omK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBMkKY%2FbtsFTb00ZHG%2Fab8KAryX76B6LtnHTK5omK%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;2000&quot; height=&quot;1477&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1477&quot;/&gt;&lt;/span&gt;&lt;/figure&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/t4w8h/btsFRqK5mx8/HDr3BtRR9buIVrKKs3GeN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t4w8h/btsFRqK5mx8/HDr3BtRR9buIVrKKs3GeN1/img.png&quot; style=&quot;width: 53.983%; margin-right: 10px;&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1219&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;54.65&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t4w8h/btsFRqK5mx8/HDr3BtRR9buIVrKKs3GeN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft4w8h%2FbtsFRqK5mx8%2FHDr3BtRR9buIVrKKs3GeN1%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;2000&quot; height=&quot;1219&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UDL6N/btsFTX9stn7/NUmNBq21Gi1FtcgVkxpMk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UDL6N/btsFTX9stn7/NUmNBq21Gi1FtcgVkxpMk1/img.png&quot; style=&quot;width: 44.796%;&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1469&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;45.35&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UDL6N/btsFTX9stn7/NUmNBq21Gi1FtcgVkxpMk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUDL6N%2FbtsFTX9stn7%2FNUmNBq21Gi1FtcgVkxpMk1%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;2000&quot; height=&quot;1469&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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/bRTW3H/btsFTYtNRTj/yhLWbVleRT6KI14wvbYuq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRTW3H/btsFTYtNRTj/yhLWbVleRT6KI14wvbYuq0/img.png&quot; style=&quot;width: 54.0323%; margin-right: 10px;&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1224&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;54.7&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRTW3H/btsFTYtNRTj/yhLWbVleRT6KI14wvbYuq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRTW3H%2FbtsFTYtNRTj%2FyhLWbVleRT6KI14wvbYuq0%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;2000&quot; height=&quot;1224&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brlBbw/btsFRlDpSPA/bxvcYW9Pshy5lEnSrf0sa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brlBbw/btsFRlDpSPA/bxvcYW9Pshy5lEnSrf0sa0/img.png&quot; style=&quot;width: 44.7467%;&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1478&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;45.3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brlBbw/btsFRlDpSPA/bxvcYW9Pshy5lEnSrf0sa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrlBbw%2FbtsFRlDpSPA%2FbxvcYW9Pshy5lEnSrf0sa0%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;2000&quot; height=&quot;1478&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kFGJz/btsFRzBr9sp/ix0Q5qvEU7LcrK2zRlR5Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kFGJz/btsFRzBr9sp/ix0Q5qvEU7LcrK2zRlR5Jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kFGJz/btsFRzBr9sp/ix0Q5qvEU7LcrK2zRlR5Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkFGJz%2FbtsFRzBr9sp%2Fix0Q5qvEU7LcrK2zRlR5Jk%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;2000&quot; height=&quot;1472&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &amp;rarr; 이후 과정은 동일합니다.&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AD 서버 2대 모두 정상적으로 설치 및 구성하였다면, 다음과 같이 확인 가능합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정상적으로 도메인(tak2on.com) 의 Domain Controllers 등록&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;1109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qRuJa/btsFRaIv5Lg/kLxA1CmitOb351If291tIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qRuJa/btsFRaIv5Lg/kLxA1CmitOb351If291tIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qRuJa/btsFRaIv5Lg/kLxA1CmitOb351If291tIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqRuJa%2FbtsFRaIv5Lg%2FkLxA1CmitOb351If291tIK%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;2000&quot; height=&quot;1109&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1109&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;2000&quot; data-origin-height=&quot;1402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HRkyk/btsFTdR2tsQ/jlGScodENowBYYakhShH6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HRkyk/btsFTdR2tsQ/jlGScodENowBYYakhShH6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HRkyk/btsFTdR2tsQ/jlGScodENowBYYakhShH6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHRkyk%2FbtsFTdR2tsQ%2FjlGScodENowBYYakhShH6k%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;2000&quot; height=&quot;1402&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1402&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;span style=&quot;color: #000000;&quot;&gt;4. Azure Virtaul Network DNS 서버 설정&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 지금까지 구성한 AD DS의 경우, 앞서 설명한 SQL Server의 고가용성을 위한 역할로 사용됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 구성된 네트워크의 DNS 정보를 SQL Server가 AD 서버를 바라볼 수 있도록 DNS 서버 값을 지정합니다.&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;2000&quot; data-origin-height=&quot;1406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0a9MO/btsFQgv9fl2/ZS9ngkrHxakQthskcdfFJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0a9MO/btsFQgv9fl2/ZS9ngkrHxakQthskcdfFJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0a9MO/btsFQgv9fl2/ZS9ngkrHxakQthskcdfFJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0a9MO%2FbtsFQgv9fl2%2FZS9ngkrHxakQthskcdfFJ0%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;2000&quot; height=&quot;1406&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1406&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;span style=&quot;color: #000000;&quot;&gt;5. SQL Server에 대한 AD Join&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: SQL Server의 고가용성을 위한 AD 서버의 목적으로 사용할 수 있도록 &lt;u&gt;&lt;b&gt;전체 SQL Server를 대상&lt;/b&gt;&lt;/u&gt;으로 위에서 생성한 도메인에 Member(Computer)로 등록합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위에서 설정한 DNS 서버의 값들이 적용되고 있는 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;u&gt;&lt;b&gt;각 SQL Sever 내 DNS 서버 정보 확인(모든 SQL Server에서 확인)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;1275&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w7C3q/btsFUr3ouSM/X3kn8to1pNdUUSKDvlUudK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w7C3q/btsFUr3ouSM/X3kn8to1pNdUUSKDvlUudK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w7C3q/btsFUr3ouSM/X3kn8to1pNdUUSKDvlUudK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw7C3q%2FbtsFUr3ouSM%2FX3kn8to1pNdUUSKDvlUudK%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;2000&quot; height=&quot;1275&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1275&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;각 SQL Server에서 Domain Join 작업 실행&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&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/nSXi0/btsFTdxPa1Y/RyntLKY38XGbcq10w2paS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nSXi0/btsFTdxPa1Y/RyntLKY38XGbcq10w2paS1/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1095&quot; data-is-animation=&quot;false&quot; style=&quot;width: 65.1427%; margin-right: 10px;&quot; data-widthpercent=&quot;65.91&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nSXi0/btsFTdxPa1Y/RyntLKY38XGbcq10w2paS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnSXi0%2FbtsFTdxPa1Y%2FRyntLKY38XGbcq10w2paS1%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;2000&quot; height=&quot;1095&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WGJxJ/btsFRcTXOz7/lejqxCLS5sGie6HOKQ5tRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WGJxJ/btsFRcTXOz7/lejqxCLS5sGie6HOKQ5tRK/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2117&quot; data-is-animation=&quot;false&quot; style=&quot;width: 33.6945%;&quot; data-widthpercent=&quot;34.09&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WGJxJ/btsFRcTXOz7/lejqxCLS5sGie6HOKQ5tRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWGJxJ%2FbtsFRcTXOz7%2FlejqxCLS5sGie6HOKQ5tRK%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;2000&quot; height=&quot;2117&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9KhJm/btsFT0yqLPZ/4tfdQJbH38YGQmn36ACh61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9KhJm/btsFT0yqLPZ/4tfdQJbH38YGQmn36ACh61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9KhJm/btsFT0yqLPZ/4tfdQJbH38YGQmn36ACh61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9KhJm%2FbtsFT0yqLPZ%2F4tfdQJbH38YGQmn36ACh61%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;2000&quot; height=&quot;2269&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2269&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설정 이후, Domaion Join을 위한 인증&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;rarr; AD 서버의 도메인 관리자 계정으로 인증해야 하며, 이는 VM이 생성될 때 설정한 사용자가 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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/bJ9PPf/btsFQT1mzdP/INKYu6nGBeXh7PZnEkA5u0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ9PPf/btsFQT1mzdP/INKYu6nGBeXh7PZnEkA5u0/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1314&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.1571%; margin-right: 10px;&quot; data-widthpercent=&quot;47.71&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ9PPf/btsFQT1mzdP/INKYu6nGBeXh7PZnEkA5u0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ9PPf%2FbtsFQT1mzdP%2FINKYu6nGBeXh7PZnEkA5u0%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;2000&quot; height=&quot;1314&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nFzzH/btsFTYtRGwt/bPDCWNVCtauE9qKl59XMJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nFzzH/btsFTYtRGwt/bPDCWNVCtauE9qKl59XMJK/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1199&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.6801%;&quot; data-widthpercent=&quot;52.29&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nFzzH/btsFTYtRGwt/bPDCWNVCtauE9qKl59XMJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnFzzH%2FbtsFTYtRGwt%2FbPDCWNVCtauE9qKl59XMJK%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;2000&quot; height=&quot;1199&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;재시작 후, 관리자 계정으로 로그인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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/lt9I2/btsFQfxhupL/fluiCvITrsHEUzMkcTiJx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lt9I2/btsFQfxhupL/fluiCvITrsHEUzMkcTiJx1/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1093&quot; data-is-animation=&quot;false&quot; style=&quot;width: 38.5868%; margin-right: 10px;&quot; data-widthpercent=&quot;39.04&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lt9I2/btsFQfxhupL/fluiCvITrsHEUzMkcTiJx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flt9I2%2FbtsFQfxhupL%2FfluiCvITrsHEUzMkcTiJx1%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;2000&quot; height=&quot;1093&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEdml3/btsFTdLjWDh/IgEZPqc7mp5Malenbuizz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEdml3/btsFTdLjWDh/IgEZPqc7mp5Malenbuizz1/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;700&quot; data-is-animation=&quot;false&quot; style=&quot;width: 60.2505%;&quot; data-widthpercent=&quot;60.96&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEdml3/btsFTdLjWDh/IgEZPqc7mp5Malenbuizz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEdml3%2FbtsFTdLjWDh%2FIgEZPqc7mp5Malenbuizz1%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;2000&quot; height=&quot;700&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr; &lt;span style=&quot;color: #ee2323;&quot;&gt;모든 SQL 서버 대상으로 위 단계의 AD Join 작업 진행&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;rarr; AD 서버 관리 페이지에 Computers 항목에 AD Join이 정상적으로 되어 편입되었는지 확인&lt;/b&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;2000&quot; data-origin-height=&quot;1410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGqONj/btsFT0SG8z6/glYZEF1v1OmjzneSrdaWTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGqONj/btsFT0SG8z6/glYZEF1v1OmjzneSrdaWTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGqONj/btsFT0SG8z6/glYZEF1v1OmjzneSrdaWTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGqONj%2FbtsFT0SG8z6%2FglYZEF1v1OmjzneSrdaWTk%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;2000&quot; height=&quot;1410&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1410&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지&lt;b&gt; &quot;SQL Server Always On 가용성 그룹 on Azure&quot;&lt;/b&gt;를 위한 &lt;b&gt;개념과 테스트를 위한 환경 및 구성도 그리고 AD 서버의 구축 단계&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;다음 포스팅에서는 SQL Server의 Failover Cluster 구성, SQL구성 그리고 Always On 가용성 그룹 구성까지 알아보겠습니다.(!! 많관부!!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;이번 포스팅에서 부족한 점, &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;궁금한 점 &lt;/span&gt;등 자유로운 의견을 남겨주세요!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TOPIC/DB</category>
      <category>AD DS</category>
      <category>AD 서버</category>
      <category>Always on 가용성 그룹</category>
      <category>AlwaysOn</category>
      <category>Azure</category>
      <category>failover</category>
      <category>mssql</category>
      <category>SQL Server</category>
      <category>가용성 그룹</category>
      <category>고가용성</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/28</guid>
      <comments>https://with-cloud.tistory.com/28#entry28comment</comments>
      <pubDate>Mon, 18 Mar 2024 15:08:05 +0900</pubDate>
    </item>
    <item>
      <title>Encrypting Secret Data at Rest in ETCD</title>
      <link>https://with-cloud.tistory.com/27</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글은 Encrypting Secret Data at Rest in ETCD에 대한 내용인데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개인적으로 한번은 꼭 해보고 싶었던 테스트라 VM으로 Kubernetes Cluster를 구성한 김에 진행해 보았습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 1. ETCD란? &lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; ETCD Encryption at Rest 테스트를 진행하기에 앞서 먼저 ETCD가 무엇인지 간단하게 알아보도록 하겠습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; ETCD란?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; ETCD는 Kubernetes Cluster의 모든 데이터를 담는 Kubernetes의 Key-Value 형태의 저장소입니다. &lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 우리가 kubectl 명령어를 입력해서 받는 여러 Kubernetes Objects에 대한 정보는 모두 ETCD에 저장된 데이터에서 가져오는 정보죠. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 Secret 데이터도 ETCD에 저장되게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면 Secret 데이터가 ETCD에 저장될 때 암호화되어 저장이 될까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 답은&lt;/span&gt; &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;No&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본적으로 ETCD에 저장되는 Secret 데이터는 평문으로 저장이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러나 Kubernetes는 ETCD에 저장되는 Secret 데이터를 암호화하는 방법을 제공하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면 ETCD를 암호화하는 이유는 뭘까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 이유는 Control Plane에 root 권한을 가진 사람은 ETCD에 접근해서 Secret 데이터를 볼 수 있기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이것이 바로 이번 글에서 다룰 Encrypting Secret Data at Rest in ETCD 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 전에 한 가지 설명하고자 하는 것은 ETCD pod의 형태입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ETCD뿐만 아니라 Control Plane의 Component는 사용자가 배포하는 Pod와는 조금 다른 성질을 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;바로, ETCD나, API Server, Scheduler와 같은 Component는 &lt;b&gt;Static Pod&lt;/b&gt;의 형태로 kube-system Namespace에 배포된 다는 것인데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt; &lt;b&gt;Static Pod&lt;/b&gt;는 또 무엇일까요? &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일반적으로&lt;/span&gt; &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;kubectl create&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;또는 &lt;/span&gt;&lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;kubectl apply&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어로 pod를 생성할 때에는 kube-apiserver가 그 요청을 받아서 kubelet에게 알려주고 그 다음 각 Node에 있는 kubelet이 이를 처리하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러나 Control Plane의 &lt;i&gt;/etc/kubernetes/manifests/&lt;/i&gt; 디렉토리(default 경로) 하위에 있는 yaml file을 기반으로 kubelet은 자동으로 생성하고 관리하는 pod들이 있는데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이것이 바로 Static Pod입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Control Plane의 Component를 Static Pod로 생성하면 kubelet이 해당 디렉토리를 지속적으로 관리하고 감시하여서 manifest file에 정의된 대로 각 pod의 상태를 유지하고자 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 실제로 Control Plane 서버에서&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;1&quot;&gt;ls /etc/kubernetes/manifests/&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 실행해 보면 하기 스크린샷과 같이 각 Control Plane Component에 대한 yaml file이 존재하는 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxnTmv/btsFI6lAs0P/UZeCg7MBYkSaGn96KsInH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxnTmv/btsFI6lAs0P/UZeCg7MBYkSaGn96KsInH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxnTmv/btsFI6lAs0P/UZeCg7MBYkSaGn96KsInH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxnTmv%2FbtsFI6lAs0P%2FUZeCg7MBYkSaGn96KsInH0%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;743&quot; height=&quot;59&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 외에도 Static Pod로 생성하고 싶은 pod의 manifest file을 해당 디렉토리에 위치시키면 kubelet이 자동으로 pod를 생성하고 관리하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 ETCD pod의 성질을 간단히 알아 보았는데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다시 본 주제로 돌아와서 ETCD에 저장된 Secret 값을 암호화하는 테스트를 진행해 보겠습니다.&lt;/span&gt;&lt;/p&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;&lt;span style=&quot;color: #000000;&quot;&gt;2. ETCDCTL 설치&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Encrypting Secret Data at Rest in ETCD 테스트를 진행하기 전 현재 ETCD에 저장된 데이터가 실제 평문으로 저장되어 있는지를 확인해 봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이전 글에서 kubeadm으로 Kubernetes Cluster를 생성하였기 때문에 ETCD를 위한 별도의 설치는 필요하지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러나 ETCD와 상호작용하기 위해서 etcdctl이라는 Command Line Tool을 설치해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 공식 문서 (&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://etcd.io/docs/v3.4/install/&quot;&gt;https://etcd.io/docs/v3.4/install/&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)를 참고하여 etcdctl을 설치합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ETCD repo를 다운로드하기 위해 &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;git clone -b v3.4.28&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt; https://github.com/etcd-io/etcd.git&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;681&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAGp64/btsFJp6jo8q/XwcI3T6ZPsd774k7KHVsOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAGp64/btsFJp6jo8q/XwcI3T6ZPsd774k7KHVsOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAGp64/btsFJp6jo8q/XwcI3T6ZPsd774k7KHVsOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAGp64%2FbtsFJp6jo8q%2FXwcI3T6ZPsd774k7KHVsOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;657&quot; height=&quot;681&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;681&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;cd etcd/&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어로 디렉토리를 이동한 다음&lt;/span&gt; &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;./build&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 명령어를 통해 build script를 실행합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약&lt;/span&gt; &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;./build&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어 실행 시 하기와 같은 에러가 발생한다면 &lt;b&gt;Go&lt;/b&gt;를 설치해 주어야 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Go 설치 (공식 문서 링크 :&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://go.dev/doc/install&quot;&gt;https://go.dev/doc/install&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이전에 Go를 설치했을 수도 있기 때문에 해당 디렉토리를 삭제하고 새로 설치합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; rm -rf /usr/local/go &amp;amp;&amp;amp; tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt; 상기 명령어가 제대로 작동하지 않을 경우에는 &amp;nbsp;&lt;span style=&quot;color: #eb5757; background-color: #dddddd;&quot; data-token-index=&quot;1&quot;&gt;wget https://go.dev/dl/go1.22.1.linux-amd64.tar.gz&lt;/span&gt; 명령어를 입력한 후 &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt;tar Cxzvf /usr/local go1.22.1.linux-amd64.tar.gz&lt;/span&gt;를 실행하여 tar 파일을 &lt;i&gt;&lt;span data-token-index=&quot;2&quot;&gt;/usr/local&lt;/span&gt; &lt;/i&gt;디렉토리에 압축해제 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; ls /usr/local&lt;/span&gt; 명령어를 입력하여 Go가 정상적으로 설치된 것을 확인합니다.&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;807&quot; data-origin-height=&quot;63&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1Bzfv/btsFJxJQd8B/bnU5rAY26WCTjsB5xmZX81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1Bzfv/btsFJxJQd8B/bnU5rAY26WCTjsB5xmZX81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1Bzfv/btsFJxJQd8B/bnU5rAY26WCTjsB5xmZX81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1Bzfv%2FbtsFJxJQd8B%2FbnU5rAY26WCTjsB5xmZX81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;486&quot; height=&quot;38&quot; data-origin-width=&quot;807&quot; data-origin-height=&quot;63&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; vi ~/.bashrc&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력한 후 파일 가장 하단에&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;2&quot;&gt;PATH=$PATH:/usr/local/go/bin&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 추가하여 &lt;i&gt;/usr/local/go/bin&lt;/i&gt; 디렉토리를 PATH에 영구히 추가합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;31&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh99Mo/btsFHutK5mw/3XkgggSW04FzvKiAm3ckE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh99Mo/btsFHutK5mw/3XkgggSW04FzvKiAm3ckE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh99Mo/btsFHutK5mw/3XkgggSW04FzvKiAm3ckE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh99Mo%2FbtsFHutK5mw%2F3XkgggSW04FzvKiAm3ckE1%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;270&quot; height=&quot;20&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;31&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; source ~/.bashrc&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 변경 사항을 반영합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt;go version&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; 명령어를 입력하여 설치를 다시 한번 확인합니다.&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFNndV/btsFHqq8AB2/BI8qVk8CrLUDQL3yYQEkSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFNndV/btsFHqq8AB2/BI8qVk8CrLUDQL3yYQEkSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFNndV/btsFHqq8AB2/BI8qVk8CrLUDQL3yYQEkSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFNndV%2FbtsFHqq8AB2%2FBI8qVk8CrLUDQL3yYQEkSk%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;323&quot; height=&quot;33&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다시&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;1&quot;&gt;cd etcd &amp;amp;&amp;amp; ./build&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 수행하면 이전과는 다르게 제대로 설치가 되는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1123&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kJwUd/btsFFLJQdih/sbSndb9CSk05mukUc5HA40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kJwUd/btsFFLJQdih/sbSndb9CSk05mukUc5HA40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kJwUd/btsFFLJQdih/sbSndb9CSk05mukUc5HA40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkJwUd%2FbtsFFLJQdih%2FsbSndb9CSk05mukUc5HA40%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;586&quot; height=&quot;207&quot; data-origin-width=&quot;1123&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; vi ~/.bashrc&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력한 후 앞서 추가했던 PATH 뒤에&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;2&quot;&gt;:/root/etcd/bin&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 입력하여 &lt;i&gt;/root/etcd/bin&lt;/i&gt; 디렉토리를 PATH에 영구히 추가합니다.&amp;nbsp;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pfW78/btsFJ4N9XH6/okNSll9CTFJorl7408qTy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pfW78/btsFJ4N9XH6/okNSll9CTFJorl7408qTy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pfW78/btsFJ4N9XH6/okNSll9CTFJorl7408qTy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpfW78%2FbtsFJ4N9XH6%2FokNSll9CTFJorl7408qTy0%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;476&quot; height=&quot;54&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; source ~/.bashrc&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 변경 사항을 반영합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; etcd --version&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 etcdctl이 제대로 설치되었는지 확인합니다. &lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kIg6r/btsFGKDqw2v/tRpNK6xkKO4Or7lJOHqZu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kIg6r/btsFGKDqw2v/tRpNK6xkKO4Or7lJOHqZu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kIg6r/btsFGKDqw2v/tRpNK6xkKO4Or7lJOHqZu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkIg6r%2FbtsFGKDqw2v%2FtRpNK6xkKO4Or7lJOHqZu1%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;600&quot; height=&quot;130&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; ETCDCTL도 설치가 완료되었으니 이제 정말로 Encrypting Secret Data at Rest in ETCD를 테스트해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&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;&lt;span style=&quot;color: #000000;&quot;&gt;3. ETCD에 저장된 Secret 값 확인&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ETCD에 저장되는 Secret 값은 기본적으로 평문으로 저장된다고 앞서 말씀 드렸는데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제로 그런지 알아보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 테스트용 Secret을 생성하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt; kubectl create secret generic secret-hyein --from-literal key=hyeintest&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 secret을 생성합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1399&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HQmFr/btsFJ5fgxCS/fpT2D2zlok10rHykKaTw50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HQmFr/btsFJ5fgxCS/fpT2D2zlok10rHykKaTw50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HQmFr/btsFJ5fgxCS/fpT2D2zlok10rHykKaTw50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHQmFr%2FbtsFJ5fgxCS%2FfpT2D2zlok10rHykKaTw50%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;1399&quot; height=&quot;57&quot; data-origin-width=&quot;1399&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; kubectl get secret secret-hyein -o yaml&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력해서 확인해 보면 base64로 인코딩된 형태로 데이터가 저장되어 있는 것을 알 수 있습니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca3DKJ/btsFGDraS2Z/xY53JzgFjTkzQlYMER3Fh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca3DKJ/btsFGDraS2Z/xY53JzgFjTkzQlYMER3Fh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca3DKJ/btsFGDraS2Z/xY53JzgFjTkzQlYMER3Fh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca3DKJ%2FbtsFGDraS2Z%2FxY53JzgFjTkzQlYMER3Fh0%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;535&quot; height=&quot;191&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; echo &quot;aHllaW50ZXN0&quot; | base64 -d&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 디코딩하면 쉽게 value 값을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byCH3f/btsFGS9tHY0/czAl3I766gfwahx38u0ASK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byCH3f/btsFGS9tHY0/czAl3I766gfwahx38u0ASK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byCH3f/btsFGS9tHY0/czAl3I766gfwahx38u0ASK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyCH3f%2FbtsFGS9tHY0%2FczAl3I766gfwahx38u0ASK%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;466&quot; height=&quot;33&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면 ETCD에 저장된 Secret도 똑같은지 확인해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ETCD Server에 연결하기 위해서는&lt;/span&gt; &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;--cacert&lt;/span&gt;, &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;--cert&lt;/span&gt;, &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;--key&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;값이 필요한데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이런 값은 어디서 확인해야 할까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞서 설명 드렸던 Static Pod들이 저장된 디렉토리의 &lt;b&gt;etcd.yaml&lt;/b&gt; 파일을 확인해 보면 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; cat /etc/kubernetes/manifest/etcd.yaml&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 필요한 값들에 대한 정보를 확인합니다. &lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;982&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s8hLE/btsFJKoRnSS/SfXglss8ajI2DdEEqHh6y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s8hLE/btsFJKoRnSS/SfXglss8ajI2DdEEqHh6y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s8hLE/btsFJKoRnSS/SfXglss8ajI2DdEEqHh6y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs8hLE%2FbtsFJKoRnSS%2FSfXglss8ajI2DdEEqHh6y1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;511&quot; height=&quot;469&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;982&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 하기와 같은 명령어를 입력해서 ETCD에 저장된 Secret 데이터를 확인합니다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1710216012513&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ETCDCTL_API=3 etcdctl\
   --cacert=/etc/kubernetes/pki/etcd/ca.crt \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key \
   get /registry/secrets/default/secret-hyein | hexdump -C&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 스크린샷의 오른쪽 하단을 보면 key의 값이 hyeintest인 것을 볼 수 있습니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/47LSu/btsFIwYY5Cc/N1qixyZrQmf7EYuIhRj2O1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/47LSu/btsFIwYY5Cc/N1qixyZrQmf7EYuIhRj2O1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/47LSu/btsFIwYY5Cc/N1qixyZrQmf7EYuIhRj2O1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F47LSu%2FbtsFIwYY5Cc%2FN1qixyZrQmf7EYuIhRj2O1%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;588&quot; height=&quot;344&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;649&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; kubectl get secret secret-hyein -o yaml&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력했을 때에는 적어도 base64로 인코딩된 형태로 존재했지만 ETCD에 저장된 데이터는 평문 그대로 저장된 것을 확인할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 경우, 만약 누군가가 Control Plane 서버에 접근해서&lt;/span&gt; &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;--cacert&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;--cert&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;--key&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;값만 알 수 있다면 Cluster에 존재하는 Secret 데이터가 유출 될 수 있는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 방지하기 위해, 지금부터 ETCD에 저장되는 데이터에 대한 암호화를 구성해 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&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;&lt;span style=&quot;color: #000000;&quot;&gt;4. Encrypting Secret Data at Rest in ETCD&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; (참고 링크 :&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/&quot;&gt;https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ETCD Encryption을 진행하기 위해서는 두 가지 과정이 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1️⃣ EncryptionConfiguration Object 생성&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2️⃣ kube-apiserver 설정 변경&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1번부터 진행해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 4.1 EncryptionConfiguration Object 생성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;EncryptionConfiguration Object는 Kubernetes Cluster의 구성 중 하나로 ETCD의 데이터를 암호화하는 데 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;EncryptionConfiguration를 설정하면 EncryptionConfiguration manifest 파일에 지정한 리소스(ex. secrets, configmaps)의 데이터는 모두 암호화됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;암호화를 위해서는 보안 키가 필요하며 이 키는 EncryptionConfiguration의 manifest 파일에 지정됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(key 값은 base64로 인코딩하여 기재해야 합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; manifest file을 생성하기에 앞서 먼저 key로 사용할 값을 인코딩 해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;32바이트의 랜덤한 키를 생성하기 위해 &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;head -c 32 /dev/urandom | base64&lt;/span&gt; 명령어를 입력합니다. (출력 내용 저장 필요)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AES-CBC 암호화를 사용하는 키는 128비트, 192비트, 256비트의 길이를 가져야 합니다. (16자, 24자, 32자)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇지 않을 경우, 에러가 발생할 수 있습니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vUQTI/btsFGqSInKm/kGQ2SeEJTdFnzYPRL7NiI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vUQTI/btsFGqSInKm/kGQ2SeEJTdFnzYPRL7NiI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vUQTI/btsFGqSInKm/kGQ2SeEJTdFnzYPRL7NiI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvUQTI%2FbtsFGqSInKm%2FkGQ2SeEJTdFnzYPRL7NiI1%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;40&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt; /etc/kubernetes/enc/ &lt;/i&gt;디렉토리에 &lt;b&gt;enc.yaml&lt;/b&gt;이라는 이름으로 EncryptionConfiguration manifest 파일을 생성합니다.&amp;nbsp;&lt;br /&gt;해당 디렉토리가 없을 경우 &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;1&quot;&gt;mkdir /etc/kubernetes/enc/&lt;/span&gt; 명령어로 디렉토리를 먼저 생성합니다.&amp;nbsp;&lt;br /&gt;(폴더는 어디든 상관 없습니다.)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1710216760327&quot; class=&quot;yaml&quot; data-ke-language=&quot;highlight.js&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
    providers:
      - aescbc:
          keys:
            - name: key1
              secret: 3WJOfWFj2SNy2Jj2+EUVUSzEMoRZh13hQ5t4ZWfUhcE=
      - identity: {}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;manifest file 설명&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;resources&lt;/b&gt; field에는 어떤 종류의 리소스(Object)를 암호화할 것인지를 지정합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본 테스트에서는 Secrets만 지정해 주었습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; providers field에는 어떤 암호화 provider를 사용할 것인지를 지정합니다.&lt;br /&gt;provider field는 첫 번째로 정의된 provider가 우선이 되기 때문에 순서가 중요합니다.&amp;nbsp;&lt;br /&gt;&lt;i&gt;ex. identity provider가 가장 첫 번째에 위치하면 모든 Secret 데이터는 평문으로 저장됩니다.&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;b&gt;[암호화 방식]&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; aescbc &lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AES-CBC 암호화를 사용하는 프로바이더로 keys field에 지정한 key1이라는 이름의 키를 사용하여 암호화를 수행합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;secret&lt;/b&gt; field에는 실제 사용될 보안 키가 base64로 인코딩되어 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; identity &lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 별도의 암호화를 수행하지 않은 채로 데이터를 평문으로 제공하는 provider로 default 값입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 파일 작성이 완료되면 저장한 후&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;cat /etc/kubernetes/enc/enc.yaml&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 파일이 제대로 작성되었는지 확인합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9WIHb/btsFKKB0Ldb/L0c6KC3KZXk6zExPVvtK6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9WIHb/btsFKKB0Ldb/L0c6KC3KZXk6zExPVvtK6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9WIHb/btsFKKB0Ldb/L0c6KC3KZXk6zExPVvtK6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9WIHb%2FbtsFKKB0Ldb%2FL0c6KC3KZXk6zExPVvtK6k%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;549&quot; height=&quot;210&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.2&amp;nbsp; kube-apiserver 설정 변경 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; kube-apiserver도 Static Pod이기 때문에 kube-apiserver 관련 manifest 파일은 Control Plane의 &lt;i&gt;/etc/kubernetes/manifest/&lt;/i&gt; 디렉토리에 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; vi /etc/kubernetes/manifests/kube-apiserver.yaml&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 해당 파일을 편집합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt; (문제가 발생했을 때 rollback을 빠르게 하기 위해 backup 파일을 생성한 후 해당 파일을 변경하는 것이 권장됩니다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span data-token-index=&quot;0&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; spec.containers.command 하위의 flag들이 모여있는 곳에&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;1&quot;&gt;--encryption-provider-config&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; flag를 추가합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 경로는 4.1에서 생성한 manifest file이 저장된 경로(ex. &lt;b&gt;/etc/kubernetes/enc/enc.yaml&lt;/b&gt;)를 입력해 주면 됩니다. &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H4aTC/btsFJn1QxnW/1y0mOsJW3kD0QsPZ6DOgnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H4aTC/btsFJn1QxnW/1y0mOsJW3kD0QsPZ6DOgnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H4aTC/btsFJn1QxnW/1y0mOsJW3kD0QsPZ6DOgnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH4aTC%2FbtsFJn1QxnW%2F1y0mOsJW3kD0QsPZ6DOgnK%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;600&quot; height=&quot;332&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;649&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; volumes과 volumeMounts field에도 관련된 내용을 추가해 줍니다. (실제 존재하는 경로를 입력해 주어야 합니다.)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;volumeMounts&amp;nbsp;&lt;/b&gt;field &lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zeCUJ/btsFIxXXEIL/VkC5H1VZ5hAtm9skCLCwv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zeCUJ/btsFIxXXEIL/VkC5H1VZ5hAtm9skCLCwv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zeCUJ/btsFIxXXEIL/VkC5H1VZ5hAtm9skCLCwv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzeCUJ%2FbtsFIxXXEIL%2FVkC5H1VZ5hAtm9skCLCwv0%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;356&quot; height=&quot;332&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; volumes &lt;/b&gt;field&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;813&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6O9C8/btsFJIScY6d/he0V4Sruk3owl9JlESkH90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6O9C8/btsFJIScY6d/he0V4Sruk3owl9JlESkH90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6O9C8/btsFJIScY6d/he0V4Sruk3owl9JlESkH90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6O9C8%2FbtsFJIScY6d%2Fhe0V4Sruk3owl9JlESkH90%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;353&quot; height=&quot;474&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;813&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 변경 사항을 한번 더 확인하고 저장하면 kubelet이 변경 사항을 자동으로 감지하여 kube-apiserver를 자동으로 재생성합니다. (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;재생성에는 시간이 소요되기 때문에 잠시 기다려야 합니다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; kubectl get po -n kube-system&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하였을 때 하기와 같이 pod가 정상적으로 조회가 되어야 합니다. &lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1693&quot; data-origin-height=&quot;563&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ptKA6/btsFGmJ8Ulk/HdwwDFIHg0o7XzlnLZTqXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ptKA6/btsFGmJ8Ulk/HdwwDFIHg0o7XzlnLZTqXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ptKA6/btsFGmJ8Ulk/HdwwDFIHg0o7XzlnLZTqXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FptKA6%2FbtsFGmJ8Ulk%2FHdwwDFIHg0o7XzlnLZTqXK%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;646&quot; height=&quot;215&quot; data-origin-width=&quot;1693&quot; data-origin-height=&quot;563&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.3 Secret 데이터 암호화 확인&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 설정이 완료되었으므로 실제로 변경 사항이 적용되었는지 테스트 해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 새로운 Secret을 생성하여 Secret 데이터가 암호화되어 저장되는지 확인해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;0&quot;&gt; kubectl create secret generic secret-hyein-new --from-literal key=hyeintest-new&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 secret을 생성합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1510&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t0QZJ/btsFGqSMiW6/otbk7kSkfv6LJJmvj7Ypq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t0QZJ/btsFGqSMiW6/otbk7kSkfv6LJJmvj7Ypq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t0QZJ/btsFGqSMiW6/otbk7kSkfv6LJJmvj7Ypq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft0QZJ%2FbtsFGqSMiW6%2Fotbk7kSkfv6LJJmvj7Ypq1%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;1510&quot; height=&quot;58&quot; data-origin-width=&quot;1510&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 다음 하기 명령어를 입력하여 ETCD에 저장된 Secret 데이터가 암호화 되었는지 확인합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1710217740203&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;ETCDCTL_API=3 etcdctl\
   --cacert=/etc/kubernetes/pki/etcd/ca.crt \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key \
   get /registry/secrets/default/secret-hyein-new | hexdump -C&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하기 스크린샷의 첫 번째 빨간 박스를 보면 provider가 Secret 데이터를 암호화했음을 보여주는&lt;/span&gt; &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;k8s:enc:aescbc:v1:&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;이라는 문구가 Secret 이름 뒤에 붙어 있음을 알 수 있습니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 두 번째 빨간 박스를 보면 이전과는 다르게 Secret 데이터가 평문으로 보이지 않는 것을 알 수 있습니다. &lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1112&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/INwhk/btsFGqrN83s/RujwjTkHK0urtJKFDKhDBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/INwhk/btsFGqrN83s/RujwjTkHK0urtJKFDKhDBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/INwhk/btsFGqrN83s/RujwjTkHK0urtJKFDKhDBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FINwhk%2FbtsFGqrN83s%2FRujwjTkHK0urtJKFDKhDBk%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;600&quot; height=&quot;423&quot; data-origin-width=&quot;1112&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 그렇다면 기존 Secret의 데이터도 암호화 되었을까요? &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 기존 Secret의 데이터를 조회해 보면 하기와 같이 아직까지 암호화가 되어 있지 않은 것을 확인할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vFz0b/btsFJBewH6T/STZ05K90kFsRdQhOD0FVFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vFz0b/btsFJBewH6T/STZ05K90kFsRdQhOD0FVFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vFz0b/btsFJBewH6T/STZ05K90kFsRdQhOD0FVFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvFz0b%2FbtsFJBewH6T%2FSTZ05K90kFsRdQhOD0FVFK%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;664&quot; height=&quot;390&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 따라서,&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;1&quot;&gt;kubectl get secrets -A -o json | kubectl replace -f -&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 통해 기존의 모든 Secret 데이터를 암호화하여 ETCD에 저장하여야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 명령어를 적용하면 하기 스크린샷과 같이 Cluster 내의 모든 Secret이 업데이트되는 것을 확인할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbfxmd/btsFGJECWlO/hccgm8Ek6jbeNOkAgDD82K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbfxmd/btsFGJECWlO/hccgm8Ek6jbeNOkAgDD82K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbfxmd/btsFGJECWlO/hccgm8Ek6jbeNOkAgDD82K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcbfxmd%2FbtsFGJECWlO%2Fhccgm8Ek6jbeNOkAgDD82K%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;658&quot; height=&quot;65&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;115&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;다시 한번 기존의 Secret의 데이터를 조회해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;735&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ipqfm/btsFHsQqK0u/XAoeiHO2dja5nPFk2N7FEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ipqfm/btsFHsQqK0u/XAoeiHO2dja5nPFk2N7FEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ipqfm/btsFHsQqK0u/XAoeiHO2dja5nPFk2N7FEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIpqfm%2FbtsFHsQqK0u%2FXAoeiHO2dja5nPFk2N7FEK%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;667&quot; height=&quot;443&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;735&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 아까와는 다르게 Secret 데이터가 평문이 아닌 암호화된 형태로 보이는 것을 확인할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 ETCD에 저장되는 데이터에 대한 암호화를 진행해 보았는데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제부터 ETCD에 데이터를 저장할 때에는 암호화가 적용되어서 평문이 아닌 암호화된 형태로 보여지겠 지만&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여전히 API Server를 통해서 Secret 값을 가져올 때에는,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉,&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;kubectl get secrets secret-hyein -o yaml&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어로 Secret에 저장된 데이터를 조회할 때에는 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그대로 Secret 데이터가 노출된다는 문제가 남아 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 따라서 이 부분까지도 암호화를 하고자 할 경우에는 KMS 플러그인 등을 사용해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 해서 ETCD에 저장되는 Confidential한 데이터를 암호화하여 저장하는 방법에 대해 알아보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;완전한 암호화를 위해서는 여전히 고려해야 할 부분이 남아 있지만 CKA를 준비할 때부터 한번쯤은 해보고 싶은 테스트를 무사히 끝냈다는 점에서 굉장히 만족스러운 글이었습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음에도 좀 더 유익하고 재밌는 글로 돌아오겠습니다!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>Encrypt</category>
      <category>etcd</category>
      <category>k8s</category>
      <category>Kubernetes</category>
      <category>Secret</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/27</guid>
      <comments>https://with-cloud.tistory.com/27#entry27comment</comments>
      <pubDate>Tue, 12 Mar 2024 13:38:49 +0900</pubDate>
    </item>
    <item>
      <title>Virtual Machine으로 Kubernetes Cluster 구성하기 (2)</title>
      <link>https://with-cloud.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요. &lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;지난 글에 이어서 Virtual Machine으로 Kubernetes Cluster를 구성하는 테스트를 다뤄보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(지난 글 : &lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/25&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/25&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710118624191&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;Virtual Machine으로 Kubernetes Cluster 구성하기 (1)&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 드디어 미뤄두고 미뤄뒀던 Kubernetes Cluster on Virtual Machine 구성 테스트를 완료하였습니다.   VMWare로 한번, Azure Virtual Machine으로 한 번, 총 두 번 테스트를 했던 적이 있&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/25&quot; data-og-url=&quot;https://with-cloud.tistory.com/25&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cfxrfk/hyVxvXtu3m/iJKK3ZZsC9XVtWdQYKNLbK/img.png?width=740&amp;amp;height=438&amp;amp;face=0_0_740_438,https://scrap.kakaocdn.net/dn/xisTG/hyVxoYi42C/t5gYmOTHVq153nfbZFWbAk/img.png?width=740&amp;amp;height=438&amp;amp;face=0_0_740_438,https://scrap.kakaocdn.net/dn/DyG8W/hyVxpXfXiA/KkksZkr4KK2GZwGTPURiU0/img.png?width=1137&amp;amp;height=966&amp;amp;face=0_0_1137_966&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/25&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/25&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cfxrfk/hyVxvXtu3m/iJKK3ZZsC9XVtWdQYKNLbK/img.png?width=740&amp;amp;height=438&amp;amp;face=0_0_740_438,https://scrap.kakaocdn.net/dn/xisTG/hyVxoYi42C/t5gYmOTHVq153nfbZFWbAk/img.png?width=740&amp;amp;height=438&amp;amp;face=0_0_740_438,https://scrap.kakaocdn.net/dn/DyG8W/hyVxpXfXiA/KkksZkr4KK2GZwGTPURiU0/img.png?width=1137&amp;amp;height=966&amp;amp;face=0_0_1137_966');&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;Virtual Machine으로 Kubernetes Cluster 구성하기 (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 드디어 미뤄두고 미뤄뒀던 Kubernetes Cluster on Virtual Machine 구성 테스트를 완료하였습니다.   VMWare로 한번, Azure Virtual Machine으로 한 번, 총 두 번 테스트를 했던 적이 있&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. Control Plane 구성&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 3.1 kubeadm init &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Kubernetes Cluster용 [가상 머신] 모두에게 설치해야 할 것들을 모두 설치하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 지금부터는 Control Plane에서 kubeadm init 명령어를 사용하여 본격적으로 Kubernetes Cluster를 구성해 보도록 하겠습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt; ※ kubeadm init 명령어는 반드시 Control Plane에서만 설치하여야 합니다.※ &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;kubeadm init&lt;/span&gt; 명령어를 실행합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 pod cidr 대역이 기본값과 다르다면 (default : 192.168.0.0/16) --pod-network-cidr flag를 사용하여 사용할 pod의 cidr 대역을 직접 명시해 주어야 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(본 테스트에서는 default cidr 대역을 그대로 사용하기 때문에 kubeadm init 명령어만 사용하였습니다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 테스트 중 발생했던 Preflight Error에 대한 Trouble Shooting 내역을 정리해 보았습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 하기와 같은 에러가 발생했는데요. ☠️&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4개의 에러를 해결해야 kubeadm init이 정상적으로 실행되게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qKxNb/btsFGnHC1zj/nuLJK1iQ6luEQy7ikFuFv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qKxNb/btsFGnHC1zj/nuLJK1iQ6luEQy7ikFuFv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qKxNb/btsFGnHC1zj/nuLJK1iQ6luEQy7ikFuFv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqKxNb%2FbtsFGnHC1zj%2FnuLJK1iQ6luEQy7ikFuFv0%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;888&quot; height=&quot;213&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;socket not found in system path&lt;/i&gt;라는 문구가 출력되어 있으므로 socket을 설치합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 문구는 Warning이기 때문에 설치하지 않으셔도 무방합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install -y socat&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;conntrack not found in system path&lt;/i&gt;라는 문구가 출력되어 있으므로 conntrack을 설치합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install -y conntrack&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;/proc/sys/net/bridge/bridge-nf-call-iptables does not exist&lt;/i&gt;라는 문구가 출력되어 있으므로 echo 명령어를 사용하여 1을 해당 파일에 넣어 줍니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;echo 1 &amp;gt; /proc/sys/net/bridge/bridge-nf-call-iptables&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 상기 명령어를 입력했을 때 에러가 발생한다면&lt;/span&gt; &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;modprobe br_netfilter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;라는 명령어를 실행합니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당&amp;nbsp;명령어는&amp;nbsp;CNI&amp;nbsp;플러그인이&amp;nbsp;작동하기&amp;nbsp;위한&amp;nbsp;요구사항인&amp;nbsp;modprobe&amp;nbsp;br_netfilter&amp;nbsp;모듈을&amp;nbsp;설치하는&amp;nbsp;명령어입니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 모듈은 Bridge를 통과하는 네트워크 패킷을 필터링하는 역할을 하는데요.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster에서 Network Policy를 구현하고 트래픽을 관리하는데 도움이 되는 커널 모듈이라고 보시면 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;modprobe br_netfilter&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 실행한 후 다시&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;echo 1 &amp;gt; /proc/sys/net/bridge/bridge-nf-call-iptables&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt; /&lt;i&gt;proc/sys/net/ipv4/ip_forward contents are not set to 1&lt;/i&gt;이라는 문구가 출력되어 있으므로 echo 명령어를 사용하여 1을 해당 파일에 넣어 줍니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ef5369; text-align: left; background-color: #dddddd;&quot;&gt;echo&amp;nbsp;1&amp;nbsp;&amp;gt;&amp;nbsp;/proc/sys/net/ipv4/ip_forward&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 모든 preflight error를 해결하고 난 후 &lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;1&quot;&gt;kubeadm init&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 다시 실행하면 정상적으로 초기화가 진행됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어가 성공적으로 실행되면 2가지를 수행해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 첫 번째로 하기 명령어를 모든 가상 머신에서 실행하는 것입니다.&lt;/span&gt;&amp;nbsp;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pIH56/btsFIkDszxw/wxDwl78uHoTSLgSXx3nYzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pIH56/btsFIkDszxw/wxDwl78uHoTSLgSXx3nYzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pIH56/btsFIkDszxw/wxDwl78uHoTSLgSXx3nYzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpIH56%2FbtsFIkDszxw%2FwxDwl78uHoTSLgSXx3nYzK%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;595&quot; height=&quot;126&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 Node Server에서 상기 명령어가 제대로 작동하지 않을 경우 Control Plane에서 해당 명령어를 먼저 실행한 후&lt;/span&gt; &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;scp&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 통해 해당 파일을 &lt;i&gt;$HOME/.kube&lt;/i&gt; (없으면&lt;/span&gt; &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;mkdir -p $HOME/.kube&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어로 먼저 생성)에 붙여 넣습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 두 번째로 &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;1&quot;&gt;kubeadm join&lt;/span&gt;으로 시작하는 명령어를 Nodes에서 각각 실행합니다. (root 계정으로 실행해야 합니다.)&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GFTMk/btsFGpyCYv3/UIEIHF3QUi54Jk3S8LI0mK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GFTMk/btsFGpyCYv3/UIEIHF3QUi54Jk3S8LI0mK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GFTMk/btsFGpyCYv3/UIEIHF3QUi54Jk3S8LI0mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGFTMk%2FbtsFGpyCYv3%2FUIEIHF3QUi54Jk3S8LI0mK%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;687&quot; height=&quot;79&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;node-hyein-01에서 상기 명령어 수행 결과 &lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFRHQ9/btsFFZmZ4zx/mGjkZTSzksOqMFO7XQKgG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFRHQ9/btsFFZmZ4zx/mGjkZTSzksOqMFO7XQKgG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFRHQ9/btsFFZmZ4zx/mGjkZTSzksOqMFO7XQKgG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFRHQ9%2FbtsFFZmZ4zx%2FmGjkZTSzksOqMFO7XQKgG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;891&quot; height=&quot;328&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;node-hyein-02에서 상기 명령어 수행 결과 &lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctts7C/btsFFLa8oPO/LqSSLtrCB6nkpnHTfd8G21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctts7C/btsFFLa8oPO/LqSSLtrCB6nkpnHTfd8G21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctts7C/btsFFLa8oPO/LqSSLtrCB6nkpnHTfd8G21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fctts7C%2FbtsFFLa8oPO%2FLqSSLtrCB6nkpnHTfd8G21%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;885&quot; height=&quot;348&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; join 작업이 완료된 후 Control Plane에서&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;1&quot;&gt;kubectl get nodes&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하면 하기와 같이 Kubernetes Cluster를 이루는 3 대의 가상 머신이 보이게 됩니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nGnMo/btsFGUrHR4g/x6WSa6HKStZsyxhWHRk990/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nGnMo/btsFGUrHR4g/x6WSa6HKStZsyxhWHRk990/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nGnMo/btsFGUrHR4g/x6WSa6HKStZsyxhWHRk990/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnGnMo%2FbtsFGUrHR4g%2Fx6WSa6HKStZsyxhWHRk990%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;553&quot; height=&quot;91&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.2 Conatiner Network Interface(CNI) 설치&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster 내 pod 통신을 위해서는&lt;/span&gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;CNI(Container Network Interface)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNI는 또 무엇일까요??  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Container Network Interface인 CNI는 container 기술에서 network interface를 정의하는 표준 스펙으로, 이를 통해 container가 호스트 및 다른 container, 외부 시스템과 통신할 수 있도록 지원합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNI는 다양한 network plugin을 통해 구현될 수 있으며 이러한 plugin은 Kubernetes와 같은 orchestration tool에서 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;좀 더 쉽게 정의하자면,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNI는 container 간 네트워킹에 필요한 plugin에 대한 표준이라고 생각하시면 될 것 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 CNI plugin에는 Calico, Weave, Flannel 등 여러 가지 종류의 3rd party plugin이 존재하는데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 CNI 중 이번 테스트에서는 &lt;b&gt;Calico&lt;/b&gt;를 사용해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;※ CNI는 반드시 Control Plane에서만 설치하여야 합니다.※&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하기 공식 문서를 참고하여 Calico를 설치하면 됩니다. (Manifest 사용)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises&quot;&gt;https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes API datastore에 Calico Networking manifest를 다운로드합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;curl &amp;lt;https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/calico.yaml&amp;gt; -O&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buP3Ba/btsFFXvWTju/VwYgBMy0DfhEXDxZZ3QOlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buP3Ba/btsFFXvWTju/VwYgBMy0DfhEXDxZZ3QOlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buP3Ba/btsFFXvWTju/VwYgBMy0DfhEXDxZZ3QOlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuP3Ba%2FbtsFFXvWTju%2FVwYgBMy0DfhEXDxZZ3QOlK%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;563&quot; height=&quot;225&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; pod cidr를 변경하였다면 yaml file에서 해당 부분을 변경해 주어야 하지만 본 테스트에서는 기본값을 사용하기 때문에 생략하겠습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; manifest를 적용하기 위해 &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;1&quot;&gt;kubectl apply -f calico.yaml&lt;/span&gt; 명령어를 입력합니다.&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBmmW2/btsFEZOhh6z/YKBURngtdiylGBQovMW471/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBmmW2/btsFEZOhh6z/YKBURngtdiylGBQovMW471/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBmmW2/btsFEZOhh6z/YKBURngtdiylGBQovMW471/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBmmW2%2FbtsFEZOhh6z%2FYKBURngtdiylGBQovMW471%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;572&quot; height=&quot;316&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;524&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 생성을 완료한 후 &lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot; data-token-index=&quot;1&quot;&gt;kubectl get nodes&lt;/span&gt;를 해보면 하기 스크린샷과 같이 STATUS가 Ready로 변경되어 있는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9Uqzt/btsFE4Py1bS/SYQlTgNl8bWC2YccW9qlz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9Uqzt/btsFE4Py1bS/SYQlTgNl8bWC2YccW9qlz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9Uqzt/btsFE4Py1bS/SYQlTgNl8bWC2YccW9qlz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9Uqzt%2FbtsFE4Py1bS%2FSYQlTgNl8bWC2YccW9qlz1%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;671&quot; height=&quot;146&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.3 Node Labeling &lt;i&gt;(Optional)&lt;/i&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;kubectl get nodes&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 했을 때 ROLES 부분에 Control Plane은 control-plane이라고 되어 있지만 Node들은 &amp;lt;none&amp;gt;이라고 표기가 되어 있는데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 이 부분이 마음에 들지 않기 때문에 Labeling을 통해서 각 Node에 node라는 역할을 부여해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt; kubectl label nodes node-hyein-01 node-role.kubernetes.io/node=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 실행합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1297&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ugJSI/btsFD52tZXm/d9E5m7wpbKg76mWioyuzxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ugJSI/btsFD52tZXm/d9E5m7wpbKg76mWioyuzxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ugJSI/btsFD52tZXm/d9E5m7wpbKg76mWioyuzxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FugJSI%2FbtsFD52tZXm%2Fd9E5m7wpbKg76mWioyuzxk%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;1297&quot; height=&quot;202&quot; data-origin-width=&quot;1297&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; node-hyein-01 Node의 ROLES column에 node라는 역할이 제대로 부여된 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 이어서 node-hyein-02 Node도 동일하게 진행해 줍니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3S1TU/btsFFm3612z/hYE5VryBCPyTS2jRnPk2EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3S1TU/btsFFm3612z/hYE5VryBCPyTS2jRnPk2EK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3S1TU/btsFFm3612z/hYE5VryBCPyTS2jRnPk2EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3S1TU%2FbtsFFm3612z%2FhYE5VryBCPyTS2jRnPk2EK%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;1304&quot; height=&quot;199&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 VM 상에 Kubernetes Cluster를 구성하는 과정을 마쳐 보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 글에서는 지금까지 구성한 Kubernetes Cluster의 ETCD에 저장되는 Secret Data에 대한 암호화에 대해 다뤄보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>Azure</category>
      <category>CNI</category>
      <category>k8s</category>
      <category>Kubernetes</category>
      <category>virtual machine</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/26</guid>
      <comments>https://with-cloud.tistory.com/26#entry26comment</comments>
      <pubDate>Mon, 11 Mar 2024 10:43:18 +0900</pubDate>
    </item>
    <item>
      <title>Virtual Machine으로 Kubernetes Cluster 구성하기 (1)</title>
      <link>https://with-cloud.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;드디어 미뤄두고 미뤄뒀던 Kubernetes Cluster on &lt;span style=&quot;text-align: start;&quot;&gt;Virtual Machine 구성 테스트를 완료하였습니다.  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;VMWare로 한번, Azure Virtual Machine으로 한 번, 총 두 번 테스트를 했던 적이 있어 우선 순위에서 밀렸던 것도 사실이긴합니다.  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;하지만 반복하지 않으면 까먹기 때문에 여유가 생긴 지금! 테스트 내용을 정리해 보고자 합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Virtual Machine 배포&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Azure 환경에 [가상 머신]을 세 대 배포하여, 1대는 control plane, 2대는 node로 사용합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 Virtual Machine 배포&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.1.1 [리소스 그룹] 생성&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhxmc2/btsFy9jk28z/4dWJXnew5S2ROpjZ5lrKb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhxmc2/btsFy9jk28z/4dWJXnew5S2ROpjZ5lrKb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhxmc2/btsFy9jk28z/4dWJXnew5S2ROpjZ5lrKb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbhxmc2%2FbtsFy9jk28z%2F4dWJXnew5S2ROpjZ5lrKb1%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;549&quot; height=&quot;325&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구독 : &lt;span style=&quot;color: #666666;&quot;&gt;&lt;i&gt;# 사용할 구독 선택&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;리소스 그룹 : rg-k8s-test &lt;i&gt;&lt;span style=&quot;color: #666666;&quot;&gt;# 리소스 명 입력&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;영역 : Korea Central &lt;i&gt;&lt;span style=&quot;color: #666666;&quot;&gt;# 가상 머신이 배포될 Azure Region 선택&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.1.2 [가상 머신] 생성&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세 대 모두 배포 방법은 모두 동일합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본 테스트에서는 이름만 변경하였으나 필요에 따라 control plane의 역할을 하는 [가상 머신]의 SKU를 더 크게 지정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[기본 사항]&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;노란색으로&amp;nbsp;하이라이트한&amp;nbsp;부분에&amp;nbsp;대해&amp;nbsp;설정을&amp;nbsp;완료한&amp;nbsp;후&amp;nbsp;&lt;b&gt;[다음&amp;nbsp;:&amp;nbsp;디스크&amp;nbsp;&amp;gt;]&lt;/b&gt;&amp;nbsp;버튼을&amp;nbsp;클릭하여&amp;nbsp;다음&amp;nbsp;탭으로&amp;nbsp;이동합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;774&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SGWZH/btsFyc8BynZ/Yi68Yhr2x1AKJKjBhIhgjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SGWZH/btsFyc8BynZ/Yi68Yhr2x1AKJKjBhIhgjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SGWZH/btsFyc8BynZ/Yi68Yhr2x1AKJKjBhIhgjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSGWZH%2FbtsFyc8BynZ%2FYi68Yhr2x1AKJKjBhIhgjK%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;774&quot; height=&quot;786&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;786&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JPVIt/btsFyv1iBN2/uIRof1LkdoqpgkgDnuCWvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JPVIt/btsFyv1iBN2/uIRof1LkdoqpgkgDnuCWvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JPVIt/btsFyv1iBN2/uIRof1LkdoqpgkgDnuCWvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJPVIt%2FbtsFyv1iBN2%2FuIRof1LkdoqpgkgDnuCWvK%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;755&quot; height=&quot;671&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [디스크] 탭&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OS&amp;nbsp;디스크&amp;nbsp;크기&amp;nbsp;및&amp;nbsp;OS&amp;nbsp;디스크&amp;nbsp;유형을&amp;nbsp;지정한&amp;nbsp;후&amp;nbsp;&lt;b&gt;[다음&amp;nbsp;:&amp;nbsp;네트워킹&amp;nbsp;&amp;gt;]&amp;nbsp;&lt;/b&gt;버튼을&amp;nbsp;클릭하여&amp;nbsp;넘어갑니다.&amp;nbsp;&lt;br /&gt;(본&amp;nbsp;테스트에서는&amp;nbsp;default&amp;nbsp;값을&amp;nbsp;유지하였습니다.)&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;795&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNK5vS/btsFyf5iJza/QqDXVsscKK7HDXRVrS40XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNK5vS/btsFyf5iJza/QqDXVsscKK7HDXRVrS40XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNK5vS/btsFyf5iJza/QqDXVsscKK7HDXRVrS40XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNK5vS%2FbtsFyf5iJza%2FQqDXVsscKK7HDXRVrS40XK%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;771&quot; height=&quot;795&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;795&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[네트워킹] 탭&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [가상 네트워크] 생성&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름, 가상 네트워크의 주소 범위, 서브넷 이름, 서브넷 주소 범위 등에 대해 지정한 후 &lt;b&gt;[확인]&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;을 클릭하여 [가상 네트워크] 생성을 완료합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj2KiA/btsFDATKQtP/iCLyB9Oz9Kf8RbaMFs0kbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj2KiA/btsFDATKQtP/iCLyB9Oz9Kf8RbaMFs0kbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj2KiA/btsFDATKQtP/iCLyB9Oz9Kf8RbaMFs0kbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj2KiA%2FbtsFDATKQtP%2FiCLyB9Oz9Kf8RbaMFs0kbK%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;843&quot; height=&quot;522&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;522&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;[공용 IP] 제거&lt;br /&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; [공용 IP]는 [없음]을 선택합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;private한 cluster를 구성해야 하기 때문에 [공용 IP]를 붙이지 않습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; 추후 2번 과정에서 Bastion용 가상 머신과의 VNet Peering을 진행합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; 하기 스크린샷과 같이 설정이 필요한 부분을 확인한 후 &lt;b&gt;[다음 : 관리 &amp;gt;]&lt;/b&gt; 버튼을 클릭하여 넘어갑니다.&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r4qpe/btsFCwRGhG6/D3PLc09c0eM58PrdPTO5Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r4qpe/btsFCwRGhG6/D3PLc09c0eM58PrdPTO5Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r4qpe/btsFCwRGhG6/D3PLc09c0eM58PrdPTO5Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr4qpe%2FbtsFCwRGhG6%2FD3PLc09c0eM58PrdPTO5Ek%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;783&quot; height=&quot;765&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[검토 + 만들기] 탭&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; [검토 + 만들기]&lt;/b&gt; 탭을 클릭하여 유효성 검사 후 [가상 머신] 생성을 진행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 위와 같은 방식으로 Node용 [가상 머신]을 두 대 더 생성합니다. &lt;b&gt;(이름은 변경해야 합니다.)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 본 테스트에서는 Node용 [가상 머신]의 이름을 &lt;i&gt;node-hyein-01&lt;/i&gt;과 &lt;i&gt;node-hyein-02&lt;/i&gt;로 지정하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1557&quot; data-origin-height=&quot;877&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYLaGt/btsFAfKiP7Q/Rf6kqISZz4rmsYTPHhF8f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYLaGt/btsFAfKiP7Q/Rf6kqISZz4rmsYTPHhF8f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYLaGt/btsFAfKiP7Q/Rf6kqISZz4rmsYTPHhF8f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYLaGt%2FbtsFAfKiP7Q%2FRf6kqISZz4rmsYTPHhF8f0%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;1557&quot; height=&quot;877&quot; data-origin-width=&quot;1557&quot; data-origin-height=&quot;877&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.2 VNet Peering 구성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster를 이루는 가상 머신의 경우 [공용 IP]를 붙이지 않고 private하게 구성하였기 때문에 Local에서 직접 접근할 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 Bastion용 가상 머신을 생성해야 합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Bastion용 가상 머신은 Kubernetes Cluster를 이루는 가상 머신이 배포된 [가상 네트워크]와 다른 대역에 배포한 후 [VNet Peering]을 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Bastion용 [가상 머신]의 OS 종류는 중요하지 않으며 배포 과정은 이번 글에서는 생략하겠습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Ubuntu의 경우 상기 2번 과정과 동일합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 연결할 [가상 네트워크] 중 하나를 Azure Portal 상에서 선택한 후 [설정] &amp;gt; [피어링] 탭 &amp;gt; [+ 추가]&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xpwnr/btsFzbIdXDL/HeDraGABxCHJvm1Pg2G6Q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xpwnr/btsFzbIdXDL/HeDraGABxCHJvm1Pg2G6Q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xpwnr/btsFzbIdXDL/HeDraGABxCHJvm1Pg2G6Q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxpwnr%2FbtsFzbIdXDL%2FHeDraGABxCHJvm1Pg2G6Q1%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;1160&quot; height=&quot;476&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [피어링] 정보를 입력합니다. &lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 노란색으로 하이라이트한 부분에 대해 설정을 완료한 후 [추가] 버튼을 클릭하여 [피어링]을 진행합니다.&lt;br /&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;966&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9lXAI/btsFA8KNkE8/ipdVY3fop1ocjOGJcs14WK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9lXAI/btsFA8KNkE8/ipdVY3fop1ocjOGJcs14WK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9lXAI/btsFA8KNkE8/ipdVY3fop1ocjOGJcs14WK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9lXAI%2FbtsFA8KNkE8%2FipdVY3fop1ocjOGJcs14WK%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;1137&quot; height=&quot;966&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;966&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMlhQy/btsFA6GdUdw/iSjpJKKCyCZHpzA9vSKaE0/img.png&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.3 Virtual Machine 접근 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Bastion VM에 접속한 후 각 [가상 머신]에 접근합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VNet Peering을 맺은 상태이기 때문에, Bastion VM에서 각 [가상 머신]으로 정상적으로 접근이 되어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Local Machine &amp;gt; Bastion VM 접근 :&lt;span style=&quot;color: #ef5369;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;ssh hyein@{public ip}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Bastion VM &amp;gt; 각 [가상 머신] 접근&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Control Plane : &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;ssh hyein@10.0.0.4&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Node 01 : &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;ssh hyein@10.0.0.5&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Node 02 : &lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;ssh hyein@10.0.0.6&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. Kubernetes Cluster 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금부터는 가상 머신 상에 Kubernetes Cluster를 구축해 볼텐데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 가상 머신에 동일하게 적용해야 하는 부분에 대해 먼저 다뤄보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.1 Containerd 설치 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker를 따로 사용하지 않을 것이기 때문에 Docker를 설치하지 않고 Containerd만 설치를 하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치에 앞서 먼저 Containerd가 무엇인지부터 짚고 넘어가 보겠습니다.&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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; Containerd란?&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Containerd가 무엇인지에 앞서 먼저 Container Runtime이라는 개념을 알고 넘어가야 하는데요.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Container Runtime이란 container 실행을 담당하는 software이며, 이러한 Container Runtime을 호출할 수 있는 표준화된 인터페이스는 CRI, 즉 Container Runtime Interface라고 합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes는 container를 관리하기 위한 Orchestration tool로, 다양한 Container Runtime과 통신하여 container를 관리합니다. 그리고 이 때 이러한 통신을 담당하는 것이 바로 CRI입니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CRI가 Kubernetes와 Containerd 간의 표준화된 API를 정의하기 때문에 사용자는 CRI 포맷을 지원하는 Container Runtime을 Kubernetes에서 모두 사용할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker가 바로 가장 널리 사용되는 Container Runtime 중 하나입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker는 CRI 개발 이전부터 널리 쓰이던 Container Runtime이기 때문에 CRI를 준수하지 않습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇기 때문에 Docker는 kubelet과 Dockerd 사이에 docker-shim을 사용하여 이를 대신해 왔는데요.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하드코딩된 docker-shim을 유지 보수하는 것이 점점 어려워지고 Docker라는 Container Runtime을 위해서만 이러한 어댑터를 유지하는 것이 표준화와는 거리가 멀기에 Kubernetes는 docker-shim에 대한 지원을 v1.24에서 중단하게 되었습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 CRI를 준수하는 Container Runtime으로는 Containerd와 CRI-O가 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 중 Containerd를 사용하여 이번 테스트를 진행하고자 합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Containerd는 Docker에서도 사용된 Container Runtime 기술로 컨테이너화된 application을 실행, 관리하고 관련된 작업들을 수행하는데 사용되는 Container Runtime이라고 볼 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes v1.24부터는 Kubernetes Cluster를 위해 Docker를 설치하지 않아도 되며, Containerd만 설치해 주면 됩니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설명이 굉장히 길어졌습니다.. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 지금부터 Containerd를 각 [가상 머신]에 설치해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Official Binary를 사용하여 Containerd를 설치하기 위해 하기 링크를 통해 GitHub로 이동합니다.&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/containerd/containerd/blob/main/docs/getting-started.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/containerd/containerd/blob/main/docs/getting-started.md&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Step 1: Installing containerd &lt;/b&gt;부분에서 tar file을 다운로드 받기 위해&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/containerd/containerd/releases&quot;&gt;https://github.com/containerd/containerd/releases&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 이동합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원하는 버전을 선택한 후 마우스를 우클릭하여 [링크 주소 복사] 버튼을 통해 링크를 복사합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m9zte/btsFB5z2PYA/b7DjL6hTuSey5GzLQNM3D0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m9zte/btsFB5z2PYA/b7DjL6hTuSey5GzLQNM3D0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m9zte/btsFB5z2PYA/b7DjL6hTuSey5GzLQNM3D0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm9zte%2FbtsFB5z2PYA%2Fb7DjL6hTuSey5GzLQNM3D0%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;586&quot; height=&quot;237&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt; wget {복사한 링크 주소} &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 통해 tar 파일을 각 [가상 머신]에 다운로드 합니다.&lt;br /&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1705&quot; data-origin-height=&quot;843&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GBL5i/btsFC3IwFOS/2tQakLMeAxsxuHAgKTx870/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GBL5i/btsFC3IwFOS/2tQakLMeAxsxuHAgKTx870/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GBL5i/btsFC3IwFOS/2tQakLMeAxsxuHAgKTx870/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGBL5i%2FbtsFC3IwFOS%2F2tQakLMeAxsxuHAgKTx870%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;1705&quot; height=&quot;843&quot; data-origin-width=&quot;1705&quot; data-origin-height=&quot;843&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tar 파일을 &lt;i&gt;/usr/local &lt;/i&gt;디렉토리에 압축해제 합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt; tar Cxzvf /usr/local containerd-1.7.13-linux-amd64.tar.gz&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;/usr/local&lt;/i&gt; 디렉토리는 보통 사용자가 직접 설치한 소프트웨어를 저장하는 디렉토리이며 여기에 저장된 프로그램은 시스템 전체에서 사용 가능하기 때문에 해당 디렉토리에 tar 파일을 압축 해제 하겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;C&lt;/span&gt;는 디렉토리 변경 옵션으로 특정 디렉토리에 파일을 압축 해제하기 위해 사용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; systemd를 통해 Containerd service를 관리할 수 있도록 &lt;b&gt;systemd service&lt;/b&gt; 파일을 다운로드 한 후 해당 서비스를 &lt;i&gt;/usr/lib/systemd/system/&lt;/i&gt; 디렉토리로 이동시킵니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;wget &amp;lt;&lt;a style=&quot;color: #ef5369; background-color: #dddddd;&quot; href=&quot;https://raw.githubusercontent.com/containerd/containerd/main/containerd.service&quot;&gt;https://raw.githubusercontent.com/containerd/containerd/main/containerd.service&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ef5369; background-color: #dddddd;&quot;&gt;sudo mv containerd.service /usr/lib/systemd/system/&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 하기 명령어를 사용하여 Containerd service를 시작합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;sudo systemctl daemon-reload&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #ef5369;&quot;&gt;sudo systemctl enable --now containerd&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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: #dddddd; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt; sudo systemctl status containerd&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 사용하여 Containerd의 상태를 확인합니다.&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdj14C/btsFAvlUCcU/ocuhJEMMGkSmQGRu4JH88k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdj14C/btsFAvlUCcU/ocuhJEMMGkSmQGRu4JH88k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdj14C/btsFAvlUCcU/ocuhJEMMGkSmQGRu4JH88k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdj14C%2FbtsFAvlUCcU%2FocuhJEMMGkSmQGRu4JH88k%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;853&quot; height=&quot;200&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Step 2: Installing runc&lt;/b&gt;에서 runc binary를 설치하기 위해&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/opencontainers/runc/releases&quot;&gt;https://github.com/opencontainers/runc/releases&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 이동합니다.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt; runc.amd64&lt;/span&gt;를 선택한 후 마우스를 우클릭하여 [링크 주소 복사] 버튼을 통해 링크를 복사합니다.&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJyE2L/btsFA8jNWYn/eDyosfVZfAe81NkCBrLrpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJyE2L/btsFA8jNWYn/eDyosfVZfAe81NkCBrLrpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJyE2L/btsFA8jNWYn/eDyosfVZfAe81NkCBrLrpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJyE2L%2FbtsFA8jNWYn%2FeDyosfVZfAe81NkCBrLrpk%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;564&quot; height=&quot;276&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt; wget {복사한 링크 주소}&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 runc.amd64를 각 [가상 머신]에 다운로드 합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVBOgW/btsFyOmbKsa/gin4ZcW6ZtdzM4v3l1Pppk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVBOgW/btsFyOmbKsa/gin4ZcW6ZtdzM4v3l1Pppk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVBOgW/btsFyOmbKsa/gin4ZcW6ZtdzM4v3l1Pppk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVBOgW%2FbtsFyOmbKsa%2Fgin4ZcW6ZtdzM4v3l1Pppk%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;1710&quot; height=&quot;792&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;792&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt; install -m 755 runc.amd64 /usr/local/sbin/runc &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 runc.amd64를 /usr/local/sbin/runc 디렉토리에 설치합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JWNNj/btsFBLBUNep/2X0iStdqHgUDZs5KcbWOwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JWNNj/btsFBLBUNep/2X0iStdqHgUDZs5KcbWOwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JWNNj/btsFBLBUNep/2X0iStdqHgUDZs5KcbWOwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJWNNj%2FbtsFBLBUNep%2F2X0iStdqHgUDZs5KcbWOwk%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;1056&quot; height=&quot;68&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Step 3의 지침을 따르기에 앞서&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;mkdir -p /opt/cni/bin &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 통해 /opt/cni/bin이라는 디렉토리를 생성합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;83&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t1Akq/btsFz7FHL9t/pK6phIZvSN9eCifPgaZXV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t1Akq/btsFz7FHL9t/pK6phIZvSN9eCifPgaZXV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t1Akq/btsFz7FHL9t/pK6phIZvSN9eCifPgaZXV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft1Akq%2FbtsFz7FHL9t%2FpK6phIZvSN9eCifPgaZXV0%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;585&quot; height=&quot;83&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;83&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Step 3: Installing CNI plugins&lt;/b&gt;에서 cni plugin을 설치하기 위해&lt;/span&gt; &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/containernetworking/plugins/releases&quot;&gt;https://github.com/containernetworking/plugins/releases&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 이동합니다.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 원하는 버전을 선택한 후 마우스를 우클릭하여 [링크 주소 복사] 버튼을 통해 링크를 복사합니다.&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3Q6h9/btsFy9cFNPw/JcdkHBwXU5dSJ4RiMcMPmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3Q6h9/btsFy9cFNPw/JcdkHBwXU5dSJ4RiMcMPmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3Q6h9/btsFy9cFNPw/JcdkHBwXU5dSJ4RiMcMPmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3Q6h9%2FbtsFy9cFNPw%2FJcdkHBwXU5dSJ4RiMcMPmk%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;233&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;wget {복사한 링크 주소}&lt;/span&gt;&lt;span style=&quot;color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 cni plugin을 각 [가상 머신]에 다운로드한 후&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;2&quot;&gt;tar Cxzvf /opt/cni/bin/ cni-plugins-linux-amd64-v1.4.0.tgz&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하여 tar 파일을 &lt;i&gt;/opt/cni/bin/&lt;/i&gt; 디렉토리에 압축 해제 합니다. &lt;/span&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTXJO5/btsFABl9Mkv/KIvY1ibGGvD9MQ3OgQhpl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTXJO5/btsFABl9Mkv/KIvY1ibGGvD9MQ3OgQhpl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTXJO5/btsFABl9Mkv/KIvY1ibGGvD9MQ3OgQhpl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTXJO5%2FbtsFABl9Mkv%2FKIvY1ibGGvD9MQ3OgQhpl1%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;1223&quot; height=&quot;653&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;653&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Containerd에 대한 설정 파일을 생성하고 변경하기 위해 우선 설정 파일을 저장할 디렉토리를 생성합니다. (&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;mkdir -p /etc/containerd&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Containerd에서 제공하는 config 명령어를 사용하여 default config 정보를 얻고 그것을 config.toml라는 파일에 저장합니다. (&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;containerd config default &amp;gt; /etc/containerd/config.toml&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 2 Swap Off&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공식 문서를 보면 Kubernetes v1.28에서는 swap memory를 사용할 수 있도록 beta support를 지원한다고 되어 있으나 beta support이므로 일단 swap off를 진행하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(참고 링크 :&lt;/span&gt; &lt;a href=&quot;https://kubernetes.io/blog/2023/08/24/swap-linux-beta/&quot;&gt;https://kubernetes.io/blog/2023/08/24/swap-linux-beta/&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;swap off를 진행하기에 앞서, 잠시 swap이 무엇인지 간단하게 확인하고 넘어가겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;swap은 컴퓨터의 물리적인 RAM이 부족할 때 사용되는 보조 저장소입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OS가 메모리를 효율적으로 관리하기 위해 보통 사용되는데요.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시스템에 메모리가 부족한 경우 OS는 현재 사용되지 않는 메모리를 swap 영역으로 이동시켜 물리적인 메모리 공간을 확보하게 됩니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 사실 Azure의 [가상 머신]은 기본적으로 swap이 비활성화되어 있기 때문에 해당 부분은 확인만 하고 넘어가시면 될 것 같습니다.&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;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt; sudo swapon --show&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하였을 때 아무것도 출력되지 않거나,&lt;/span&gt; &lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;2&quot;&gt;free -h&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;명령어를 입력하였을 때 하기와 같이 Swap 부분의 total이 0B로 출력되는지 확인합니다.&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csK1qp/btsFz7MzOVW/okLb1TNxO7YJL33R6kws30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csK1qp/btsFz7MzOVW/okLb1TNxO7YJL33R6kws30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csK1qp/btsFz7MzOVW/okLb1TNxO7YJL33R6kws30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsK1qp%2FbtsFz7MzOVW%2FokLb1TNxO7YJL33R6kws30%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;1140&quot; height=&quot;173&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 3 kubeadm, kubelet, kubectl 설치&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마지막으로&amp;nbsp;모든&amp;nbsp;[가상&amp;nbsp;머신]에&amp;nbsp;&lt;b&gt;kubeadm,&amp;nbsp;kubelet,&amp;nbsp;kubectl&lt;/b&gt;을&amp;nbsp;설치해&amp;nbsp;보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt; kubeadm&lt;/b&gt;&lt;/i&gt;은 Kubernetes Cluster를 구성하는데 사용되며 Control Plane과 Node들을 설정하고 필수 구성 요소를 설치하여 Kubernetes Cluster를 준비하는 작업들을 지원합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하기 링크를 참고하여 모든 [가상 머신]에 kubeadm, kubelet, kubectl을 설치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(참고 링크 :&lt;/span&gt; &lt;a href=&quot;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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; color: #000000;&quot;&gt; 패키지 매니저를 사용하지 않는 경우&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 선택해야 합니다.&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbq2zQ/btsFC0ebdzM/ZSvu59Sn4kpg3nKieDRvG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbq2zQ/btsFC0ebdzM/ZSvu59Sn4kpg3nKieDRvG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbq2zQ/btsFC0ebdzM/ZSvu59Sn4kpg3nKieDRvG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbq2zQ%2FbtsFC0ebdzM%2FZSvu59Sn4kpg3nKieDRvG1%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;1447&quot; height=&quot;591&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;591&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; CNI plugin의 경우 위에서 이미 설치했기 때문에 해당 내용은 생략합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt; DOWNLOAD_DIR=&quot;/usr/local/bin&amp;rdquo;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의 경우 하기 명령어에서 사용하기 때문에 변수를 선언해 줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;crictl을 설치합니다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;kubeadm, kubelet, kubectl 설치 및 kubelet systemd 서비스를 추가합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;kubelet을 활성화하고 시작합니다. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;kubectl을 입력하였을 때 하기와 같이 출력되면 세 도구가 정상적으로 설치된 것입니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; kubelet이나 kubeadm을 입력해서 확인해도 됩니다.&lt;/span&gt; &lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3cupu/btsFCzVhmRJ/xLu3O1MMc5rdFwvwTmJJmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3cupu/btsFCzVhmRJ/xLu3O1MMc5rdFwvwTmJJmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3cupu/btsFCzVhmRJ/xLu3O1MMc5rdFwvwTmJJmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3cupu%2FbtsFCzVhmRJ%2FxLu3O1MMc5rdFwvwTmJJmK%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;727&quot; height=&quot;217&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Kubernetes Cluster를 이루는 가상 머신을 배포하고 Containerd를 설치하는 등 공통적으로 적용해야 할 부분에 대해 다뤄보았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 이를 바탕으로 Control Plane을 초기화하고 Kubernetes Cluster로서 각 가상 머신들이 join하는 방법, 그리고 Node에 대한 Roles을 Labeling하는 방법에 대해 알아보겠습니다.  &lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>Azure</category>
      <category>containerd</category>
      <category>kubeadm</category>
      <category>Kubectl</category>
      <category>kubelet</category>
      <category>Kubernetes</category>
      <category>swap</category>
      <category>virtual machine</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/25</guid>
      <comments>https://with-cloud.tistory.com/25#entry25comment</comments>
      <pubDate>Thu, 7 Mar 2024 13:50:12 +0900</pubDate>
    </item>
    <item>
      <title>CKAD 시험 후기</title>
      <link>https://with-cloud.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;안녕하세요. &lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오랜만에 블로그에 글을 적는 것 같은데요.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그동안 CKAD 시험을 준비하느라 블로그를 쓸 시간이 없었다는 핑계를 대며,, 시험 후기를 적어 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. CKAD (Certified Kubernetes Application Developer)란?&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실 CKAD가 무엇인지에 대해서는 이미 많은 블로그에서 정리를 잘 해 놓았기 때문에 굳이 정리하지 않으려고 하다가 그래도 해야 하지 않나 싶어서 정리해 보았습니다. (●'◡'●)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Linux Foundation 홈페이지에는 CKAD에 대해 다음과 같의 설명하고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The Certified Kubernetes Application Developer (CKAD) exam certifies that candidates can design, build and deploy cloud-native applications for Kubernetes.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, CKAD는 &lt;b&gt;Kubernetes를 위한 클라우드 네이티브 application을 설계하고 빌드하고 배포할 수 있는 능력&lt;/b&gt;이 있는지에 대해 검증하는 시험이라고 볼 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 자격증의 유효 기간은 취득 후 36개월이지만 2024년 4월 1일부터 24개월로 변경되기 때문에, 혹시라도 시험 계획이 있으신 분들은 4월 1일 이전에 시험을 보시는 것을 권장드립니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자세한 내용은 링크 참고 부탁드립니다. (&lt;/span&gt;&lt;a href=&quot;https://training.linuxfoundation.org/certification-policy-change-2024/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://training.linuxfoundation.org/certification-policy-change-2024/&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. CKAD 시험 결제 및 예약 + Killer shell&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실 작년에 CKA를 이미 취득한 상태라 시험 결제 및 예약에 큰 문제는 없었으나, 그래도 혹시나 하는 마음에 정리를 해 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CKAD는 $395, 한화로 53만 5700원(글 작성일 기준)이라는 많은 비용이 드는 시험입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RC7Ve/btsFpS2VSjy/nuUPxPFXNA3N1qna3MK8jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RC7Ve/btsFpS2VSjy/nuUPxPFXNA3N1qna3MK8jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RC7Ve/btsFpS2VSjy/nuUPxPFXNA3N1qna3MK8jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRC7Ve%2FbtsFpS2VSjy%2FnuUPxPFXNA3N1qna3MK8jk%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;498&quot; height=&quot;227&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2번의 기회를 주기는 하지만 그래도 여전히 큰 돈이죠.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 작년 11월 경 50% 할인 쿠폰을 사용해서 미리 결제를 해 두었기 때문에 $197.50에 결제하였지만 그래도 여전히 비싸긴 합니다. ㅠ&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlAWPr/btsFyecjEQ5/r6KEb0ajkxtuyrVdWcLDBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlAWPr/btsFyecjEQ5/r6KEb0ajkxtuyrVdWcLDBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlAWPr/btsFyecjEQ5/r6KEb0ajkxtuyrVdWcLDBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlAWPr%2FbtsFyecjEQ5%2Fr6KEb0ajkxtuyrVdWcLDBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;708&quot; height=&quot;279&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;매년 11월 Cyber Monday에 CKA나 CKAD 같은 시험에 대한 할인 voucher가 제공되고 결제 후 1년 이내에만 시험을 보면 되기&amp;nbsp; 때문에 이때를 노리시는 것도 그나마 싸게 결제할 수 있는 방법입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물론 이때 말고도 거의 상시 25~30% voucher는 존재하기 때문에 구글링을 통해서 voucher를 확인하시길 바랍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;결제를 하고 난 후, My Portal에 접속하시면 하기와 같은 화면이 나오는데요,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1888&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/reqp1/btsFxV4XBBQ/tyjnpLm90AR1Y2jblD5791/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/reqp1/btsFxV4XBBQ/tyjnpLm90AR1Y2jblD5791/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/reqp1/btsFxV4XBBQ/tyjnpLm90AR1Y2jblD5791/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Freqp1%2FbtsFxV4XBBQ%2FtyjnpLm90AR1Y2jblD5791%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;1888&quot; height=&quot;820&quot; data-origin-width=&quot;1888&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 이미 시험을 본 상태라 [View Certificate]이라고 표시되지만, 오른쪽의 파란색 버튼을 클릭하면 시험을 응시하기 위한 단계를 안내하는 페이지로 리다이렉트 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1365&quot; data-origin-height=&quot;811&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biRjl7/btsFwBlkLwV/l8Tam9dhL4NlFBP0Li1Tvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biRjl7/btsFwBlkLwV/l8Tam9dhL4NlFBP0Li1Tvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biRjl7/btsFwBlkLwV/l8Tam9dhL4NlFBP0Li1Tvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiRjl7%2FbtsFwBlkLwV%2Fl8Tam9dhL4NlFBP0Li1Tvk%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;1365&quot; height=&quot;811&quot; data-origin-width=&quot;1365&quot; data-origin-height=&quot;811&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 단계별로 초록색 버튼이 될 수 있도록 안내되는 사항을 준수하시어 설정 또는 스케줄링을 완료하시면 시험 예약은 끝입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Killer Shell은 CKAD 시험을 결제하게 되면 주는 시험입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름부터 지독해 보이는데요. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시험과 똑같은 환경을 미리 체험할 수 있는, 시험보다 난이도가 있는 모의시험이라고 생각하시면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. CKAD 시험 준비&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시험 준비는 모두의 바이블이죠. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Udemy에 있는 &lt;i&gt;&quot;Kubernetes Certified Application Developer (CKAD) with Tests&quot;&amp;nbsp;&lt;/i&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;1117&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD0ugF/btsFywRtEeL/pCKxUyGsPNmZjQfdmhMAD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD0ugF/btsFywRtEeL/pCKxUyGsPNmZjQfdmhMAD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD0ugF/btsFywRtEeL/pCKxUyGsPNmZjQfdmhMAD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD0ugF%2FbtsFywRtEeL%2FpCKxUyGsPNmZjQfdmhMAD0%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;1117&quot; height=&quot;375&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CKA도 &lt;i&gt;&quot;Certified Kubernetes Administrator (CKA) with Practice Tests&quot;&lt;/i&gt; &amp;larr; 이 강의를 다 듣고 시험을 응시했습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Section 별로 명확하게 분리되어 있고 내용이 매우 알차기 때문에,&amp;nbsp; &lt;span style=&quot;text-align: start;&quot;&gt;저는 &lt;/span&gt;단순히 시험 응시를 목적으로 이 강의를 수강했다기보다 Kubernetes에 대해 기초적인 지식을 전체적으로 정리하기 위한 목적으로 수강했습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CKA와 겹치는 부분도 있기는 하지만 기본적으로 다루고 있는 범위가 완전히 겹치지는 않기 때문에 CKAD 강의도 다시 한번 수강했습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CKA가 Kubernetes의 전반적인 부분을 다루고 있다면 CKAD는 그보다 좀 더 딥하게 일부를 본다는 느낌이 강했습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 Application Developer가 갖춰야 하는 지식을 검증하는 시험답게 Docker나 Helm에 대해서도 다루고 있어서 저는 CKA보다 좀 더 어렵다는 생각이 들었습니다. (그렇다고 CKA보다 CKAD가 더 어렵냐? 하면 또 그것은 아닙니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정리하자면, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CKA는 Kubernetes의 &lt;span style=&quot;text-align: start;&quot;&gt;전반적인 요소들을 다루고 있어서 공부해야 할 범위가 넓어 어렵고, CKAD는 범위는 CKA보다 좁으나 Docker나 Helm 등 Kubernetes와 떼려야 뗄 수 없는 다른 tool까지 시험 범위에 포함되어 어렵습니다. (˘･_･˘)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Udemy 강의 + Section별 Kode Kloud 문제 풀이 + Mock Exam까지 끝낸 후 저는 시험 하루, 이틀 전에 Killer Shell의 문제를 활성화하여 마지막으로 시험에 대한 감을 잡을 수 있도록 했습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;CKAD 시험 결제 후 제공되는 Killer Shell 문제는 2개의 Session이 제공되며 각각 36시간 동안 활성화 되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;Session은 2개가 제공되지만 문제는 동일합니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;36시간 동안은 몇 번이고 시험을 응시할 수 있으며, 해당 환경은 시험과 동일합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rUgPW/btsFt7kE2t2/Lqn00YedHZxKfwA55HbIe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rUgPW/btsFt7kE2t2/Lqn00YedHZxKfwA55HbIe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rUgPW/btsFt7kE2t2/Lqn00YedHZxKfwA55HbIe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrUgPW%2FbtsFt7kE2t2%2FLqn00YedHZxKfwA55HbIe1%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;1176&quot; height=&quot;600&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;600&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;저는 CKA 시험을 응시했을 때 한 Session을 활성화하지 않아서 아직도 Not Activated 상태로 하나가 존재하는데요. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(CKAD는 시간 계산을 잘못해서 두 개의 Session을 활성화 했습니다. &lt;i&gt;36시간은 1일하고 12시간인데 3일로 생각해서..&lt;/i&gt;  )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;활성화 되지 않은 simulator을 클릭하면 하단에 Activate Session이라는 빨간 박스가 있고, 그걸 누르게 되면 그때부터 36시간 동안 Session이 활성화 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;시험과 환경이 동일하기 때문에 Killer Shell을 통해 해당 환경에 적응할 수 있도록 연습하는 것을 권장드립니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실 Killer Shell의 문제는 반만 맞아도 시험에 합격하는데 전혀 문제가 없다고 할 정도로 난이도가 높습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 편한 마음으로 주어진 문제 중 반만 맞추겠다라는 마음으로 응시하셔도 된다고 생각합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단, 해설이 제공되기 때문에 &lt;span style=&quot;text-align: start;&quot;&gt;시험을 본 후에 꼭 오답을 체크하시길 바라며,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;저는 못 풀었던 문제까지 다 풀 수 있을 만큼 Killer Shell Session을 활용한 후에 시험에 응시하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마지막으로,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;노트북의 경우 저는 Surface Laptop으로 응시해서 화면이 매우 작았습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;노트북 화면은 &lt;b&gt;거거익선&lt;/b&gt;입니다! 무조건 큰 노트북으로 응시하시길 바랍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. CKAD 시험 응시 중 주의 사항&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 CKA나 CKAD 모두 시험 보다는 시험을 보기 전 체크인 과정이 더 힘들고 진이 빠졌던 것 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시험 전 시험 환경 체크 과정이 굉장히 빡빡하게 진행되기 때문에 체크인 시간이 되면 바로 접속하시는 것을 추천드립니다.&amp;nbsp; (저도 이 30분을 다 쓸 줄 몰랐으나, CKA, CKAD 모두 거의 30분을 다 사용했습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음에 네트워크 및 마이크 등에 대한 환경 체크를 진행하게 되는데요, 저는 회사 와이파이를 썼음에도 네트워크 품질이 시험을 볼 정도로 좋지 않다는 결과를 받아서 ☠️ x &lt;span style=&quot;color: #222222;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;100000000&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #222222;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;결국 핫스팟으로 진행했습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;체크인 과정과 시험 감독을 한 proctor가 진행하며 proctor와는 대화가 아닌 채팅으로 의사소통하게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생각보다 요구하는 사항들이 많기 때문에 최대한 책상에 아무것도 없고, private 한 공간에서 시험을 응시하는 것이 좋습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저 같은 경우, 천장을 보여달라고 해서 보여줬더니 비상구 사인을 다시 보여달라고 하면서 뭐냐고 물어보기도 하고,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시험을 보는 회의실에 있던 TV 모니터가 계속 꺼져 있다는 것을 증명하라고 해서 TV 모니터의 코드를 뽑기까지 했습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;음료는 투명한 컵에 담긴 무색의 액체만 반입 가능하며 그 외에는 예외 없이 금지입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;카메라를 통해 책상 위, 아래, 천장 등 모든 곳을 보여주어야 하기 때문에 다시 한번 넉넉하게 체크인을 진행하시기를 권장드립니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여권으로 본인 인증을 했는데, 본인 인증을 하는 과정에서 여권 사진을 업로드해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 처음에 핸드폰으로 여권 사진을 찍어서 본인 인증을 하기 위해 제공되는 QR 코드를 찍어서 여권 사진을 찍었는데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;뭐가 문제인지 업로드가 너무 오래 걸려서 그냥 노트북으로 사진 찍기를 눌러서 본인 인증을 진행했습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 체크인 과정이 끝이 나면 바로 시험이 진행됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실 체크인 과정에서 너무 진이 빠지다보니 저는 두 번의 시험 모두 시험 중에는 그렇게 떨리지 않았던 것 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. CKAD 시험 출제 내용&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실 저는 Custom Resource Definition이나 Admission Controller가 출제 범위에 포함되어 있어 상당히 걱정을 많이 했었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Udemy 강의를 들을 때에도 해당 부분은 처음 접하는 내용이라 집중해서 듣고 Kode Kloud 문제도 여러 번 풀었으나 아무래도 익숙치 않은 내용이라 나오지 않기만을 바랐는데,, 사실 후기를 찾아보니 아직까지 해당 부분과 관련된 문제가 나온 적은 없는 것 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기억 나는 대로 시험 출제 내용을 적어보자면 총 16문제가 나왔고 문제는 하기와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Nginx ENV 등록하고 port expose&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; Docker image build하고 OCI format으로 export하기 (tar 파일로)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; Canary Deployment &lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Persistent Volume, Persistent Volume Claim 생성하여 Bound 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배포되어 있는 Network Policy 수정하지 않고 주어진 pod간만 통신하도록 Service랑 Deployment yaml file 수정&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Deployement와 연결된 Service Name 수정하는 거&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;text-align: left;&quot;&gt;container 수준에서 &lt;/span&gt;Security Context 추가&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Namespace limit 확인하여 Namespace에 할당된 memory limit의 반을 Deployment 내 pod별 limit으로 지정 + memory request 지정&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; CronJob 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Deprecated된 거 버전 변경 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Secret 생성한 후 Environment Variables 형태로 pod 내 container 단에 정의&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Readiness Probe 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;rolling update 관련 설정 변경 및 image 버전 변경한 후 이전 버전으로 rollback 진행&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Logging 관련 문제&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시험이 끝난 후에 생각나는 것을 적었다 보니 두 문제 정도는 기억이 잘 나지 않는데 시험 합/불에 영향을 줄 만한 어려운 문제는 아니었던 것으로 기억합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2, 3이 사실 저는 제일 까다로웠고 이 외에는 크게 문제가 없었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2는 정말 보자마자 멘붕이었는데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;image build까지는 크게 문제가 없었으나 OCI Format? tar file? 이라는 생각이 들면서 일단 flag를 걸어두고 다음 문제를 풀러 갔던 기억이 납니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시험을 본 후에 명령어를 찾아보니 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;docker save -o {tar file 이름} image:tag&lt;/span&gt;&lt;/b&gt;를 했어야 했던 것 같습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3은 Canary Deployment 자체를 어떻게 하는 것인지 이론적으로만 생각하고 있다가 직접 하라고 하니까 당황했었는데요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇기 때문에 이 부분도 빠짐 없이 꼼꼼하게 공부하고 가시길 바랍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 가지 주의할 점은, &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제가 Killer Shell 문제를 풀 때엔 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제공되는 yaml file을 백업 없이 수정하면 오류가 났을 때 rollback하기 어려울 것 같아 &lt;i&gt;문제 번호.yaml&lt;/i&gt; 과 같은 식으로 백업 파일을 생성한 후에 그 백업 파일을 수정하는 방식을 택했습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수정한 백업 파일로 apply가 잘 되면 그 후에 cp 명령어로 제공되는 파일을 덮어쓰기 하는 식이었는데요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러다 보니까, apply가 성공하면 신나서 다음 문제로 넘어가서 cp 명령어를 하지 않을 때도 있었습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음에 문제를 풀었을 때 생각보다 점수가 낮게 나와 놀랐는데 이 이유가 모두 위에 적은 방식으로 문제를 풀었기 때문이었습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 시험 중에는 백업 파일을 만들고, 제공된 yaml &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;파일&lt;/span&gt;을 수정하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어찌보면 당연한 내용이기는 하지만, 맞은 문제도 이 때문에 틀리게 채점이 될 수 있기 때문에 혹시나 하는 마음에 적어 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 최종적으로 100점 만점에 91점으로 시험에 합격하였습니다.&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;931&quot; data-origin-height=&quot;721&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOqFuP/btsFp7Mvfzr/wgmzF9v9xGULT9zhqAGXs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOqFuP/btsFp7Mvfzr/wgmzF9v9xGULT9zhqAGXs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOqFuP/btsFp7Mvfzr/wgmzF9v9xGULT9zhqAGXs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOqFuP%2FbtsFp7Mvfzr%2FwgmzF9v9xGULT9zhqAGXs1%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;931&quot; height=&quot;721&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;721&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;600&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqK6eq/btsFyLOD5O9/CKLrGNBCkZPxQ8iiQdHhQk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqK6eq/btsFyLOD5O9/CKLrGNBCkZPxQ8iiQdHhQk/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqK6eq/btsFyLOD5O9/CKLrGNBCkZPxQ8iiQdHhQk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqK6eq%2FbtsFyLOD5O9%2FCKLrGNBCkZPxQ8iiQdHhQk%2Fimg.webp&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;417&quot; height=&quot;278&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 일이 겹쳐서 걱정이 많았던 시험이지만 그래도 결과가 좋아서 다행이라는 생각을 하며, 이번 글을 마무리 하도록 하겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TOPIC/General</category>
      <category>CKAD</category>
      <category>ckad 후기</category>
      <category>Kubernetes</category>
      <category>쿠버네티스</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/24</guid>
      <comments>https://with-cloud.tistory.com/24#entry24comment</comments>
      <pubDate>Mon, 4 Mar 2024 18:03:16 +0900</pubDate>
    </item>
    <item>
      <title>2부 : Prometheus(+ Node Exporter, AlertManager) + Grafana 구성하기</title>
      <link>https://with-cloud.tistory.com/23</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;입니다:)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지난 1부에 이어서 2부 &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Grafana 대시보드화 구성과 &lt;/span&gt;&lt;b&gt;AlertManager 를 통한 알림 서비스 연동&quot; &lt;/b&gt;으로 돌아왔습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1부와 이어지는 내용이기에 아래 링크를 통해서 확인 후에, 이번 포스팅을 팔로우 하시면 이해하는 데 편하실거에요:)&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708063045309&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;1부 : Prometheus(+ Node Exporter, AlertManager) + Grafana 구성하기&quot; data-og-description=&quot;안녕하세요. TAK 입니다:) 요번 Monitoring &amp;amp; Alert 를 위해 많이 사용되는 &amp;quot;Prometheus(+ Node Exporter) + Grafana&amp;quot; 주제를 준비했습니다! (별도의 Category 를 만들까 했지만, 제가 처음으로 포스팅한 내용처럼 조&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/22&quot; data-og-url=&quot;https://with-cloud.tistory.com/22&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b1Ld2y/hyVjcqWXlW/gTUMI2YksDw3eDO0T6mNWK/img.png?width=800&amp;amp;height=758&amp;amp;face=0_0_800_758,https://scrap.kakaocdn.net/dn/nIx9E/hyVjmG7dzS/3pF5Yfhr7W4tOdfWOlNpcK/img.png?width=800&amp;amp;height=758&amp;amp;face=0_0_800_758,https://scrap.kakaocdn.net/dn/qXP7l/hyVmTcbSVj/8ky5Dg4VCWiQO1r9TXMD6k/img.png?width=1440&amp;amp;height=1365&amp;amp;face=0_0_1440_1365&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/22&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/22&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b1Ld2y/hyVjcqWXlW/gTUMI2YksDw3eDO0T6mNWK/img.png?width=800&amp;amp;height=758&amp;amp;face=0_0_800_758,https://scrap.kakaocdn.net/dn/nIx9E/hyVjmG7dzS/3pF5Yfhr7W4tOdfWOlNpcK/img.png?width=800&amp;amp;height=758&amp;amp;face=0_0_800_758,https://scrap.kakaocdn.net/dn/qXP7l/hyVmTcbSVj/8ky5Dg4VCWiQO1r9TXMD6k/img.png?width=1440&amp;amp;height=1365&amp;amp;face=0_0_1440_1365');&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;1부 : Prometheus(+ Node Exporter, AlertManager) + Grafana 구성하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. TAK 입니다:) 요번 Monitoring &amp;amp; Alert 를 위해 많이 사용되는 &quot;Prometheus(+ Node Exporter) + Grafana&quot; 주제를 준비했습니다! (별도의 Category 를 만들까 했지만, 제가 처음으로 포스팅한 내용처럼 조&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.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;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;028&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/028.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/028.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 그럼 시작하겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-1. Grafana 구성&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-1-1. Grafana 설치&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성도에서 처럼 Promethues Server가 아닌, 별도의 Grafana Server(Ubuntu 22.04)에서 구성하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자세한 사항은 Offical Docs 를 참고해 주세요!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(가이드 등 세부 내역이 상세히 잘 되어 있는 느낌..!)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1708064032344&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download Grafana | Grafana Labs&quot; data-og-description=&quot;Overview of how to download and install different versions of Grafana on different operating systems.&quot; data-og-host=&quot;grafana.com&quot; data-og-source-url=&quot;https://grafana.com/grafana/download&quot; data-og-url=&quot;https://grafana.com/grafana/download&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bGok8G/hyVjcxJp9c/AM9PUMKgkhjpCPDd7uuzzK/img.png?width=900&amp;amp;height=780&amp;amp;face=0_0_900_780&quot;&gt;&lt;a href=&quot;https://grafana.com/grafana/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://grafana.com/grafana/download&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bGok8G/hyVjcxJp9c/AM9PUMKgkhjpCPDd7uuzzK/img.png?width=900&amp;amp;height=780&amp;amp;face=0_0_900_780');&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;Download Grafana | Grafana Labs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Overview of how to download and install different versions of Grafana on different operating systems.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;grafana.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Grafana Packages Repository 추가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708064473112&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install -y apt-transport-https software-properties-common wget&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1708064589378&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# GPG key
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg &amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1708064997743&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# To add a repository for stable releases
echo &quot;deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main&quot; | sudo tee -a /etc/apt/sources.list.d/grafana.list&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1708065036171&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Updates the list of available packages
sudo apt-get update

# Installs the latest OSS release:
sudo apt-get install grafana&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Systemd Service 시작&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708065263872&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1708065282005&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl enable grafana-server.service
sudo systemctl start grafana-server.service
sudo systemctl status grafana-server.service&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;1487&quot; data-origin-height=&quot;701&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UTbea/btsEWJ5WNVy/bVIX7KMITKEwoXHgZxZxxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UTbea/btsEWJ5WNVy/bVIX7KMITKEwoXHgZxZxxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UTbea/btsEWJ5WNVy/bVIX7KMITKEwoXHgZxZxxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUTbea%2FbtsEWJ5WNVy%2FbVIX7KMITKEwoXHgZxZxxk%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;1487&quot; height=&quot;701&quot; data-origin-width=&quot;1487&quot; data-origin-height=&quot;701&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NSG 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Ubuntu의 경우, 방화벽의 Default 값은 Inactive 이므로, NSG(Netwokr Security Group)에서 제어합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Grafana의 Default Port : 3000&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2306&quot; data-origin-height=&quot;611&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmGF7a/btsEVOmmw67/7I598vdhPALXbPzn446E50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmGF7a/btsEVOmmw67/7I598vdhPALXbPzn446E50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmGF7a/btsEVOmmw67/7I598vdhPALXbPzn446E50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmGF7a%2FbtsEVOmmw67%2F7I598vdhPALXbPzn446E50%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;2306&quot; height=&quot;611&quot; data-origin-width=&quot;2306&quot; data-origin-height=&quot;611&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-1-2. Grafana 설정&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;액세스 확인 및 초기 Login 정보&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;초기 Login 정보 &amp;gt; ID : admin / PW : admin&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최초 접속 이후에, PW 변경 지시에 따라 변경 권장&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2861&quot; data-origin-height=&quot;1809&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1SNhB/btsEXtIyypD/iMuOfy1Ku5UVjWKFeXFBGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1SNhB/btsEXtIyypD/iMuOfy1Ku5UVjWKFeXFBGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1SNhB/btsEXtIyypD/iMuOfy1Ku5UVjWKFeXFBGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1SNhB%2FbtsEXtIyypD%2FiMuOfy1Ku5UVjWKFeXFBGK%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;2861&quot; height=&quot;1809&quot; data-origin-width=&quot;2861&quot; data-origin-height=&quot;1809&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Data Source 설정하기&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 시각화할 데이터의 원본을 설정하는 단계입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1512&quot; data-origin-height=&quot;1509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxQksx/btsEXuU18G7/kGOdQXkaZKNmF55jNIYWE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxQksx/btsEXuU18G7/kGOdQXkaZKNmF55jNIYWE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxQksx/btsEXuU18G7/kGOdQXkaZKNmF55jNIYWE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxQksx%2FbtsEXuU18G7%2FkGOdQXkaZKNmF55jNIYWE0%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;1512&quot; height=&quot;1509&quot; data-origin-width=&quot;1512&quot; data-origin-height=&quot;1509&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus Server 추가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2863&quot; data-origin-height=&quot;919&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mHKpj/btsETlytkCJ/XX2dquHuSQIbBEm9eMl4F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mHKpj/btsETlytkCJ/XX2dquHuSQIbBEm9eMl4F0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mHKpj/btsETlytkCJ/XX2dquHuSQIbBEm9eMl4F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmHKpj%2FbtsETlytkCJ%2FXX2dquHuSQIbBEm9eMl4F0%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;2863&quot; height=&quot;919&quot; data-origin-width=&quot;2863&quot; data-origin-height=&quot;919&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2868&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S8tR1/btsEWapkqOY/k5lVVfkzUIVsl3Z5Ja4KQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S8tR1/btsEWapkqOY/k5lVVfkzUIVsl3Z5Ja4KQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S8tR1/btsEWapkqOY/k5lVVfkzUIVsl3Z5Ja4KQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS8tR1%2FbtsEWapkqOY%2Fk5lVVfkzUIVsl3Z5Ja4KQ1%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;2868&quot; height=&quot;1060&quot; data-origin-width=&quot;2868&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Promethues Server의 URL 추가&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연결을 위한 아래 빨간 네모 박스 설정 이외에 인증, 보안 등 여러 설정이 있지만, 해당 과정에서는 Defualt 값으로 진행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, UI 상에서 Prometheus, Grafana 사용을 위해 VM의 연결된 Public IP를 사용했지만, &lt;b&gt;모든 연결 설정은 Private IP&lt;/b&gt; 사용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2862&quot; data-origin-height=&quot;1669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7uZoc/btsEZosYvkb/v5t1t3jIJ4vq66AcskI1nK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7uZoc/btsEZosYvkb/v5t1t3jIJ4vq66AcskI1nK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7uZoc/btsEZosYvkb/v5t1t3jIJ4vq66AcskI1nK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7uZoc%2FbtsEZosYvkb%2Fv5t1t3jIJ4vq66AcskI1nK%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;2862&quot; height=&quot;1669&quot; data-origin-width=&quot;2862&quot; data-origin-height=&quot;1669&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;rarr; 빨간 네모 박스 안, Prometheus Server URL의 경우&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1부에서 구성한 &lt;span style=&quot;background-color: #fafafa; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;/etc/prometheus/prometheus.yml&lt;/span&gt;&amp;nbsp; 파일의 &quot;localhost:9090&quot; 입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #000000; text-align: start;&quot;&gt;다만, 위 값에는 VM에 할당된 Private IP를 기입하여 &quot;http://&amp;lt;Private IP&amp;gt;:9090&quot; 입력합니다.&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;span style=&quot;color: #383a42;&quot;&gt;(여기서, Priavte 환경에서는 VM의 Private IP를 적지만, 우선 Public IP도 함께 사용 중이므로 localhost 값을 유지하였습니다.)&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;1737&quot; data-origin-height=&quot;1412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbiLaJ/btsETSW7VNM/soGgxEDeMokk8aU3b2Oxtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbiLaJ/btsETSW7VNM/soGgxEDeMokk8aU3b2Oxtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbiLaJ/btsETSW7VNM/soGgxEDeMokk8aU3b2Oxtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbiLaJ%2FbtsETSW7VNM%2FsoGgxEDeMokk8aU3b2Oxtk%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;1737&quot; height=&quot;1412&quot; data-origin-width=&quot;1737&quot; data-origin-height=&quot;1412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연결 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2850&quot; data-origin-height=&quot;1637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b10sqz/btsEV9qrR0L/y5qc6xhpdr0mvq7HoIOq00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b10sqz/btsEV9qrR0L/y5qc6xhpdr0mvq7HoIOq00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b10sqz/btsEV9qrR0L/y5qc6xhpdr0mvq7HoIOq00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb10sqz%2FbtsEV9qrR0L%2Fy5qc6xhpdr0mvq7HoIOq00%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;2850&quot; height=&quot;1637&quot; data-origin-width=&quot;2850&quot; data-origin-height=&quot;1637&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;2875&quot; data-origin-height=&quot;870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q4SBS/btsEWN1D9C6/4KvMiQy9jqrPovPIEuexIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q4SBS/btsEWN1D9C6/4KvMiQy9jqrPovPIEuexIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q4SBS/btsEWN1D9C6/4KvMiQy9jqrPovPIEuexIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ4SBS%2FbtsEWN1D9C6%2F4KvMiQy9jqrPovPIEuexIK%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;2875&quot; height=&quot;870&quot; data-origin-width=&quot;2875&quot; data-origin-height=&quot;870&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2. Grafana 대시보드&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2875&quot; data-origin-height=&quot;870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MqLKj/btsEZpenFG5/vsXZirsfYJv73zbUFvsSq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MqLKj/btsEZpenFG5/vsXZirsfYJv73zbUFvsSq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MqLKj/btsEZpenFG5/vsXZirsfYJv73zbUFvsSq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMqLKj%2FbtsEZpenFG5%2FvsXZirsfYJv73zbUFvsSq0%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;2875&quot; height=&quot;870&quot; data-origin-width=&quot;2875&quot; data-origin-height=&quot;870&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;2867&quot; data-origin-height=&quot;1363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biCYhX/btsEYXoSXSz/5T815PdlZ999rKdUVinux0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biCYhX/btsEYXoSXSz/5T815PdlZ999rKdUVinux0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biCYhX/btsEYXoSXSz/5T815PdlZ999rKdUVinux0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiCYhX%2FbtsEYXoSXSz%2F5T815PdlZ999rKdUVinux0%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;2867&quot; height=&quot;1363&quot; data-origin-width=&quot;2867&quot; data-origin-height=&quot;1363&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2-1. Self 테스트 구성&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;초기 빈(Empty) 구성의 Custom Panel 생성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2867&quot; data-origin-height=&quot;1363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qnHbJ/btsEVMhR0Vz/eBg0409VXQM2Vy92krkKGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qnHbJ/btsEVMhR0Vz/eBg0409VXQM2Vy92krkKGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qnHbJ/btsEVMhR0Vz/eBg0409VXQM2Vy92krkKGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqnHbJ%2FbtsEVMhR0Vz%2FeBg0409VXQM2Vy92krkKGK%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;2867&quot; height=&quot;1363&quot; data-origin-width=&quot;2867&quot; data-origin-height=&quot;1363&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;2872&quot; data-origin-height=&quot;1618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chmGun/btsEYOr4Wxp/tJkv5JY7C6Onaya39Dos70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chmGun/btsEYOr4Wxp/tJkv5JY7C6Onaya39Dos70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chmGun/btsEYOr4Wxp/tJkv5JY7C6Onaya39Dos70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchmGun%2FbtsEYOr4Wxp%2FtJkv5JY7C6Onaya39Dos70%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;2872&quot; height=&quot;1618&quot; data-origin-width=&quot;2872&quot; data-origin-height=&quot;1618&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대시보드를 위한 구성&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1,2번 항목 :&amp;nbsp; 대시보드화할 Metics 종류와 Filter 선택&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3번 항목 : 1,2번 항목에서 선택 값이 구체화되는지 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4번 항목 : 대시보드에 해당 값을 저장&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2871&quot; data-origin-height=&quot;1579&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RHwMw/btsEWABpmeK/UMvJg3DXskTSXkiPBLqGTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RHwMw/btsEWABpmeK/UMvJg3DXskTSXkiPBLqGTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RHwMw/btsEWABpmeK/UMvJg3DXskTSXkiPBLqGTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRHwMw%2FbtsEWABpmeK%2FUMvJg3DXskTSXkiPBLqGTK%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;2871&quot; height=&quot;1579&quot; data-origin-width=&quot;2871&quot; data-origin-height=&quot;1579&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;1720&quot; data-origin-height=&quot;1177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D1XTu/btsEZa2NPWs/VkAt5hSrdjWQmWdwVJQn80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D1XTu/btsEZa2NPWs/VkAt5hSrdjWQmWdwVJQn80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D1XTu/btsEZa2NPWs/VkAt5hSrdjWQmWdwVJQn80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD1XTu%2FbtsEZa2NPWs%2FVkAt5hSrdjWQmWdwVJQn80%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;1720&quot; height=&quot;1177&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;1177&quot;/&gt;&lt;/span&gt;&lt;/figure&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/bGSrJ3/btsEXvmgw8H/VNHVrgTLHvRU4A4yt13Xb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGSrJ3/btsEXvmgw8H/VNHVrgTLHvRU4A4yt13Xb1/img.png&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;1364&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.6738%; margin-right: 10px;&quot; data-widthpercent=&quot;52.28&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGSrJ3/btsEXvmgw8H/VNHVrgTLHvRU4A4yt13Xb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGSrJ3%2FbtsEXvmgw8H%2FVNHVrgTLHvRU4A4yt13Xb1%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;731&quot; height=&quot;1364&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC9JjJ/btsEZbHn3z6/SVlFD0WiCd5PIuwBffnbAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC9JjJ/btsEZbHn3z6/SVlFD0WiCd5PIuwBffnbAK/img.png&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;1474&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.1634%;&quot; data-widthpercent=&quot;47.72&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC9JjJ/btsEZbHn3z6/SVlFD0WiCd5PIuwBffnbAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC9JjJ%2FbtsEZbHn3z6%2FSVlFD0WiCd5PIuwBffnbAK%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;721&quot; height=&quot;1474&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Visualizations(Chart종류) 및 Panel의 이름&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대시보드 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 단계를 반복하며 원하는 Metrics과 Filter 선택하여 목적에 맞게 대시보드 구성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2861&quot; data-origin-height=&quot;1105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf54M3/btsEVgcA4n9/Yyj0PiHA46HPaUlTEPMUX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf54M3/btsEVgcA4n9/Yyj0PiHA46HPaUlTEPMUX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf54M3/btsEVgcA4n9/Yyj0PiHA46HPaUlTEPMUX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf54M3%2FbtsEVgcA4n9%2FYyj0PiHA46HPaUlTEPMUX1%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;2861&quot; height=&quot;1105&quot; data-origin-width=&quot;2861&quot; data-origin-height=&quot;1105&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;2875&quot; data-origin-height=&quot;907&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clvClj/btsEWxdC8J3/Pq3G5aVWZrEH3kbvlcAp1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clvClj/btsEWxdC8J3/Pq3G5aVWZrEH3kbvlcAp1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clvClj/btsEWxdC8J3/Pq3G5aVWZrEH3kbvlcAp1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclvClj%2FbtsEWxdC8J3%2FPq3G5aVWZrEH3kbvlcAp1k%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;2875&quot; height=&quot;907&quot; data-origin-width=&quot;2875&quot; data-origin-height=&quot;907&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성 대시보드 저장&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2872&quot; data-origin-height=&quot;872&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEBJRQ/btsEWLCTi7m/emSdjXuv9Ylynug9cOkcBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEBJRQ/btsEWLCTi7m/emSdjXuv9Ylynug9cOkcBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEBJRQ/btsEWLCTi7m/emSdjXuv9Ylynug9cOkcBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEBJRQ%2FbtsEWLCTi7m%2FemSdjXuv9Ylynug9cOkcBk%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;2872&quot; height=&quot;872&quot; data-origin-width=&quot;2872&quot; data-origin-height=&quot;872&quot;/&gt;&lt;/span&gt;&lt;/figure&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/c8lZ9k/btsEYPYRAxk/kyIYM2g76Ktmbc99IQNDe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8lZ9k/btsEYPYRAxk/kyIYM2g76Ktmbc99IQNDe0/img.png&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;1335&quot; data-is-animation=&quot;false&quot; style=&quot;width: 11.3566%; margin-right: 10px;&quot; data-widthpercent=&quot;11.49&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8lZ9k/btsEYPYRAxk/kyIYM2g76Ktmbc99IQNDe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8lZ9k%2FbtsEYPYRAxk%2FkyIYM2g76Ktmbc99IQNDe0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;1335&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T61PB/btsEVONCOBN/FXjwKwKTGvv1jpBNjXHm1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T61PB/btsEVONCOBN/FXjwKwKTGvv1jpBNjXHm1K/img.png&quot; data-origin-width=&quot;2863&quot; data-origin-height=&quot;799&quot; data-is-animation=&quot;false&quot; style=&quot;width: 87.4806%;&quot; data-widthpercent=&quot;88.51&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T61PB/btsEVONCOBN/FXjwKwKTGvv1jpBNjXHm1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT61PB%2FbtsEVONCOBN%2FFXjwKwKTGvv1jpBNjXHm1K%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;2863&quot; height=&quot;799&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2-2. Template 사용 구성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Grafana 에서 제공하는(타 사용자들이 공유) Template을 활용한 대시보드를 구성합니다.&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;span style=&quot;color: #000000;&quot;&gt;Import&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2868&quot; data-origin-height=&quot;1085&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byC5AE/btsEZmvj12S/rktuJLQ5vPBwywHbQbxkIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byC5AE/btsEZmvj12S/rktuJLQ5vPBwywHbQbxkIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byC5AE/btsEZmvj12S/rktuJLQ5vPBwywHbQbxkIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyC5AE%2FbtsEZmvj12S%2FrktuJLQ5vPBwywHbQbxkIk%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;2868&quot; height=&quot;1085&quot; data-origin-width=&quot;2868&quot; data-origin-height=&quot;1085&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;2387&quot; data-origin-height=&quot;1563&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/usFaR/btsEWK431gm/oSKPwFRnkVDcc1cq4jKf1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/usFaR/btsEWK431gm/oSKPwFRnkVDcc1cq4jKf1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/usFaR/btsEWK431gm/oSKPwFRnkVDcc1cq4jKf1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FusFaR%2FbtsEWK431gm%2FoSKPwFRnkVDcc1cq4jKf1k%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;2387&quot; height=&quot;1563&quot; data-origin-width=&quot;2387&quot; data-origin-height=&quot;1563&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대시보드 적용 Sample 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 사이트에서 대시보드에 적용할 샘플을 업로드합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당과정에서는 Copy ID (URL 혹은 ID) 방식을 사용합니다.&lt;/span&gt;&lt;br /&gt;
&lt;figure id=&quot;og_1708071781344&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/m7tia/hyVjmAmM08/wCQ18ncpzsWVKlgtNf6S30/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/r919q/hyVmWfHWMG/huucrxwlWFrGcCuwk0qLd1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot; data-og-url=&quot;https://grafana.com/grafana/dashboards/&quot; data-og-source-url=&quot;https://grafana.com/grafana/dashboards/&quot; data-og-host=&quot;grafana.com&quot; data-og-description=&quot;Thank you! Your message has been received!&quot; data-og-title=&quot;Dashboards | Grafana Labs&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://grafana.com/grafana/dashboards/&quot; data-source-url=&quot;https://grafana.com/grafana/dashboards/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/m7tia/hyVjmAmM08/wCQ18ncpzsWVKlgtNf6S30/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/r919q/hyVmWfHWMG/huucrxwlWFrGcCuwk0qLd1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Dashboards | Grafana Labs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Thank you! Your message has been received!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;grafana.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&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;2365&quot; data-origin-height=&quot;1699&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mC0fi/btsEVcH9k3a/cjywPQMLGUsc0J2WE6fPZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mC0fi/btsEVcH9k3a/cjywPQMLGUsc0J2WE6fPZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mC0fi/btsEVcH9k3a/cjywPQMLGUsc0J2WE6fPZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmC0fi%2FbtsEVcH9k3a%2FcjywPQMLGUsc0J2WE6fPZ0%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;2365&quot; height=&quot;1699&quot; data-origin-width=&quot;2365&quot; data-origin-height=&quot;1699&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Copy ID 적용 후, Import dashboard를 위한 Options 설정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1375&quot; data-origin-height=&quot;1390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dg8Dd/btsEYVLwqBn/9ZV7kdGxjJeksGrHWXAsO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dg8Dd/btsEYVLwqBn/9ZV7kdGxjJeksGrHWXAsO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dg8Dd/btsEYVLwqBn/9ZV7kdGxjJeksGrHWXAsO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDg8Dd%2FbtsEYVLwqBn%2F9ZV7kdGxjJeksGrHWXAsO0%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;1375&quot; height=&quot;1390&quot; data-origin-width=&quot;1375&quot; data-origin-height=&quot;1390&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;span style=&quot;color: #000000;&quot;&gt;2-3. 멋진 최종 DashBoard 확인&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Import 기능을 사용하여 제공되는 여러 Template을 기반으로 일반적인 Metrics 활용한 멋진 대시보드 완성!&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제공되는 여러 옵션을 선택하여 다양한 시각화를 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2861&quot; data-origin-height=&quot;1699&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WLnDt/btsEZRIDDAD/7VWgf9IpxwyNM7KIZYEhy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WLnDt/btsEZRIDDAD/7VWgf9IpxwyNM7KIZYEhy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WLnDt/btsEZRIDDAD/7VWgf9IpxwyNM7KIZYEhy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWLnDt%2FbtsEZRIDDAD%2F7VWgf9IpxwyNM7KIZYEhy0%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;2861&quot; height=&quot;1699&quot; data-origin-width=&quot;2861&quot; data-origin-height=&quot;1699&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;span style=&quot;color: #000000;&quot;&gt;2-4. Alertmanager 구성&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-4-1. Alertmanager 설치&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Alermanager도 위 단계에서 사용한 Grafana VM에서 설치하여 사용합니다.&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;span style=&quot;color: #000000;&quot;&gt;Binary 파일 다운로드&lt;/span&gt;&lt;br /&gt;
&lt;figure id=&quot;og_1708319000331&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bzjovI/hyVmQtuo1I/RymwVDaNLfkKi2FEfAMtkK/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192&quot; data-og-url=&quot;https://prometheus.io/download/&quot; data-og-source-url=&quot;https://prometheus.io/download/&quot; data-og-host=&quot;prometheus.io&quot; data-og-description=&quot;An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.&quot; data-og-title=&quot;Download | Prometheus&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://prometheus.io/download/&quot; data-source-url=&quot;https://prometheus.io/download/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bzjovI/hyVmQtuo1I/RymwVDaNLfkKi2FEfAMtkK/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192');&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;Download | Prometheus&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;prometheus.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1708319054555&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Alermanager 시스템 그룹 및 사용자 할당(+ 디렉터리 생성)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708319341097&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo groupadd --system alertmanager
sudo useradd -s /sbin/nologin --system -g alertmanager alertmanager

sudo mkdir -p /etc/alertmanager/templates
sudo mkdir /var/lib/alertmanager
sudo chown alertmanager:alertmanager /etc/alertmanager
sudo chown alertmanager:alertmanager /var/lib/alertmanager&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;압축&amp;nbsp;풀고,&amp;nbsp;디렉터리&amp;nbsp;이동&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708319489985&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tar -xvf alertmanager-0.26.0.linux-amd64.tar.gz
cd alertmanager-0.26.0.linux-amd64.tar.gz&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;1554&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caLwjx/btsE2CL5qaJ/Hke7XCUvFKW6YGJ6kzq3vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caLwjx/btsE2CL5qaJ/Hke7XCUvFKW6YGJ6kzq3vK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caLwjx/btsE2CL5qaJ/Hke7XCUvFKW6YGJ6kzq3vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaLwjx%2FbtsE2CL5qaJ%2FHke7XCUvFKW6YGJ6kzq3vK%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;1554&quot; height=&quot;446&quot; data-origin-width=&quot;1554&quot; data-origin-height=&quot;446&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Binary&amp;nbsp;파일&amp;nbsp;(로컬) 이동&amp;nbsp;및&amp;nbsp;소유자&amp;nbsp;설정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708319761961&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mv alertmanager /usr/local/bin
sudo mv amtool /usr/local/bin
sudo chown alertmanager:alertmanager /usr/local/bin/alertmanager
sudo chown alertmanager:alertmanager /usr/local/bin/amtool&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;1352&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ttOcK/btsE1Ech8fm/ve0ZZkp6gdPLSMEy0K1pTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ttOcK/btsE1Ech8fm/ve0ZZkp6gdPLSMEy0K1pTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ttOcK/btsE1Ech8fm/ve0ZZkp6gdPLSMEy0K1pTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FttOcK%2FbtsE1Ech8fm%2Fve0ZZkp6gdPLSMEy0K1pTK%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;1352&quot; height=&quot;195&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;195&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성&amp;nbsp;파일&amp;nbsp;이동&amp;nbsp;및&amp;nbsp;소유자&amp;nbsp;변경&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708319846190&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mv alertmanager.yml /etc/alertmanager/alertmanager.yml
sudo chown alertmanager:alertmanager /etc/alertmanager/alertmanager.yml&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;1443&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buk7J6/btsE0Ilw554/DUJKpHDCJJAkLM3TeEsKjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buk7J6/btsE0Ilw554/DUJKpHDCJJAkLM3TeEsKjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buk7J6/btsE0Ilw554/DUJKpHDCJJAkLM3TeEsKjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuk7J6%2FbtsE0Ilw554%2FDUJKpHDCJJAkLM3TeEsKjk%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;1443&quot; height=&quot;199&quot; data-origin-width=&quot;1443&quot; data-origin-height=&quot;199&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Alertmanager Systemd Service 만들기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708319885102&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nano /etc/systemd/system/alertmanager.service


[Unit]
Description=AlertManager
Wants=network-online.target
After=network-online.target

[Service]
User=alertmanager
Group=alertmanager
Type=simple
ExecStart=/usr/local/bin/alertmanager \
        --config.file /etc/alertmanager/alertmanager.yml \
        --storage.path /var/lib/alertmanager/ \
        --cluster.advertise-address=&quot;&amp;lt;Private IP&amp;gt;:9093&quot;
        
[Install]
WantedBy=multi-user.target&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;1887&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ecKXzb/btsEYZokgT8/daxWmWpXGgQdMRf2v13V6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ecKXzb/btsEYZokgT8/daxWmWpXGgQdMRf2v13V6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ecKXzb/btsEYZokgT8/daxWmWpXGgQdMRf2v13V6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FecKXzb%2FbtsEYZokgT8%2FdaxWmWpXGgQdMRf2v13V6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1887&quot; height=&quot;682&quot; data-origin-width=&quot;1887&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;**&lt;b&gt; (Alertmanager의 HA mode)&lt;/b&gt; &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;The&amp;nbsp;&lt;/span&gt;cluster.advertise-address&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&amp;nbsp;flag is required if the instance doesn't have an IP address that is part of&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; href=&quot;https://tools.ietf.org/html/rfc6890&quot;&gt;RFC 6890&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&amp;nbsp;with a default route.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;844&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR03Lu/btsE4YPtj3I/HML81tAwdf4gZ1yOnfFCn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR03Lu/btsE4YPtj3I/HML81tAwdf4gZ1yOnfFCn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR03Lu/btsE4YPtj3I/HML81tAwdf4gZ1yOnfFCn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR03Lu%2FbtsE4YPtj3I%2FHML81tAwdf4gZ1yOnfFCn1%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;888&quot; height=&quot;844&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;figure id=&quot;og_1708325944954&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - prometheus/alertmanager: Prometheus Alertmanager&quot; data-og-description=&quot;Prometheus Alertmanager. Contribute to prometheus/alertmanager development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/prometheus/alertmanager?tab=readme-ov-file#high-availability&quot; data-og-url=&quot;https://github.com/prometheus/alertmanager&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xGoEv/hyVmSdM3QV/ZgKoSca8sMTQ4q6jHx4VC1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/prometheus/alertmanager?tab=readme-ov-file#high-availability&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/prometheus/alertmanager?tab=readme-ov-file#high-availability&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xGoEv/hyVmSdM3QV/ZgKoSca8sMTQ4q6jHx4VC1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - prometheus/alertmanager: Prometheus Alertmanager&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Prometheus Alertmanager. Contribute to prometheus/alertmanager development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성 사항 반영을 위해 Reload Systemd&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708320872834&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-4-2. Alertmanager Service 시작&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1708320915122&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl enable alertmanager
sudo systemctl start alertmanager&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1708320928811&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl status alertmanager&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;2309&quot; data-origin-height=&quot;646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpSk03/btsE2AOqDwZ/6YjB91TdzD866XnEKI4ToK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpSk03/btsE2AOqDwZ/6YjB91TdzD866XnEKI4ToK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpSk03/btsE2AOqDwZ/6YjB91TdzD866XnEKI4ToK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpSk03%2FbtsE2AOqDwZ%2F6YjB91TdzD866XnEKI4ToK%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;2309&quot; height=&quot;646&quot; data-origin-width=&quot;2309&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;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방화벽 허용(Azure NSG 허용 정책)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure의 VM의 경우, 방화벽 설정이 Default 값으로 Inactive(비활성화) 입니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 해당 과정에서는 NSG 정책으로 In/Out Bound 제어합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- InBound 정책 추가 : Default Port 9093&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2238&quot; data-origin-height=&quot;673&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ7uZ4/btsE0Jx5gUN/qHJpRsK2SnMKQMLzn8tXl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ7uZ4/btsE0Jx5gUN/qHJpRsK2SnMKQMLzn8tXl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ7uZ4/btsE0Jx5gUN/qHJpRsK2SnMKQMLzn8tXl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ7uZ4%2FbtsE0Jx5gUN%2FqHJpRsK2SnMKQMLzn8tXl1%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;2238&quot; height=&quot;673&quot; data-origin-width=&quot;2238&quot; data-origin-height=&quot;673&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus&amp;nbsp;정상&amp;nbsp;액세스&amp;nbsp;확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;내부 확인 :&lt;/span&gt; &lt;span style=&quot;background-color: #272822; color: #ffffff; text-align: left;&quot;&gt;curl &lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #9fba45; text-align: left;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #f86634; text-align: left;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #ffffff; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #f86634; text-align: left;&quot;&gt;GET&lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #ffffff; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #ffffff; text-align: left;&quot;&gt;http&lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #9fba45; text-align: left;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #9fba45; text-align: left;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #9fba45; text-align: left;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #ffffff; text-align: left;&quot;&gt;localhost&lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #9fba45; text-align: left;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;background-color: #272822; color: #f86634; text-align: left;&quot;&gt;9093&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2867&quot; data-origin-height=&quot;1371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mm2W0/btsE6JcY2ni/lFbLXLZ383k4ft5B0wa5Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mm2W0/btsE6JcY2ni/lFbLXLZ383k4ft5B0wa5Rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mm2W0/btsE6JcY2ni/lFbLXLZ383k4ft5B0wa5Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmm2W0%2FbtsE6JcY2ni%2FlFbLXLZ383k4ft5B0wa5Rk%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;2867&quot; height=&quot;1371&quot; data-origin-width=&quot;2867&quot; data-origin-height=&quot;1371&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-4-3. Prometheus Server연동&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음과 같은 목적을 기반으로 작업 수행을 위해 Prometheus Server를 구성합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Prometheus Server에서 Sraping 한 메트릭 데이터를 기반으로 Alertmanager에서 Alert을 보낼 수 있도록&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Grafana에서 Alertmanager에 대한 영역을 모니터링할 수 있도록&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Config 변경(추가)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Alertmanager를 Grafana VM에서 구성했기에, 해당 VM의 &amp;lt;Private IP&amp;gt;:9093 를 Target으로 입력합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;별도의 NSG 정책을 추가하지 않는다면, Azure에서는 기본 정책으로 VNET 내 Private IP 기반 통신의 경우, Source/Destination 및 Port의 제한이 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708329181997&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nano /etc/prometheus/prometheus.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;2089&quot; data-origin-height=&quot;1312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjuvA0/btsE3nVRp0o/po3TKwElfzYnpPYyO2FCG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjuvA0/btsE3nVRp0o/po3TKwElfzYnpPYyO2FCG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjuvA0/btsE3nVRp0o/po3TKwElfzYnpPYyO2FCG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjuvA0%2FbtsE3nVRp0o%2Fpo3TKwElfzYnpPYyO2FCG0%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;2089&quot; height=&quot;1312&quot; data-origin-width=&quot;2089&quot; data-origin-height=&quot;1312&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;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스 재시작하여 변경값 적용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708328667855&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart prometheus&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus Target 정상 UP 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 Config 값에 구성한 값이 정상 반영된 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2880&quot; data-origin-height=&quot;1627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGWvBI/btsEZmDDEJK/Ve4e9zbguReVOBpkrGGT70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGWvBI/btsEZmDDEJK/Ve4e9zbguReVOBpkrGGT70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGWvBI/btsEZmDDEJK/Ve4e9zbguReVOBpkrGGT70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGWvBI%2FbtsEZmDDEJK%2FVe4e9zbguReVOBpkrGGT70%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;2880&quot; height=&quot;1627&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-5. Alertmanager 경고 규칙 만들기&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus Server 에서 정의한 경고 규칙에 따라, Alertmanager 가 정해진 구성값(ex. Slack, Email)을 기반으로 알림(Alert)를 보내기 위한 단계입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus Server 에서 Rule 생성&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규칙의 경우,&amp;nbsp; &lt;a style=&quot;color: #000000;&quot; href=&quot;https://samber.github.io/awesome-prometheus-alerts/rules&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Sample 제공하는 사이트의 자료&lt;/a&gt;를 참고하였습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;총 5개의 규칙을 위한 조건을 정의하였습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- InstanceDown&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- HostHighCpuLoad&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- HostOutOfMemory&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- HostMemoryUnderMemoryPressure&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- HostOutOfDiskSpace&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708329216981&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo nano/etc/prometheus/alert_rules.yml


groups:
- name: alert_rules
  rules:
  # instance(Host VM) is down on {{ $labels.instance }}
  - alert: InstanceDown
    expr: up == 0
    for: 0m
    labels:
      severity: &quot;critical&quot;
    annotations:
      summary: &quot;Endpoint {{ $labels.instance }} down&quot;
      description: &quot;{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes.&quot;
 
  # CPU load is &amp;gt; 80%
  - alert: HostHighCpuLoad
    expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode=&quot;idle&quot;}[2m])) * 100) &amp;gt; 80
    for: 0m
    labels:
      severity: warning
    annotations:
      summary: &quot;Host high CPU load (instance {{ $labels.instance }})&quot;
      description: &quot;CPU load is &amp;gt; 80%\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}&quot;      

  # Node memory is filling up (&amp;lt; 10% left)	
  - alert: HostOutOfMemory
    expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 &amp;lt; 10
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: &quot;Host out of memory (instance {{ $labels.instance }})&quot;
      description: &quot;Node memory is filling up (&amp;lt; 10% left)\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}&quot;

  #The node is under heavy memory pressure. High rate of major page faults
  - alert: HostMemoryUnderMemoryPressure
    expr: rate(node_vmstat_pgmajfault[1m]) &amp;gt; 1000
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: &quot;Host memory under memory pressure (instance {{ $labels.instance }})&quot;
      description: &quot;The node is under heavy memory pressure. High rate of major page faults\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}&quot;
 
  # Disk is almost full (&amp;lt; 10% left) 
  - alert: HostOutOfDiskSpace
    expr: (node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes &amp;lt; 10 and ON (instance, device, mountpoint) node_filesystem_readonly == 0
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: &quot;Host out of disk space (instance {{ $labels.instance }})&quot;
      description: &quot;Disk is almost full (&amp;lt; 10% left)\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Rules 적용&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 작성한 Rule에 대한 스크립트를 Promethues Config에 반영합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708330472648&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo /ect/prometheus/prometheus.yml&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;2010&quot; data-origin-height=&quot;1273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEqyGR/btsE0qey3Lx/GRgg9xIdmrzHzhjHYWXwj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEqyGR/btsE0qey3Lx/GRgg9xIdmrzHzhjHYWXwj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEqyGR/btsE0qey3Lx/GRgg9xIdmrzHzhjHYWXwj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEqyGR%2FbtsE0qey3Lx%2FGRgg9xIdmrzHzhjHYWXwj0%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;2010&quot; height=&quot;1273&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;1273&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus Server 서비스 재기동&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1708330192379&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart prometheus.services&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Rules 반영 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus Server 접속 &amp;gt; Status &amp;gt; Rules&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2871&quot; data-origin-height=&quot;1301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yegtm/btsE41kL0I5/VxroYLe0nv2kV3EwVCAwg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yegtm/btsE41kL0I5/VxroYLe0nv2kV3EwVCAwg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yegtm/btsE41kL0I5/VxroYLe0nv2kV3EwVCAwg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyegtm%2FbtsE41kL0I5%2FVxroYLe0nv2kV3EwVCAwg1%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;2871&quot; height=&quot;1301&quot; data-origin-width=&quot;2871&quot; data-origin-height=&quot;1301&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Prometheus Server &amp;gt; Alerts&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2863&quot; data-origin-height=&quot;711&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eHStNR/btsE2DLhclN/aCkY7omNbvgNkUYj6Dj0g0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eHStNR/btsE2DLhclN/aCkY7omNbvgNkUYj6Dj0g0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eHStNR/btsE2DLhclN/aCkY7omNbvgNkUYj6Dj0g0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeHStNR%2FbtsE2DLhclN%2FaCkY7omNbvgNkUYj6Dj0g0%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;2863&quot; height=&quot;711&quot; data-origin-width=&quot;2863&quot; data-origin-height=&quot;711&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-6. Alertmanager 통한 Slack 알림 보내기&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자, 이제 마지막 단계입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최종적으로 수집된 메트릭 데이터를 기반으로 규칙을 반영하여 Slack에 알림 보내겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&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;span style=&quot;color: #000000;&quot;&gt;Alermanager Config 설정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;slack_api_url의 값에 Slack에서 생성한 Incoming Webhook 앱의 URL 값을 입력합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(이번 포스팅에서는 발급 과정에 대해서는 생략합니다.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보다 자세한 사항(옵션값의 대한 정의 등)은 공식 Docs를 참조&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;figure id=&quot;og_1708393715614&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ctDM1w/hyVmXfmRjS/rnnauzrRlPjqScmA63kZKk/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192&quot; data-og-url=&quot;https://prometheus.io/docs/alerting/latest/configuration/&quot; data-og-source-url=&quot;https://prometheus.io/docs/alerting/latest/configuration/&quot; data-og-host=&quot;prometheus.io&quot; data-og-description=&quot;An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.&quot; data-og-title=&quot;Configuration | Prometheus&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://prometheus.io/docs/alerting/latest/configuration/&quot; data-source-url=&quot;https://prometheus.io/docs/alerting/latest/configuration/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ctDM1w/hyVmXfmRjS/rnnauzrRlPjqScmA63kZKk/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Configuration | Prometheus&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;prometheus.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&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;1998&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dt1Axz/btsE7qD7SRQ/FoWqV7IGFaKzgaPKvRYWdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dt1Axz/btsE7qD7SRQ/FoWqV7IGFaKzgaPKvRYWdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dt1Axz/btsE7qD7SRQ/FoWqV7IGFaKzgaPKvRYWdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdt1Axz%2FbtsE7qD7SRQ%2FFoWqV7IGFaKzgaPKvRYWdK%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;1998&quot; height=&quot;706&quot; data-origin-width=&quot;1998&quot; data-origin-height=&quot;706&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 알림을 위해 Node 중 1대의 VM을 OFF&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Alertmanager 확인(InstanceDown)&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2327&quot; data-origin-height=&quot;1067&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IiSrx/btsEY9RYyay/I0kuplAiUQ54XJ2zENZz21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IiSrx/btsEY9RYyay/I0kuplAiUQ54XJ2zENZz21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IiSrx/btsEY9RYyay/I0kuplAiUQ54XJ2zENZz21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIiSrx%2FbtsEY9RYyay%2FI0kuplAiUQ54XJ2zENZz21%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;2327&quot; height=&quot;1067&quot; data-origin-width=&quot;2327&quot; data-origin-height=&quot;1067&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Premetheus 확인&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2876&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QM5dN/btsEYYXqWUL/yiqjT7La0etjfxwSjkPVXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QM5dN/btsEYYXqWUL/yiqjT7La0etjfxwSjkPVXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QM5dN/btsEYYXqWUL/yiqjT7La0etjfxwSjkPVXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQM5dN%2FbtsEYYXqWUL%2FyiqjT7La0etjfxwSjkPVXK%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;2876&quot; height=&quot;1536&quot; data-origin-width=&quot;2876&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Slack 알림 확인&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2069&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmKNkE/btsE0pmogaw/DvRRyjygij3yl3VgCPnjpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmKNkE/btsE0pmogaw/DvRRyjygij3yl3VgCPnjpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmKNkE/btsE0pmogaw/DvRRyjygij3yl3VgCPnjpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmKNkE%2FbtsE0pmogaw%2FDvRRyjygij3yl3VgCPnjpK%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;2069&quot; height=&quot;347&quot; data-origin-width=&quot;2069&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금까지 2부 &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Grafana 대시보드화 구성과&amp;nbsp;&lt;/span&gt;&lt;b&gt;AlertManager 를 통한 알림 서비스 연동&quot; 알아보았습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;/b&gt;이것으로 1,2부 동안 진행한 &lt;b&gt;&quot;Prometheus(+ Node Exporter, AlertManager) + Grafana 구성&quot;&lt;/b&gt; 포스팅을 마치겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;궁금한 점이나 이번 포스팅에서 부족한 점 등 자유로운 의견을 남겨주세요!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #9d9d9d; text-align: start;&quot;&gt;(!많관부!)&lt;/span&gt; 다음에도 함께 공유할 수 있는 주제를 가지고 찾아뵙겠습니다. &lt;span style=&quot;color: #9d9d9d; text-align: start;&quot;&gt;(!많관부!)&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Data</category>
      <category>Alertmanager</category>
      <category>Azure</category>
      <category>cloud</category>
      <category>Granfana</category>
      <category>Prometheus</category>
      <category>slack</category>
      <category>Slack 알림</category>
      <category>대시보드</category>
      <category>모니터링</category>
      <category>시각화</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/23</guid>
      <comments>https://with-cloud.tistory.com/23#entry23comment</comments>
      <pubDate>Tue, 20 Feb 2024 10:59:45 +0900</pubDate>
    </item>
    <item>
      <title>1부 : Prometheus(+ Node Exporter, AlertManager) + Grafana 구성하기</title>
      <link>https://with-cloud.tistory.com/22</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start; color: #000000;&quot;&gt;입니다:)&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;요번 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Monitoring &amp;amp; Alert 를 위해 많이 사용되는 &lt;b&gt;&quot;Prometheus(+ Node Exporter) + Grafana&quot; &lt;/b&gt;주제를 준비했습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(별도의 Category 를 만들까 했지만, 제가 처음으로 포스팅한 내용처럼 조금 더 포괄적인 영역인 DATA 분야에 포스팅하게 되었습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;조금 더 자세한 전달을 위해 1부 &amp;amp; 2부로 나눠서 포스팅할 예정입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1부에서는 개념과 테스트 환경의 설명, Prometheus 및 Node Exporter 설치와 구성&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2부에서는 &lt;span style=&quot;color: #000000;&quot;&gt;Grafana 대시보드화 구성과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AlertManager 를 통한 알림 서비스 연동&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;001&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 그럼 본격으로 1부 시작하겠습니다!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. Prometheus 란?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Promethus 란,&amp;nbsp;시스템 모니터링 및 경고를 위해 SoundCloud 에서 구축된 오픈소스 ToolKit 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재는 독립된 오픈소스 프로젝트로 Kubernetes와 같이 거버넌스에 종속되지 않는 Cloud Native Computing Foundations에 합류했다고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;주된 목적은 모니터링으로 서비스 운영 중 발생할 수 있는 이슈 및 장애 대비를 위해 사용되며, 시계열 데이터를 수집하고 기록하며, 이를 구체화(수치화, 시각화)하는 것이라고 표현할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;Timestamp와 함께 측정항목의 이름과 Key-Vaule 쌍으로 기록되며, 시계열이라 함은 시간에 따른 변화를 기록하는 것을 의미합니다. 이러한 다차원 데이터 모델을 활용하기 위한 별도의 PromQL이라는 쿼리언어가 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;모니터링에는 2가지 매커니즘이 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.&amp;nbsp;&lt;b&gt;pull&lt;/b&gt;-based&amp;nbsp;monitoring&amp;nbsp;system&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.&amp;nbsp;&lt;b&gt;push&lt;/b&gt;-based monitoring system&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;Prometheus&amp;nbsp;에서는 아래 보이는 것과 같이 대상(Targets)으로부터 메트릭 값을&amp;nbsp;&lt;b&gt;Pull&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;즉&lt;b&gt;,&amp;nbsp;&lt;/b&gt;가져오는(받아오는) 방식을 사용하고 있습니다. 예를 들어, Node Exporter 라는 Agent가 설치된 대상(Tagets) 서버의 메트릭을 수집하면, 중앙 시스템(Prometheus&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;Server&lt;/span&gt;)가 데이터를 Scraping 하는 방식입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;이러한 Pull - Push 방식은 사용자의 관점이나 환경에 따라 장단점이 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000; text-align: start;&quot;&gt;Pull의 경우만 살펴보자면,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;중앙 시스템(Prometheus&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;Server&lt;/span&gt;)는 직접(수동) 접근하여 데이터를 수집하기에 신뢰성이 높으며, Health Check에서도 연결 구성이 비교적 단순하기에 Trobleshooting이 수월한 점 등이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8ssXV/btsEIRi0DRG/rofbyQ3e7oPuzfZlCDkIOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8ssXV/btsEIRi0DRG/rofbyQ3e7oPuzfZlCDkIOk/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://prometheus.io/assets/architecture.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8ssXV/btsEIRi0DRG/rofbyQ3e7oPuzfZlCDkIOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8ssXV%2FbtsEIRi0DRG%2FrofbyQ3e7oPuzfZlCDkIOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;768&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://prometheus.io/assets/architecture.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 그림처럼 Prometheus 생태계는 여러 구성 요소들로 이뤄질 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(대부분의 Prometheus 구성 요소는&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;Go 언어로 개발되었으며,&amp;nbsp;&lt;/span&gt;정적 바이너리로 쉽게 구축하고 배포할 수 있습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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;span style=&quot;color: #000000;&quot;&gt;데이터 수집&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 중앙 시스템 역할을 하는 Prometheus&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;Server&lt;/span&gt; 의 요소 중 하나인 Retrieval에서는 Service discovery에 정의되어 있는 Target을 식별합니다. Target이 정의되면 Retrieval에서 Target에 존재하는 Exporter를 통해 메트릭을 스크래핑 합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Service discovery는 Kubernetes Cluster 과 같은 Auto-Scale Target 에 대해 메트릭을 수집 대상을 동적으로 설정 가능하도록 yaml 형태로 정의한 파일로 저장되어 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, Pushgateway 는 말 그대로 데이터를 push 받아주는 서버(From&lt;span style=&quot;text-align: left;&quot;&gt; Ex&lt;/span&gt;porter) 입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 &lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;역할은 단일(임시) 또는 배치 작업과 같은 수명이 짧은 서비스에 대한 메트릭을 가져오기위해 사용 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터 저장&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Prometheus&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;Server&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt; 구성 요소를 살펴보면, Pull Metrics 방식으로 데이터를 수집하는 역할을 하는 &lt;b&gt;Retrieval,&lt;br /&gt;&lt;/b&gt;이러한 데이터가 저장되는 Local Storage인 &lt;b&gt;TSDB(&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;Time Series Database), &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;그리고 이러한 데이터를&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp;API와 PromQL등 사용하여 &lt;/span&gt;대시보드화 등 활용가능케 하는 &lt;b&gt;HTTP Server&lt;/b&gt;로 구성되어 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *데이터 저장소는 Remote Storage(Disk, Volume) 사용 가능.&lt;br /&gt;&lt;br /&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;span style=&quot;color: #000000;&quot;&gt;데이터 시각화, 알림&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: Prometheus&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;Server 의 &lt;b&gt;HTTP Server &lt;/b&gt;는 수집한 메트릭 데이터를 HTTP 엔드포인트를 통해 활용될 수 있습니다. Grafana와 같은 대시보드를 위한 애플리케이션을 사용하여 PromQL 쿼리하여 데이터를 시각화할 수 있습니다.&lt;br /&gt;&lt;br /&gt;또한, API 방식으로 Alertmanager를 통해 수집한 메트릭 데이터 정보를 바탕으로 임계값을 조건에 맞춰 생성하고, 이데 따른 알림 및 경고를 E-mail, Slack 등 다양한 채널로 최종 사용자에게 전송하는 역할을 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1-2. 테스트 환경&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjbTCw/btsEGS3QHZw/UR9UvlxeniK8K0UCGkNauK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjbTCw/btsEGS3QHZw/UR9UvlxeniK8K0UCGkNauK/img.jpg&quot; data-alt=&quot;출처 : https://training.promlabs.com/static/node-exporter-architecture-570e9857c08bbb0008022f76606fa749.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjbTCw/btsEGS3QHZw/UR9UvlxeniK8K0UCGkNauK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjbTCw%2FbtsEGS3QHZw%2FUR9UvlxeniK8K0UCGkNauK%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;1142&quot; height=&quot;682&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://training.promlabs.com/static/node-exporter-architecture-570e9857c08bbb0008022f76606fa749.svg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 예시처럼 Linux 서버에 Node Exporter를 사용하여 중앙 시스템(Prometheus Server)에서 메트릭 데이터를 Scraping 하는 구성도는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 구조는 Azure 환경에서 주로 사용되는 Hub-Spoke 구조에 적합?하여, Hub 영역에 Promethues Server를 배치하고, 메트릭 데이터를 수집하는 위 구성도를 반영하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우선, 서로 다른 네트워크(대역)을 VNET(Virtual Network) Peering을 통해 통신 가능한 상태로 구현하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(VPN은 비용상 문제가 있어서... 양해를..)&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;1440&quot; data-origin-height=&quot;1365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYNaBW/btsEFP7CSk1/iVAf8gDhKfBw2EJJ4KsbK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYNaBW/btsEFP7CSk1/iVAf8gDhKfBw2EJJ4KsbK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYNaBW/btsEFP7CSk1/iVAf8gDhKfBw2EJJ4KsbK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYNaBW%2FbtsEFP7CSk1%2FiVAf8gDhKfBw2EJJ4KsbK0%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;1440&quot; height=&quot;1365&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Target VM을 서로 다른 Linux 계열을 사용하였으며, Subnet으로 구분한 이유는 NSG(Network Security Group)에 따른 In/Out Bound 정책을 제어하고자 하는 목적이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #000000; text-align: start;&quot;&gt;현재 구성에 대한 세부 사항은 아래 접은글을 참고해주세요!&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용된 리눅스 계열(정보) 참조&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Ubuntu 22.04&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Rocky 8&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- RHEL 8.7&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;Peering 연결 설정 그리고 간단한 통신 테스트 내용 참조&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VNET Peering&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Peering 대상&amp;nbsp; : tak-PG-vnet (172.168.10.0/24) - tak-prometheus-vnet(10.0.30.0/24)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 대상 VNET 선택 &amp;gt; 설정 &amp;gt; [피어링] 추가&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2080&quot; data-origin-height=&quot;805&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEzjcM/btsERxdkbKy/RvEdkEFWRcUnMpVtSVAL2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEzjcM/btsERxdkbKy/RvEdkEFWRcUnMpVtSVAL2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEzjcM/btsERxdkbKy/RvEdkEFWRcUnMpVtSVAL2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEzjcM%2FbtsERxdkbKy%2FRvEdkEFWRcUnMpVtSVAL2k%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;2080&quot; height=&quot;805&quot; data-origin-width=&quot;2080&quot; data-origin-height=&quot;805&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/S3MDt/btsEKGQatXf/1r1WKBGaE1lSuQJKLAHyd1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;1512&quot; data-origin-width=&quot;1400&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연결 및 통신 확인
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Target VM 중 Ubuntu VM 정상 연결 확인(Ping, Telnet)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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/cw90cw/btsEP6m1bfM/3MZbdZuk9m38S7kEvE0t0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cw90cw/btsEP6m1bfM/3MZbdZuk9m38S7kEvE0t0k/img.png&quot; data-widthpercent=&quot;49.51&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;393&quot; data-origin-width=&quot;1270&quot; style=&quot;width: 48.9072%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cw90cw/btsEP6m1bfM/3MZbdZuk9m38S7kEvE0t0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcw90cw%2FbtsEP6m1bfM%2F3MZbdZuk9m38S7kEvE0t0k%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;1270&quot; height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zlTIZ/btsEQQqH6Ad/kEV6NmD6QLwMkNCXVaEIsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zlTIZ/btsEQQqH6Ad/kEV6NmD6QLwMkNCXVaEIsK/img.png&quot; style=&quot;width: 49.8703%;&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;437&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.49&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zlTIZ/btsEQQqH6Ad/kEV6NmD6QLwMkNCXVaEIsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzlTIZ%2FbtsEQQqH6Ad%2FkEV6NmD6QLwMkNCXVaEIsK%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;1440&quot; height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;&lt;span style=&quot;color: #000000;&quot;&gt;1-3. Prometheus Server 설치&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅에서는 Binary 설치 방식을 사용하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Docker 를 통한 설치는 추후 Kubernetes 환경에서 모니터링 포스팅에서 다룰 예정이랍니다!)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-3-1. 설치를 위한 기본 설정&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Package Update&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1707900448090&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus 시스템 그룹 및 사용자 할당&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1707900491274&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus 용 디렉터리 생성 및 권한 설정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1707900523930&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus

sudo chown -R prometheus:prometheus /var/lib/prometheus&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-3-2. 설치를 위한 Binary 파일 구성&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 링크에서 원하는 버전 선택하여 진행&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 글은 최신 버전으로 구성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1707900624790&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download | Prometheus&quot; data-og-description=&quot;An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.&quot; data-og-host=&quot;prometheus.io&quot; data-og-source-url=&quot;https://prometheus.io/download/#prometheus&quot; data-og-url=&quot;https://prometheus.io/download/#prometheus&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DX5mw/hyVjlOw6xM/CBTmJk3XTr6jlq0WdRxxd1/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192&quot;&gt;&lt;a href=&quot;https://prometheus.io/download/#prometheus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://prometheus.io/download/#prometheus&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DX5mw/hyVjlOw6xM/CBTmJk3XTr6jlq0WdRxxd1/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192');&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;Download | Prometheus&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;prometheus.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1707900676811&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://github.com/prometheus/prometheus/releases/download/v2.43.0/prometheus-2.43.0.linux-amd64.tar.gz&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;압축 풀고, 디렉터리 이동&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;tar vxf prometheus*.tar.gz

cd prometheus*/
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;1340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1mFoi/btsERAnE4ch/DEVyvb6nU3teCOR7lLC1o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1mFoi/btsERAnE4ch/DEVyvb6nU3teCOR7lLC1o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1mFoi/btsERAnE4ch/DEVyvb6nU3teCOR7lLC1o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1mFoi%2FbtsERAnE4ch%2FDEVyvb6nU3teCOR7lLC1o1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1452&quot; height=&quot;1340&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;1340&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Binary 파일 (로컬)이동 및 소유자 설정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;sudo mv prometheus /usr/local/bin
sudo mv promtool /usr/local/bin
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
&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;1787&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D2BbP/btsEOUNYefv/n4U6dNyzVb8lSdy1BhtZxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D2BbP/btsEOUNYefv/n4U6dNyzVb8lSdy1BhtZxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D2BbP/btsEOUNYefv/n4U6dNyzVb8lSdy1BhtZxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD2BbP%2FbtsEOUNYefv%2Fn4U6dNyzVb8lSdy1BhtZxk%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;1787&quot; height=&quot;355&quot; data-origin-width=&quot;1787&quot; data-origin-height=&quot;355&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성 파일 이동 및 소유자 변경&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;sudo mv consoles /etc/prometheus
sudo mv console_libraries /etc/prometheus
sudo mv prometheus.yml /etc/prometheus
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;sudo chown prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
sudo chown -R prometheus:prometheus /var/lib/prometheus
&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;1835&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ssbbr/btsEQSPBRyp/9iAEBBcU4btzB69FAlkz3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ssbbr/btsEQSPBRyp/9iAEBBcU4btzB69FAlkz3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ssbbr/btsEQSPBRyp/9iAEBBcU4btzB69FAlkz3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fssbbr%2FbtsEQSPBRyp%2F9iAEBBcU4btzB69FAlkz3k%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;1835&quot; height=&quot;402&quot; data-origin-width=&quot;1835&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus Config 파일 수정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금 단계에서는 변경 사항없이 Default 값에 대한 정보만 확인합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;sudo nano /etc/prometheus/prometheus.yml
&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;2185&quot; data-origin-height=&quot;1264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cj47xL/btsEP9YoagX/jxHItKdvH84lMg4sGYKyb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cj47xL/btsEP9YoagX/jxHItKdvH84lMg4sGYKyb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cj47xL/btsEP9YoagX/jxHItKdvH84lMg4sGYKyb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcj47xL%2FbtsEP9YoagX%2FjxHItKdvH84lMg4sGYKyb0%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;2185&quot; height=&quot;1264&quot; data-origin-width=&quot;2185&quot; data-origin-height=&quot;1264&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Prometheus Systemd Service 만들기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sudo nano /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \\
    --config.file /etc/prometheus/prometheus.yml \\
    --storage.tsdb.path /var/lib/prometheus/ \\
    --web.console.templates=/etc/prometheus/consoles \\
    --web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target
&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;2290&quot; data-origin-height=&quot;785&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2O7eK/btsETTUfcMR/Bo23uWWozm5Vl1znsVE4Yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2O7eK/btsETTUfcMR/Bo23uWWozm5Vl1znsVE4Yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2O7eK/btsETTUfcMR/Bo23uWWozm5Vl1znsVE4Yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2O7eK%2FbtsETTUfcMR%2FBo23uWWozm5Vl1znsVE4Yk%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;2290&quot; height=&quot;785&quot; data-origin-width=&quot;2290&quot; data-origin-height=&quot;785&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성 사항 반영을 위해 Reload Systemd&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload&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;1-4. Prometheus Serivce 시작&lt;/h2&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;sudo systemctl enable prometheus
sudo systemctl start prometheus
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;sudo systemctl status prometheus
&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;2324&quot; data-origin-height=&quot;1008&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TOovg/btsEP3jK4ro/SDpoZv70hUTDl4EdWSBha0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TOovg/btsEP3jK4ro/SDpoZv70hUTDl4EdWSBha0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TOovg/btsEP3jK4ro/SDpoZv70hUTDl4EdWSBha0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTOovg%2FbtsEP3jK4ro%2FSDpoZv70hUTDl4EdWSBha0%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;2324&quot; height=&quot;1008&quot; data-origin-width=&quot;2324&quot; data-origin-height=&quot;1008&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;방화벽 허용(Azure NSG 허용 정책)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure의 VM의 경우, 방화벽 설정이 Default 값으로 Inactive(비활성화) 입니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 해당 과정에서는 NSG 정책으로 In/Out Bound 제어 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- InBound 정책 추가 : Default Port 9090&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2816&quot; data-origin-height=&quot;1139&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7HZ02/btsEVeKCmPy/xIsFKHv77kS7cPzH3NC4mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7HZ02/btsEVeKCmPy/xIsFKHv77kS7cPzH3NC4mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7HZ02/btsEVeKCmPy/xIsFKHv77kS7cPzH3NC4mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7HZ02%2FbtsEVeKCmPy%2FxIsFKHv77kS7cPzH3NC4mk%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;2816&quot; height=&quot;1139&quot; data-origin-width=&quot;2816&quot; data-origin-height=&quot;1139&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Prometheus 정상 액세스 확인&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;2870&quot; data-origin-height=&quot;1488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcNCdc/btsEPKku4Uo/AAcXuIvghsbEiS6vkku341/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcNCdc/btsEPKku4Uo/AAcXuIvghsbEiS6vkku341/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcNCdc/btsEPKku4Uo/AAcXuIvghsbEiS6vkku341/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcNCdc%2FbtsEPKku4Uo%2FAAcXuIvghsbEiS6vkku341%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;2870&quot; height=&quot;1488&quot; data-origin-width=&quot;2870&quot; data-origin-height=&quot;1488&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;span style=&quot;color: #000000;&quot;&gt;1-5. Target VM &amp;lt; Node Exporter 설치&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제는 Prometheus Server에서 Pull 방식으로 Scraping 할 수집 대상(Target) VM에 Node Exporter 설치 과정을 진행하겠습니다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Node Exporter을 통해서 각기 다른 Linux 계열 서버들을 대상으로 메트릭을 수집합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 시스템 서비스로 실행되며, 구성을 위한 전체적인 단계는 동일합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 이러한 공통 사항 반영하여 모든 VM에서 실행할 수 있도록 Shell Scripts 방식으로 배포하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(일부 명령어 사용에 있어 Linux 계열에 따라 구성에 달라질 수 있습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-5-1. (공통) Shell Scripts&lt;/h3&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;vi node-exporter-install.sh

# System User생성
sudo useradd -rs /sbin/nologin node_exporter

# Node Exporter Binary Install
wget &amp;lt;https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz&amp;gt;
tar -xvf node_exporter-1.7.0.linux-amd64.tar.gz

sudo mv node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/

# Systmed Service 생성
sudo tee &amp;lt;/dev/null /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
StartLimitIntervalSec=500
StartLimitBurst=5
[Service]
User=node_exporter
Group=node_exporter
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/bin/sh -c '/usr/local/bin/node_exporter' \
    --collector.logind
[Install]
WantedBy=multi-user.target
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 디렉터리 권한 변경
chmod 775 /root/node-exporter-install.sh

# 스크립트 실행
/root/node-exporter-install.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*Rocky의 경우, 파일 다운로드를 위해 wget 설치 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d; font-family: GungSeo, serif;&quot;&gt;(얘가 손이 많이 가서... ExecStart 값에서 다른 Linux는 실행 파일의 Path만 입력하면 됐는데.. 굳이 실행 명령어까지 필요한 너...)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707975580714&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install wget&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;*RHEL경우, 7버전 이후부터는 firewalld 가 기본 방화벽 관리 도구로 사용되므로, Node Exporter의 Port(9100)를 추가&lt;/p&gt;
&lt;pre id=&quot;code_1707983096596&quot; class=&quot;1c&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 9100 리스닝 확인
netstat -nlp | greo 9100&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;1592&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/12WSI/btsESnCtwXu/6dr4pMUE4bAlOQkf34cRGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/12WSI/btsESnCtwXu/6dr4pMUE4bAlOQkf34cRGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/12WSI/btsESnCtwXu/6dr4pMUE4bAlOQkf34cRGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F12WSI%2FbtsESnCtwXu%2F6dr4pMUE4bAlOQkf34cRGk%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;1592&quot; height=&quot;73&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;73&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1707983170608&quot; class=&quot;dockerfile&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 방화벽 상태 확인
sudo firewall-cmd --state

# 방화벽 현재 구성 확인
sudo firewall-cmd --list-all&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1707982977508&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 방화벽 정책 추가
sudo firewall-cmd --add-port=9100/tcp --permanent

firewall-cmd --reload&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;1241&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brkP38/btsETlKS2yx/vk5j1KaGXAt7EbbS19GIm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brkP38/btsETlKS2yx/vk5j1KaGXAt7EbbS19GIm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brkP38/btsETlKS2yx/vk5j1KaGXAt7EbbS19GIm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrkP38%2FbtsETlKS2yx%2Fvk5j1KaGXAt7EbbS19GIm0%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;1241&quot; height=&quot;70&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;70&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-5-2. Systemd Serivce 확인&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 단계의 스크립트 실행 후, 진행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1707975222244&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload

sudo systemctl enable node_exporter
sudo systemctl start node_exporter

# activce 상태 확인
sudo systemctl status node_exporter&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래와 같이 Active 상태인 것을 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2298&quot; data-origin-height=&quot;599&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdEGXc/btsERnJogOi/A1SWUVUtfKRQbxwsuZkA31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdEGXc/btsERnJogOi/A1SWUVUtfKRQbxwsuZkA31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdEGXc/btsERnJogOi/A1SWUVUtfKRQbxwsuZkA31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdEGXc%2FbtsERnJogOi%2FA1SWUVUtfKRQbxwsuZkA31%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;2298&quot; height=&quot;599&quot; data-origin-width=&quot;2298&quot; data-origin-height=&quot;599&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로세스(Daemon) 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mim0J/btsESpNH9G5/oiOYeFuS0knOguAtQHVUe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mim0J/btsESpNH9G5/oiOYeFuS0knOguAtQHVUe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mim0J/btsESpNH9G5/oiOYeFuS0knOguAtQHVUe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmim0J%2FbtsESpNH9G5%2FoiOYeFuS0knOguAtQHVUe1%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;1322&quot; height=&quot;76&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-6. Prometheus Server에서 Target 정보(Node Exporter) 추가&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 단계에서는 위 Prometheus Server 설치 단계에서 확인한 Config 파일에 아래와 같이 해당 내용을 반영합니다.&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;span style=&quot;color: #000000;&quot;&gt;Prometheus Config 파일 수정&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;scrape_configs &amp;gt; job_name &amp;gt; static_configs &amp;gt; targets&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot;&gt;&lt;code&gt;sudo nano /etc/prometheus/prometheus.yml
&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;2005&quot; data-origin-height=&quot;1165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YKUrP/btsETkSFi32/okGEc3rTH7eFOh6Gk2o2vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YKUrP/btsETkSFi32/okGEc3rTH7eFOh6Gk2o2vK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YKUrP/btsETkSFi32/okGEc3rTH7eFOh6Gk2o2vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYKUrP%2FbtsETkSFi32%2FokGEc3rTH7eFOh6Gk2o2vK%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;2005&quot; height=&quot;1165&quot; data-origin-width=&quot;2005&quot; data-origin-height=&quot;1165&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스 재시작하여 변경값 적용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1707981899569&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart prometheus&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스 상태 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2352&quot; data-origin-height=&quot;681&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I44wv/btsES2dGz9b/xVltAkJy3dmqMXSlz0c9KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I44wv/btsES2dGz9b/xVltAkJy3dmqMXSlz0c9KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I44wv/btsES2dGz9b/xVltAkJy3dmqMXSlz0c9KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI44wv%2FbtsES2dGz9b%2FxVltAkJy3dmqMXSlz0c9KK%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;2352&quot; height=&quot;681&quot; data-origin-width=&quot;2352&quot; data-origin-height=&quot;681&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;span style=&quot;color: #000000;&quot;&gt;1-7. Prometheus Server Target 구성 확인&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제 마지막으로 Prometheus Server에 들어가서 지금까지의 구성이 정상적으로 적용되었는지를 확인해 보겠습니다.&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;span style=&quot;color: #000000;&quot;&gt;Target 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2865&quot; data-origin-height=&quot;1113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbnLmR/btsEVc03q3P/cxrCb9OxKUhKhEPtxEqNl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbnLmR/btsEVc03q3P/cxrCb9OxKUhKhEPtxEqNl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbnLmR/btsEVc03q3P/cxrCb9OxKUhKhEPtxEqNl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbnLmR%2FbtsEVc03q3P%2FcxrCb9OxKUhKhEPtxEqNl0%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;2865&quot; height=&quot;1113&quot; data-origin-width=&quot;2865&quot; data-origin-height=&quot;1113&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;2875&quot; data-origin-height=&quot;1180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lcMfa/btsEV93OnDG/B3oxKKc8zIkO9UgPbUo2F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lcMfa/btsEV93OnDG/B3oxKKc8zIkO9UgPbUo2F0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lcMfa/btsEV93OnDG/B3oxKKc8zIkO9UgPbUo2F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlcMfa%2FbtsEV93OnDG%2FB3oxKKc8zIkO9UgPbUo2F0%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;2875&quot; height=&quot;1180&quot; data-origin-width=&quot;2875&quot; data-origin-height=&quot;1180&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쿼리(PromQL) 테스트&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(예시) 운영체제 확인&lt;/span&gt;
&lt;pre id=&quot;code_1707984066635&quot; class=&quot;nginx&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;node_os_info​&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/p6al1/btsESJevtiP/kmcOSRoCbqVLUth3XiDKq0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;768&quot; data-origin-width=&quot;2850&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(예시) CPU 확인&lt;/span&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1707984233293&quot; class=&quot;basic&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&quot;idle&quot;}[5m])) * 100)​&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/w74QJ/btsEQSQASaF/ZtQgzs56UcKw3KPbFSaoBK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;1595&quot; data-origin-width=&quot;2825&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이상으로 &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;Prometheus(+ Node Exporter, AlertManager) + Grafana&lt;/span&gt; 구성하기 &lt;/b&gt;중&lt;b&gt; &quot;1부 : &lt;b&gt;개념과 테스트 환경의 설명, Prometheus 및 Node Exporter 설치와 구성&quot; 마치겠습니다.&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조만간&lt;b&gt;&lt;b&gt; &quot;2부 : &lt;b&gt;AlertManager 를 통한 알림 서비스 연동 그리고 Grafana 대시보드화 구성&lt;/b&gt;&quot; &lt;/b&gt;&lt;/b&gt;로 돌아오겠습니다.&lt;span style=&quot;color: #9d9d9d; text-align: start;&quot;&gt;(!많관부!) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Data</category>
      <category>Azure</category>
      <category>cloud</category>
      <category>grafana</category>
      <category>NodeExporter</category>
      <category>Prometheus</category>
      <category>경고알림(AlertManager)</category>
      <category>대시보드</category>
      <category>모니터링</category>
      <category>시각화</category>
      <category>프로메테우스</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/22</guid>
      <comments>https://with-cloud.tistory.com/22#entry22comment</comments>
      <pubDate>Thu, 15 Feb 2024 17:16:36 +0900</pubDate>
    </item>
    <item>
      <title>Jenkins, ArgoCD로 CI/CD Pipeline 구성하기 (3)</title>
      <link>https://with-cloud.tistory.com/21</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지난 글에서는 Jenkins에서 Jenkinsfile을 사용하여 Job을 구성하는 과정에 대해 알아보았는데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지난 글 바로 가기 :&lt;/span&gt; &lt;a href=&quot;https://with-cloud.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/20&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1707103630071&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;Jenkins, ArgoCD로 CI/CD Pipeline 구성하기 (2)&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 지난 글에서는 CI/CD Pipeline에 대한 전체 Flow와 Pipeline을 구성하기 전에 필요한 설정들에 대해 다뤄보았습니다. 지난 글 바로 가기 : https://with-cloud.tistory.com/19. Jenkins, ArgoCD&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/20&quot; data-og-url=&quot;https://with-cloud.tistory.com/20&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RAulB/hyVgcwSxRv/NebbKCgayraetCubV8Fkk0/img.png?width=800&amp;amp;height=572&amp;amp;face=0_0_800_572,https://scrap.kakaocdn.net/dn/r9YhV/hyVfZxvXIJ/DIDkUTpKMA8tc5Aalhhu6k/img.png?width=800&amp;amp;height=572&amp;amp;face=0_0_800_572,https://scrap.kakaocdn.net/dn/eENEq/hyVf1IS2LO/sujAMruLTkIRCkuffIgpRK/img.png?width=2141&amp;amp;height=1197&amp;amp;face=0_0_2141_1197&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/20&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RAulB/hyVgcwSxRv/NebbKCgayraetCubV8Fkk0/img.png?width=800&amp;amp;height=572&amp;amp;face=0_0_800_572,https://scrap.kakaocdn.net/dn/r9YhV/hyVfZxvXIJ/DIDkUTpKMA8tc5Aalhhu6k/img.png?width=800&amp;amp;height=572&amp;amp;face=0_0_800_572,https://scrap.kakaocdn.net/dn/eENEq/hyVf1IS2LO/sujAMruLTkIRCkuffIgpRK/img.png?width=2141&amp;amp;height=1197&amp;amp;face=0_0_2141_1197');&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;Jenkins, ArgoCD로 CI/CD Pipeline 구성하기 (2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 지난 글에서는 CI/CD Pipeline에 대한 전체 Flow와 Pipeline을 구성하기 전에 필요한 설정들에 대해 다뤄보았습니다. 지난 글 바로 가기 : https://with-cloud.tistory.com/19. Jenkins, ArgoCD&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 글에서는 CI/CD Pipeline 구성의 마지막 부분인 Github와 ArgoCD 간 연결, 그리고 전체 CI/CD Pipeline을 자동화 하는 부분에 대해 다뤄보겠습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&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;※ Jenkins와 ArgoCD&amp;nbsp;등 CI/CD Pipeline 구성에 필요한 모든 리소스는 사전에 배포해 두었습니다.※ &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;6. GitHub와 ArgoCD 연결&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; 두 번째 Job에 의해 Github Repository의 deploy.yaml이 업데이트 되면 해당 Repository를 주기적으로 체크하는 ArgoCD에 의해 해당 변경 사항이 감지되도록 GitHub와 ArgoCD를 연결해 보도록 하겠습니다.&amp;nbsp; &lt;/span&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;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;6.1 ArgoCD에 GitHub Repository 등록&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;ArgoCD 로그인 &amp;gt; 좌측 상단의 [Settings] 탭 &amp;gt; [Repositories]&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdwFFn/btsEttBz9ax/nDs0mvH4X1dFBEy9AMZ32K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdwFFn/btsEttBz9ax/nDs0mvH4X1dFBEy9AMZ32K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdwFFn/btsEttBz9ax/nDs0mvH4X1dFBEy9AMZ32K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdwFFn%2FbtsEttBz9ax%2FnDs0mvH4X1dFBEy9AMZ32K%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;652&quot; height=&quot;242&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;470&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[+ Content Repo] 버튼을 클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;388&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDQoRb/btsEmVsSp6j/dFhtKfwLZ1cEKx0VF4vbq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDQoRb/btsEmVsSp6j/dFhtKfwLZ1cEKx0VF4vbq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDQoRb/btsEmVsSp6j/dFhtKfwLZ1cEKx0VF4vbq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDQoRb%2FbtsEmVsSp6j%2FdFhtKfwLZ1cEKx0VF4vbq1%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;667&quot; height=&quot;303&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;388&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Connection을 위한 세부 정보를 입력합니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTPS를 사용하여 연결하기 위해 [VIA HTTPS] 옵션을 선택합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Repository URL을 입력합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Username에는 Github의 User 명을 입력하고 Password에는 발급해 놓은 PAT를 입력합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상단의 [Connect] 버튼을 클릭하여 연결을 완료합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;1089&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m7TGN/btsEm6OwcRt/UOOdWxHdp3V1u8fwIb6zLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m7TGN/btsEm6OwcRt/UOOdWxHdp3V1u8fwIb6zLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m7TGN/btsEm6OwcRt/UOOdWxHdp3V1u8fwIb6zLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm7TGN%2FbtsEm6OwcRt%2FUOOdWxHdp3V1u8fwIb6zLK%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;670&quot; height=&quot;647&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;1089&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연결 상태를 확인한 결과 Successful이 뜨는 것을 알 수 있습니다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxaX9a/btsEqXwdM1m/dAAfxaVQTAAVzfrf1rcvvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxaX9a/btsEqXwdM1m/dAAfxaVQTAAVzfrf1rcvvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxaX9a/btsEqXwdM1m/dAAfxaVQTAAVzfrf1rcvvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxaX9a%2FbtsEqXwdM1m%2FdAAfxaVQTAAVzfrf1rcvvK%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;773&quot; height=&quot;133&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;325&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;&lt;span style=&quot;color: #000000;&quot;&gt;6.2 ArgoCD에서 Application 생성&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; 6.1에서 연결한 Repository에 대한 정보를 확인할 수 있는 페이지에서 우측의 점 세 개를 클릭한 후, [Create application]을 선택하여 Application을 생성할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[General] 탭&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; Sync Policy를 설정합니다. (현재는 테스트를 위해 Manual로 구성하였으나 뒤에서 Automatic으로 변경할 예정입니다.) &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1597&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwS5Q9/btsEop06TVL/iTcITUStX5CEL40T2el8vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwS5Q9/btsEop06TVL/iTcITUStX5CEL40T2el8vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwS5Q9/btsEop06TVL/iTcITUStX5CEL40T2el8vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwS5Q9%2FbtsEop06TVL%2FiTcITUStX5CEL40T2el8vk%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;732&quot; height=&quot;229&quot; data-origin-width=&quot;1597&quot; data-origin-height=&quot;499&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Source] 탭&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub Repository에 대해 설정합니다.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Repository URL을 입력합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Path : 해당 Repository에서 manifest file이 위치하고 있는 경로를 입력합니다. (가장 상위일 경우 &lt;b&gt;.&lt;/b&gt;를 입력합니다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1593&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZI53A/btsEtr4RiCK/xkEYDZjVtuG57zPl0hPxy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZI53A/btsEtr4RiCK/xkEYDZjVtuG57zPl0hPxy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZI53A/btsEtr4RiCK/xkEYDZjVtuG57zPl0hPxy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZI53A%2FbtsEtr4RiCK%2FxkEYDZjVtuG57zPl0hPxy1%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;740&quot; height=&quot;235&quot; data-origin-width=&quot;1593&quot; data-origin-height=&quot;505&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Destination] 탭&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Kubernetes Service(AKS) 내 Application이 배포될 위치에 대해 설정합니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Namespace : Application이 배포될 namespace를 입력합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UpIjs/btsEkBVZaq6/1fM9FdhvDPhkGUXkoAUIS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UpIjs/btsEkBVZaq6/1fM9FdhvDPhkGUXkoAUIS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UpIjs/btsEkBVZaq6/1fM9FdhvDPhkGUXkoAUIS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUpIjs%2FbtsEkBVZaq6%2F1fM9FdhvDPhkGUXkoAUIS1%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;750&quot; height=&quot;178&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상단의 [Create] 버튼을 클릭하여 Application 생성을 완료합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;7. ArgoCD와 Azure Kubernetes Service(AKS) Sync&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; ArgoCD는 연결된 AKS 내 Deployment의 현재 상태와 Github Repository의 deploy.yaml의 상태를 확인하고 Sync하는 작업을 수행합니다.&amp;nbsp;&lt;/span&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;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;7.1 생성된 Application 확인 &lt;/span&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;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; [Applications] 탭에서 생성된 Application을 확인할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;Status 부분을 보면 해당 Application의 상태가 &lt;/span&gt;&lt;i&gt;&lt;b&gt;OutOfSync&lt;/b&gt; &lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;임을 알 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;702&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQxGSQ/btsEmMboAuI/v1mt3aafVZjQlkkuc1WnnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQxGSQ/btsEmMboAuI/v1mt3aafVZjQlkkuc1WnnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQxGSQ/btsEmMboAuI/v1mt3aafVZjQlkkuc1WnnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQxGSQ%2FbtsEmMboAuI%2Fv1mt3aafVZjQlkkuc1WnnK%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;642&quot; height=&quot;474&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;702&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성된 Application을 클릭한 후 Out of Sync가 떠 있는 Deployment를 클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1981&quot; data-origin-height=&quot;1170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY7F3m/btsEop08Boc/wL1vok7Rgse9LDnkgDOHj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY7F3m/btsEop08Boc/wL1vok7Rgse9LDnkgDOHj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY7F3m/btsEop08Boc/wL1vok7Rgse9LDnkgDOHj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY7F3m%2FbtsEop08Boc%2FwL1vok7Rgse9LDnkgDOHj0%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;1981&quot; height=&quot;1170&quot; data-origin-width=&quot;1981&quot; data-origin-height=&quot;1170&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세부 정보 창 하단의 [DIFF] 탭을 클릭하여 Out of Sync인 부분을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 AKS 상에 배포된 Deployment가 바라보는 Image의 tag와 Github 상에 업데이트된 deploy.yaml file에 정의된 Image의 tag가 일치하지 않기 때문임을 알 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1674&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UTODM/btsElj8Ey5o/6fKDBo2Z2in9K3jmyPZvt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UTODM/btsElj8Ey5o/6fKDBo2Z2in9K3jmyPZvt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UTODM/btsElj8Ey5o/6fKDBo2Z2in9K3jmyPZvt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUTODM%2FbtsElj8Ey5o%2F6fKDBo2Z2in9K3jmyPZvt0%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;1674&quot; height=&quot;1280&quot; data-origin-width=&quot;1674&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 Web Page는 하기와 같습니다.  &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;799&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tM7DH/btsElKesgar/aO86Zh7P5HzNkDNHmC41yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tM7DH/btsElKesgar/aO86Zh7P5HzNkDNHmC41yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tM7DH/btsElKesgar/aO86Zh7P5HzNkDNHmC41yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtM7DH%2FbtsElKesgar%2FaO86Zh7P5HzNkDNHmC41yk%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;1912&quot; height=&quot;799&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;799&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상단의 Sync 버튼을 클릭하여 Sync를 수행합니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Out of Sync 상태인 모든 Object에 대해 Synchronize를 수행합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;894&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x9F4z/btsEndmhneE/rVZIqpraKt2tJqL5sfp0B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x9F4z/btsEndmhneE/rVZIqpraKt2tJqL5sfp0B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x9F4z/btsEndmhneE/rVZIqpraKt2tJqL5sfp0B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx9F4z%2FbtsEndmhneE%2FrVZIqpraKt2tJqL5sfp0B0%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;1714&quot; height=&quot;894&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;894&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Sync 수행 시 ArgoCD에서 GUI를 통해 Sync가 진행되는 과정을 확인할 수 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1761&quot; data-origin-height=&quot;875&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tT9ha/btsEqut2zOQ/dEuCBvokIFbv6SgiySYlq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tT9ha/btsEqut2zOQ/dEuCBvokIFbv6SgiySYlq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tT9ha/btsEqut2zOQ/dEuCBvokIFbv6SgiySYlq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtT9ha%2FbtsEqut2zOQ%2FdEuCBvokIFbv6SgiySYlq1%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;1761&quot; height=&quot;875&quot; data-origin-width=&quot;1761&quot; data-origin-height=&quot;875&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;&lt;b&gt;kubectl get po&lt;/b&gt;&lt;/i&gt; 명령어를 사용하여 Sync가 진행되는 과정을 확인할 수 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HvXdp/btsEnZBjV2k/0js8ULUpEUV7kQKbrpOs8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HvXdp/btsEnZBjV2k/0js8ULUpEUV7kQKbrpOs8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HvXdp/btsEnZBjV2k/0js8ULUpEUV7kQKbrpOs8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHvXdp%2FbtsEnZBjV2k%2F0js8ULUpEUV7kQKbrpOs8k%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;144&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;184&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변경 사항이 적용된 Web Page는 하기와 같습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1876&quot; data-origin-height=&quot;781&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvTQES/btsEqXwiaF2/sXGV0YKP6TOjibZmmZWTz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvTQES/btsEqXwiaF2/sXGV0YKP6TOjibZmmZWTz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvTQES/btsEqXwiaF2/sXGV0YKP6TOjibZmmZWTz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvTQES%2FbtsEqXwiaF2%2FsXGV0YKP6TOjibZmmZWTz1%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;764&quot; height=&quot;318&quot; data-origin-width=&quot;1876&quot; data-origin-height=&quot;781&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;8. 전체 CI/CD Pipeline 자동화&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;지금까지는 Jenkins에서의 Job들도, GitHub에 변경 사항이 생겼을 때 ArgoCD가 Sync를 하는 것도 모두 따로따로 진행되도록 구성을 하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;테스트를 할 때 불필요하게 모든 과정이 반복되는 것을 막기 위함이었는데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;각각의 단계에 대해 테스트를 성공적으로 마무리 하였기 때문에 마지막으로 전체 CI/CD Pipeline을 자동화 해 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;그 전에 간단하게 전체 CI/CD Pipeline에 대해 Flow를 정리해 보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; &lt;span style=&quot;text-align: start;&quot;&gt;1️⃣&lt;/span&gt; 첫 번째 GitHub Repository, 즉, Web Page를 위한 image에 대한 코드가 존재하는 Repository에 변경 사항이 발생할 경우 첫 번째 Jenkins Job에 의해 변경 사항이 반영된 새로운 이미지가 build되고 ACR로 push됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;2️⃣ 첫 번째 Jenkins Job의 마지막 stage에서 두 번째 Jenkins Job을 트리거합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;3️⃣ 두 번째 Jenkins Job은 변경 사항이 적용된 이미지를 두 번째 GitHub Repository, 즉, manifest file이 업로드 되어 있는Repository에 대해 이미지 버전을 변경합니다. (deploy.yaml file의 이미지 버전을 변경)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;4️⃣ 두 번째 GitHub Repository를 바라보고 있는 ArgoCD는 이러한 변경 사항을 감지한 후 자동으로 GitHub Repository에 정의된 deploy.yaml file과 실제로 AKS 내에 배포되어 있는 Deployment Object 간 Sync를 수행합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 두 번째 step과 네 번째 step에 대해 추가적인 구성이 필요해집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성은 어렵지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 첫 번째 Job과 두 번째 Job을 연결해 보도록 하겠습니다.&amp;nbsp;&lt;/span&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;&lt;span style=&quot;color: #000000;&quot;&gt;8.1 첫 번째 Job 완료 후 두 번째 Job을 Trigger하도록 구성&amp;nbsp;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;첫 번째 Job의 Jenkinsfile에 Stage를 추가해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1707106490010&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any

    environment {
        BUILD_NUMBER = &quot;v6&quot;
        WEB_IMAGE_NAME = &quot;${ACR_LOGINSERVER}/{respository 명}:${BUILD_NUMBER}&quot;
    }

    stages {        
        stage('Login to ACR') {
            steps {
                script {
                    sh &quot;az login -i&quot;
                    echo &quot;Login to Azure Success&quot;
                    sh &quot;az acr login --name ${ACR_LOGINSERVER}&quot;
                    echo &quot;Login to Azure Container Registry Success&quot;
                }
            }
        }
        
        stage('Build Docker Image') {
            steps {
                script {
                    echo &quot;Start to Build the Image&quot;
                    sh &quot;docker build -t ${ACR_LOGINSERVER}/sundls:${BUILD_NUMBER} .&quot;
                    echo &quot;Build Success&quot;
                }
            }
        }

        stage('Push Image to ACR') {
            steps {
                script {
                    // Docker 이미지를 ACR에 푸시
                    echo &quot;Push to ACR&quot;
                    sh &quot;docker push ${ACR_LOGINSERVER}/{respository 명}:${BUILD_NUMBER}&quot;
                    echo &quot;Push Success&quot;
                }
            }
        }
	stage('Trigger 2nd Job') {
            steps {
                echo 'Trigger 2nd Job...'
                build job: 'pipeline-for-manifest', wait: true
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;'Trigger 2nd Job'&lt;/b&gt; &lt;/i&gt;stage를 제외한 stage들과&lt;i&gt;&lt;b&gt; environment&lt;/b&gt; &lt;/i&gt;block은 이전 글에서 설명하였으므로 추가적으로 설명하지는 않겠습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;'Tigger 2nd Job'&lt;/b&gt;&lt;/i&gt; stage&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 stage에서는 다음 Job을 명시해 주기만 하면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;build job:&lt;/i&gt; 이라는 항목에 대해 두 번째 Job의 project 이름만 기입해 주면 됩니다 .&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위와 같이 기존 Jenkinsfile에 stage 하나만 더 추가하면 두 Job을 연결할 수가 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단, Jenkinsfile을 업데이트 해도 GitHub Repository에서는 이를 Jenkins로 Trigger하기 때문에 이 점 참고하시어 CI를 수행하시길 바랍니다.&amp;nbsp;&lt;/span&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;&lt;span style=&quot;color: #000000;&quot;&gt;8.2 이미지 관련 코드 수정 후 Git push를 통해 첫 번째 Job Trigger&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 Job을 연결하였으니 이번에는 이미지 관련 코드를 수정할 때 자동으로 deply.yaml file까지 변경되는지 확인해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 코드를 수정한 후 &lt;i&gt;git push&lt;/i&gt; 명령어를 통해 GitHub Repository를 업데이트합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1422&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddOSW2/btsEuPYNfli/CRa9XVaKSIWlLl2hXszeeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddOSW2/btsEuPYNfli/CRa9XVaKSIWlLl2hXszeeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddOSW2/btsEuPYNfli/CRa9XVaKSIWlLl2hXszeeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddOSW2%2FbtsEuPYNfli%2FCRa9XVaKSIWlLl2hXszeeK%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;818&quot; height=&quot;270&quot; data-origin-width=&quot;1422&quot; data-origin-height=&quot;470&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub Update가 완료되면 첫 번째 Job이 자동으로 trigger되고 첫 번째 Job의 마지막 stage에서 두 번째 Job이 자동으로 trigger 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2138&quot; data-origin-height=&quot;1273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6a5kq/btsEtutRw3T/Xvd9V5Q0pPPzymom1K0bb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6a5kq/btsEtutRw3T/Xvd9V5Q0pPPzymom1K0bb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6a5kq/btsEtutRw3T/Xvd9V5Q0pPPzymom1K0bb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6a5kq%2FbtsEtutRw3T%2FXvd9V5Q0pPPzymom1K0bb0%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;789&quot; height=&quot;470&quot; data-origin-width=&quot;2138&quot; data-origin-height=&quot;1273&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 번째 Jenkins Project를 클릭하면 별도의 사용자 개입 없이 두 번째 Job이 자동으로 trigger 되는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1722&quot; data-origin-height=&quot;1119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mI7JP/btsEpm4fMar/BwG8EZ5UToAoq6lmWgGkk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mI7JP/btsEpm4fMar/BwG8EZ5UToAoq6lmWgGkk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mI7JP/btsEpm4fMar/BwG8EZ5UToAoq6lmWgGkk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmI7JP%2FbtsEpm4fMar%2FBwG8EZ5UToAoq6lmWgGkk0%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;768&quot; height=&quot;499&quot; data-origin-width=&quot;1722&quot; data-origin-height=&quot;1119&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와! 성공적으로 연결된 것을 확인할 수가 있습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음은 ArgoCD로 가보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재는 ArgoCD의 Sync Policy가 manual이기 때문에 자동으로 Kubernetes에 배포된 Deployment의 Image의 tag가 v6에서 v7로 변경되지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2086&quot; data-origin-height=&quot;1004&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4oZ7F/btsEmQZflft/sMP3obnXhGbdVSMfXt05y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4oZ7F/btsEmQZflft/sMP3obnXhGbdVSMfXt05y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4oZ7F/btsEmQZflft/sMP3obnXhGbdVSMfXt05y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4oZ7F%2FbtsEmQZflft%2FsMP3obnXhGbdVSMfXt05y1%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;2086&quot; height=&quot;1004&quot; data-origin-width=&quot;2086&quot; data-origin-height=&quot;1004&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아직까지는 상단의 [Sync] 버튼을 클릭하여야 수정 사항이 반영됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기존 Web Page는 하기와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1852&quot; data-origin-height=&quot;785&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDI65S/btsEmpAN3X2/XH1sm11GW98qJwTKcgbZmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDI65S/btsEmpAN3X2/XH1sm11GW98qJwTKcgbZmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDI65S/btsEmpAN3X2/XH1sm11GW98qJwTKcgbZmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDI65S%2FbtsEmpAN3X2%2FXH1sm11GW98qJwTKcgbZmk%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;763&quot; height=&quot;323&quot; data-origin-width=&quot;1852&quot; data-origin-height=&quot;785&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변경 사항이 적용된 Web Page는 하기와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1857&quot; data-origin-height=&quot;778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNAwVU/btsEkwm0pDi/PRK4fg5vBccLtXodXgXDY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNAwVU/btsEkwm0pDi/PRK4fg5vBccLtXodXgXDY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNAwVU/btsEkwm0pDi/PRK4fg5vBccLtXodXgXDY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNAwVU%2FbtsEkwm0pDi%2FPRK4fg5vBccLtXodXgXDY1%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;769&quot; height=&quot;322&quot; data-origin-width=&quot;1857&quot; data-origin-height=&quot;778&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;&lt;span style=&quot;color: #000000;&quot;&gt;8.3 ArgoCD의 Sync Policy 수정 (Manual &amp;rarr; Auto)&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;ArgoCD 상단의 [Details] 버튼을 클릭한 후 하단의 [Sync Policy] 탭에서 [Enable Auto-Sync]를 클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;1153&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jrcvb/btsEuMVjLGZ/hOixSCxdxRAFWKOxPpLpL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jrcvb/btsEuMVjLGZ/hOixSCxdxRAFWKOxPpLpL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jrcvb/btsEuMVjLGZ/hOixSCxdxRAFWKOxPpLpL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJrcvb%2FbtsEuMVjLGZ%2FhOixSCxdxRAFWKOxPpLpL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1269&quot; height=&quot;1153&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;1153&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Auto-Sync 세부 정보는 하기와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sRPSW/btsEoMhxct0/e0D4MpNmEMO5XDKNYqXaek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sRPSW/btsEoMhxct0/e0D4MpNmEMO5XDKNYqXaek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sRPSW/btsEoMhxct0/e0D4MpNmEMO5XDKNYqXaek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsRPSW%2FbtsEoMhxct0%2Fe0D4MpNmEMO5XDKNYqXaek%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;557&quot; height=&quot;228&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Prune Resources&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 활성화 할 경우 연결된 Github Repository에서 manifest file이 삭제될 경우 Kubernetes Cluster에서도 해당 리소스가 삭제됩니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Github Repository와 Kubernetes Cluster를 완전히 동기화 할 수 있어 둘 간의 상태 불일치를 방지할 수 있으나 예기치 않은 리소스가 삭제될 수 있음에 유의해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Self Heal&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster의 상태를 지속적으로 Github Repository와 비교하고 둘 간에 Out of Sync가 발생할 경우 Cluster의 상태를 Github Repository의 상태로 자동으로 복구하는 기능입니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;8.4 CI/CD Pipeline 전체 자동화 테스트&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ArgoCD의 Sync Policy까지 Automatic으로 변경하였으니 정말 마지막으로 CI/CD Pipeline 전체를 자동화하는 테스트를 진행해 보도록 하겠습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드를 수정한 후 git push 명령어를 통해 GitHub Repository에 변경 사항을 적용합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;601&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1JXqj/btsEnc19A5N/CTdgJkKTXzGZYnIEjIkLo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1JXqj/btsEnc19A5N/CTdgJkKTXzGZYnIEjIkLo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1JXqj/btsEnc19A5N/CTdgJkKTXzGZYnIEjIkLo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1JXqj%2FbtsEnc19A5N%2FCTdgJkKTXzGZYnIEjIkLo0%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;1431&quot; height=&quot;601&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;601&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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: #ffffff; color: #000000; text-align: left;&quot;&gt; Github Update가 완료되면 첫 번째 Job이 자동으로 Trigger되고 첫 번째 Job의 마지막 Stage에서 두 번째 Job이 자동으로 Trigger 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2143&quot; data-origin-height=&quot;1197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cE639L/btsEuMOAqKt/VcjK3LvpbcDm7KObjJLF6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cE639L/btsEuMOAqKt/VcjK3LvpbcDm7KObjJLF6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cE639L/btsEuMOAqKt/VcjK3LvpbcDm7KObjJLF6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcE639L%2FbtsEuMOAqKt%2FVcjK3LvpbcDm7KObjJLF6k%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;2143&quot; height=&quot;1197&quot; data-origin-width=&quot;2143&quot; data-origin-height=&quot;1197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 번째 Job이 자동으로 trigger 되는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1677&quot; data-origin-height=&quot;1115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y5ZsL/btsEpqeyKHZ/qXDmgNGKY7aOxpDnepznq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y5ZsL/btsEpqeyKHZ/qXDmgNGKY7aOxpDnepznq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y5ZsL/btsEpqeyKHZ/qXDmgNGKY7aOxpDnepznq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY5ZsL%2FbtsEpqeyKHZ%2FqXDmgNGKY7aOxpDnepznq1%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;1677&quot; height=&quot;1115&quot; data-origin-width=&quot;1677&quot; data-origin-height=&quot;1115&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ArgoCD에서 자동으로 Sync가 이루어집니다. (deploy.yaml file의 image tag가 v7에서 v8로 변경됩니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2071&quot; data-origin-height=&quot;1096&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyqWIf/btsEnWrwhvI/H8kGvpjyxVJE0vxXZx5MW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyqWIf/btsEnWrwhvI/H8kGvpjyxVJE0vxXZx5MW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyqWIf/btsEnWrwhvI/H8kGvpjyxVJE0vxXZx5MW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyqWIf%2FbtsEnWrwhvI%2FH8kGvpjyxVJE0vxXZx5MW0%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;2071&quot; height=&quot;1096&quot; data-origin-width=&quot;2071&quot; data-origin-height=&quot;1096&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변경된 Web Page는 하기와 같습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1857&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bem0RP/btsEuAgpKyF/8IJMAcMgG7vPeXFE6Mkkgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bem0RP/btsEuAgpKyF/8IJMAcMgG7vPeXFE6Mkkgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bem0RP/btsEuAgpKyF/8IJMAcMgG7vPeXFE6Mkkgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbem0RP%2FbtsEuAgpKyF%2F8IJMAcMgG7vPeXFE6Mkkgk%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;1857&quot; height=&quot;773&quot; data-origin-width=&quot;1857&quot; data-origin-height=&quot;773&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 긴 시간에 걸쳐 CI/CD Pipeline을 구성하는 과정에 대해 테스트하고 글로 기록해 보았습니다.  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 또 다른 재밌고 유익한 글로 돌아오도록 하겠습니다 :)&amp;nbsp;&lt;/p&gt;</description>
      <category>TOPIC/DevOps</category>
      <category>AKS</category>
      <category>ArgoCD</category>
      <category>Azure</category>
      <category>CI/CD</category>
      <category>DevOps</category>
      <category>Jenkins</category>
      <category>Kubernetes</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/21</guid>
      <comments>https://with-cloud.tistory.com/21#entry21comment</comments>
      <pubDate>Mon, 5 Feb 2024 13:43:19 +0900</pubDate>
    </item>
    <item>
      <title>Jenkins, ArgoCD로 CI/CD Pipeline 구성하기 (2)</title>
      <link>https://with-cloud.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;지난 글에서는 CI/CD Pipeline에 대한 전체 Flow와 Pipeline을 구성하기 전에 필요한 설정들에 대해 다뤄보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;지난 글 바로 가기 :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://with-cloud.tistory.com/19&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://with-cloud.tistory.com/19&lt;/a&gt;.&lt;/p&gt;
&lt;figure id=&quot;og_1706751262898&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;Jenkins, ArgoCD로 CI/CD Pipeline 구성하기 (1)&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 드디어 길고 길었던 CI/CD Pipeline 구성이 끝이 났습니다.   개인적으로, CI/CD Pipeline은 구성할 때마다 어렵다   이거 언제 다 연결하지? 라는 마음이 드는데요. 막상 &quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/19&quot; data-og-url=&quot;https://with-cloud.tistory.com/19&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dbIEuv/hyVf2tuWat/UmyamPGvA497Xbfl9zeU8K/img.png?width=800&amp;amp;height=393&amp;amp;face=0_0_800_393,https://scrap.kakaocdn.net/dn/nvUHZ/hyVf2NNE9v/WOQAuJFaKqH5Aqej6Gewpk/img.png?width=800&amp;amp;height=393&amp;amp;face=0_0_800_393,https://scrap.kakaocdn.net/dn/btTzgc/hyVb222jKO/YOK3FMBBDfkp9UhvkaQ3L0/img.png?width=933&amp;amp;height=874&amp;amp;face=0_0_933_874&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/19&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/19&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dbIEuv/hyVf2tuWat/UmyamPGvA497Xbfl9zeU8K/img.png?width=800&amp;amp;height=393&amp;amp;face=0_0_800_393,https://scrap.kakaocdn.net/dn/nvUHZ/hyVf2NNE9v/WOQAuJFaKqH5Aqej6Gewpk/img.png?width=800&amp;amp;height=393&amp;amp;face=0_0_800_393,https://scrap.kakaocdn.net/dn/btTzgc/hyVb222jKO/YOK3FMBBDfkp9UhvkaQ3L0/img.png?width=933&amp;amp;height=874&amp;amp;face=0_0_933_874');&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;Jenkins, ArgoCD로 CI/CD Pipeline 구성하기 (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 드디어 길고 길었던 CI/CD Pipeline 구성이 끝이 났습니다.   개인적으로, CI/CD Pipeline은 구성할 때마다 어렵다   이거 언제 다 연결하지? 라는 마음이 드는데요. 막상&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.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;color: #000000;&quot;&gt;이어서 이번 글에서는 본격적으로 Jenkinsfile을 사용하여 Jenkins 내에서 Job을 생성하고 테스트 하는 과정에 대해 적어보도록 하겠습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&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;※ Jenkins와 ArgoCD&amp;nbsp;등 CI/CD Pipeline 구성에 필요한 모든 리소스는 사전에 배포해 두었습니다.※ &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;3.-Jenkins에서-Job-생성-(1)-Push-the-image-to-ACR&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3556&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. Jenkins에서 Job 생성 (1) Push the image to ACR&lt;/span&gt;&lt;/h3&gt;
&lt;h4 id=&quot;3.1-Project-생성&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3603&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.1 Project 생성&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;[+ New Item] &amp;gt; [Pipeline] 선택 &amp;gt; [Ok] 클릭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;696&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwPd28/btsEeJltPHs/WF894TQ0lZPIMC4AStTko0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwPd28/btsEeJltPHs/WF894TQ0lZPIMC4AStTko0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwPd28/btsEeJltPHs/WF894TQ0lZPIMC4AStTko0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwPd28%2FbtsEeJltPHs%2FWF894TQ0lZPIMC4AStTko0%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;682&quot; height=&quot;488&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;696&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 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3603&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.2 Project&amp;nbsp;Configuration - General&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;Build&amp;nbsp;Triggers&amp;nbsp;중&lt;b&gt; [GitHub hook trigger for GITScm polling] &lt;/b&gt;옵션을 선택합니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 GitHub Repository에 코드 변경 사항이 push될 때마다 Jenkins Job이 자동으로 트리거 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGJVc9/btsEf4pl0d7/uVACykSngWVERQk3WnQNlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGJVc9/btsEf4pl0d7/uVACykSngWVERQk3WnQNlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGJVc9/btsEf4pl0d7/uVACykSngWVERQk3WnQNlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGJVc9%2FbtsEf4pl0d7%2FuVACykSngWVERQk3WnQNlk%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;594&quot; height=&quot;270&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;328&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 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3603&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.3 Project Configuration - Pipeline&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkinsfile을 작성하기에 앞서 Jenkinsfile에 대해 간략하게 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkinsfile이란?&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;Jenkins Pipeline의 정의를 포함하는 텍스트파일로 Jenkinsfile을 사용하면 CI/CD Pipeline의 구성, 실행, 관리를 코드 형식으로 수행할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;선언형 파이프라인과 스크립트형 파이프라인의 두 가지 방식으로 정의될 수 있습니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;선언형 파이프라인 :&lt;/b&gt; 파이프라인 block으로 시작하여 stages, steps, environment 등의 지시어를 포함하는 방식으로 구조가 명확하고, 각 단계를 쉽게 이해할 수 있게 해줍니다. &lt;i&gt;&amp;larr; 이번 글에서 사용한 방식입니다.&amp;nbsp;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;스크립트형 파이프라인 :&lt;/b&gt; Groovy 기반의 구문을 사용하며, node block 내 로직을 작성하여 더 복잡한 파이프라인을 구현할 수 있습니다. 선언형 파이프라인보다 더 고급 기능과 더 많은 제어 구조를 제공하지만 작성하거나 이해하기가 보다 어려운 방식입니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞서 말씀 드렸듯이, 이번 글에서는 선언형 파이프라인을 사용하여 Jenkinsfile을 작성하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkinsfile 작성 내용은 하기와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706753105828&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any

    environment {
        BUILD_NUMBER = &quot;v5&quot;
        WEB_IMAGE_NAME = &quot;${ACR_LOGINSERVER}/{respository 명}:${BUILD_NUMBER}&quot;
    }

    stages {        
        stage('Login to ACR') {
            steps {
                script {
                    sh &quot;az login -i&quot;
                    echo &quot;Login to Azure Success&quot;
                    sh &quot;az acr login --name ${ACR_LOGINSERVER}&quot;
                    echo &quot;Login to Azure Container Registry Success&quot;
                }
            }
        }
        
        stage('Build Docker Image') {
            steps {
                script {
                    echo &quot;Start to Build the Image&quot;
                    sh &quot;docker build -t ${ACR_LOGINSERVER}/{respository 명}:${BUILD_NUMBER} .&quot;
                    echo &quot;Build Success&quot;
                }
            }
        }

        stage('Push Image to ACR') {
            steps {
                script {
                    // Docker 이미지를 ACR에 푸시
                    echo &quot;Push to ACR&quot;
                    sh &quot;docker push ${ACR_LOGINSERVER}/{respository 명}:${BUILD_NUMBER}&quot;
                    echo &quot;Push Success&quot;
                }
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;environment&lt;/b&gt; &lt;/i&gt;block&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; BUILD_NUMBER : Tag에 대한 변수로 GitHub에 변경 사항이 반영될 때마다 바꿔주어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WEB_IMAGE_NAME : image를 build할 때 사용할 이름으로 이미지와 태그를 지정해 주는 변수입니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;'Login to ACR'&lt;/b&gt; &lt;/i&gt;stage&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;script block : Managed Identity를 사용하여 Azure에 로그인하고 ACR에 로그인 합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;'Build Docker Image'&lt;/b&gt; &lt;/i&gt;stage&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Github Repository에 있는 Dockerfile을 사용하여 &lt;span style=&quot;text-align: left;&quot;&gt; &lt;span style=&quot;text-align: left;&quot;&gt;변수로 지정한 이름:태그로 이미지를 build 합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;'Push Image to ACR'&lt;/b&gt; &lt;/i&gt;stage&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;build가 완료된 후 docker push 명령어를 사용하여 이미지를 ACR로 push 합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkinsfile 어렵지 않으시죠?  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음은 Jenkins에서 Pipeline 정의하는 부분에 대해 알아보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1444&quot; data-origin-height=&quot;918&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wxwcI/btsEeIf9j52/O51OO0w1BnsVydGpPNCKi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wxwcI/btsEeIf9j52/O51OO0w1BnsVydGpPNCKi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wxwcI/btsEeIf9j52/O51OO0w1BnsVydGpPNCKi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwxwcI%2FbtsEeIf9j52%2FO51OO0w1BnsVydGpPNCKi1%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;785&quot; height=&quot;499&quot; data-origin-width=&quot;1444&quot; data-origin-height=&quot;918&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Definition의 경우 &lt;b&gt;[Pipeline script from SCM]&lt;/b&gt;을 선택합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Repository URL에 GitHub Repository의 URL을 입력합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Credentials&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub Repository가 Private Repository일 경우 [+ Add] 버튼을 클릭하여 User name과 PAT(Personal Access Token)에 대한 값이 저장된 Credentials을 생성해야 합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RsRvR/btsEdVNADWC/cUMH650ijkMiiDLkwiYeLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RsRvR/btsEdVNADWC/cUMH650ijkMiiDLkwiYeLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RsRvR/btsEdVNADWC/cUMH650ijkMiiDLkwiYeLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRsRvR%2FbtsEdVNADWC%2FcUMH650ijkMiiDLkwiYeLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;781&quot; height=&quot;427&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;786&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Script Path를 Jenkinsfile로 지정합니다. (default)&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub Repository에서 Jenkinsfile이 있는 위치를 명시해 주어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Repository 가장 상위에 존재할 경우 위와 같이 &lt;b&gt;Jenkinsfile&lt;/b&gt;이라고 명시해 주면 되고 특정 directory 내 존재한다면 &lt;b&gt;directory명/Jenkins&lt;/b&gt;로 명시해 주면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3603&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.3 GitHub 코드 수정 후 Job이 자동으로 trigger 되는지 확인&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Local에서 코드를 수정한 후 GitHub에 변경 사항을 push 해 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;369&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSftty/btsEfsRHi00/hyzSs1IytKxV1UVKVe977k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSftty/btsEfsRHi00/hyzSs1IytKxV1UVKVe977k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSftty/btsEfsRHi00/hyzSs1IytKxV1UVKVe977k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSftty%2FbtsEfsRHi00%2FhyzSs1IytKxV1UVKVe977k%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;794&quot; height=&quot;324&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;369&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;이후 Jenkins에서 Build가 자동으로 Trigger 되는 것을 확인할 수 있습니다. (하기 이미지 참조)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2141&quot; data-origin-height=&quot;1197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVG64C/btsEhmKsfH2/Pv83xCGooVBJoKJ6fOVoc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVG64C/btsEhmKsfH2/Pv83xCGooVBJoKJ6fOVoc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVG64C/btsEhmKsfH2/Pv83xCGooVBJoKJ6fOVoc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVG64C%2FbtsEhmKsfH2%2FPv83xCGooVBJoKJ6fOVoc1%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;786&quot; height=&quot;439&quot; data-origin-width=&quot;2141&quot; data-origin-height=&quot;1197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 첫 번째 job을 생성해 보았는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 job의 flow를 간단하게 정리하고 넘어가 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;➡️ 코드를 수정한 후 GitHub에 변경 사항을 push하면 Jenkins는 GitHub webhook에 의해 변경 사항이 발생했다는 것을 감지합니다. 그 후, Jenkins는 자동으로 job을 실행하여 ACR에 변경 사항이 적용된 이미지를 push합니다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;3.-Jenkins에서-Job-생성-(1)-Push-the-image-to-ACR&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-renderer-start-pos=&quot;3556&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. Jenkins에서 Job 생성 (2) Update the manifest file&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5.1 Project 생성&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[+ New Item] &amp;gt; [Pipeline] 선택 &amp;gt; [Ok] 클릭&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgr1kF/btsEdKyIvhT/n309AZWSX3Mxz95Vow1mok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgr1kF/btsEdKyIvhT/n309AZWSX3Mxz95Vow1mok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgr1kF/btsEdKyIvhT/n309AZWSX3Mxz95Vow1mok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgr1kF%2FbtsEdKyIvhT%2Fn309AZWSX3Mxz95Vow1mok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;730&quot; height=&quot;470&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;732&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5.2 Project Configuration - General&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 번째 job은 첫 번째 job이 성공적으로 완료된 이후 자동으로 trigger 되어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 부분은 첫 번재 job에서 추후 구성할 예정이기 때문에 해당 job에서는 별도로 구성해 주어야 할 것이 없습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5.3 Project Configuration - Pipeline&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫 번째 job과 마찬가지로 두 번째 job에서 사용될 Jenkinsfile도 선언형 파이프라인 방식을 사용하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Jenkinsfile 작성 내용은 하기와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706762854151&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any
    environment {
        IMAGE_TAG = 'initial'
    }
    stages {
        stage('Clone repository') {
            steps {
              checkout scm
            }
        }
        stage('Update deploy.yaml') {
            steps {
                script {
                    IMAGE_TAG=sh(script: &quot;az acr repository show-tags --name {acr명} --repository {repository명} --orderby time_desc --top 1 --output tsv&quot;, returnStdout: true).trim()
                    echo &quot;Image Tag: ${IMAGE_TAG}&quot;
                    sh &quot;sed -i 's|image: .*|image: {acr server 주소}/{respository}:${IMAGE_TAG}|' deploy.yaml&quot;
                    }
            }
        }
        stage('Commit and Push') {
            steps {
                script {
                    withCredentials([string(credentialsId: 'sundls', variable: 'GIT_CREDENTIALS_ID')]){
                        sh 'git config user.email &quot;user email 입력&quot;'
                        sh 'git config user.name &quot;user name 입력&quot;'
                        sh 'git add .'
                        sh 'git commit -m &quot;Update image tag in deploy.yaml&quot;'
                        sh 'git push https://${GIT_CREDENTIALS_ID}@github.com/{user name 입력}/Manifest.git HEAD:main'
                    }
                }
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;&lt;b&gt;environment&lt;/b&gt;&lt;/i&gt; block
&lt;ul style=&quot;list-style-type: circle;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;IMAGE_TAG의 경우, 초기 값을 지정해 줍니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이후 하기 &amp;lsquo;Update deploy.yaml&amp;rsquo; stage에서 변수 값을 update 하게 됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;b&gt;'Clone repository'&lt;/b&gt;&lt;/i&gt; stage
&lt;ul style=&quot;list-style-type: circle;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Jenkins Project 내 Pipeline 정의 탭에서 설정할 SCM(이 경우 GitHub Repository)으로부터 소스 코드를 체크아웃하는 단계를 의미합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;해당 pipeline은 project 내 정의된 GitHub Repository를 바라보고 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;b&gt;'Update deploy.yaml'&lt;/b&gt; &lt;/i&gt;stage
&lt;ul style=&quot;list-style-type: circle;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;IMAGE_TAG라는 변수에 ACR에 push된 image 중 가장 최신 버전인 값이 할당되도록 합니다.&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;orderby라는 매개변수의 값을 &lt;b&gt;&lt;i&gt;time_desc&lt;/i&gt;&lt;/b&gt;으로 하여 가장 최근에 push된 image의 값부터 출력되도록 정렬합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;top이라는 매개변수의 값을 &lt;b&gt;&lt;i&gt;1&lt;/i&gt;&lt;/b&gt;로 하여 정렬한 값들 중 가장 첫 번째 값만 출력되도록 합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;returnStdout는&amp;nbsp;Jenkins 파이프라인 스크립트에서 사용되는 특정 옵션입니다. 일반적으로 script block 내에서 쉘 명령어를 실행할 경우 명령어의 출력값은 문자열 형태로 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;터미널 또는 콘솔에 직접 출력됩니다. 하지만 &lt;b&gt;&lt;i&gt;returnStdout:true&lt;/i&gt; &lt;/b&gt;옵션을 사용하면 Jenkins가 이 출력을 캡처하여 Jenkins script 내의 변수에 저장하게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;trim() 함수를 통해 문자열의 앞뒤 공백을 제거합니다. (혹시 모를 오인식을 방지하기 위함입니다.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;b&gt;'Commit and Push'&lt;/b&gt;&lt;/i&gt; stage
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;withCredentials
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Jenkins Credentials에 정의한 GitHub PAT와 관련된 값을 사용하기 위한 선언을 하는 field입니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;credentialsId&lt;/i&gt; 값에 Credentials ID 값을 입력하고 &lt;i&gt;variable&lt;/i&gt; 값에는 하기 명령어에서 사용할 변수 값을 입력합니다. &amp;larr;&amp;nbsp;Credentials 값이 variable에 선언한 값에 저장됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;git 명령어
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;git 명령어들을 통해 변경된 값을 GitHub repository에 push 합니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;다음은 Jenkins에서 Pipeline 정의하는 부분에 대해 알아보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;1138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FNGQK/btsEjUMWbRb/cvDUenLY48G6rOLUI6fAo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FNGQK/btsEjUMWbRb/cvDUenLY48G6rOLUI6fAo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FNGQK/btsEjUMWbRb/cvDUenLY48G6rOLUI6fAo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFNGQK%2FbtsEjUMWbRb%2FcvDUenLY48G6rOLUI6fAo0%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;789&quot; height=&quot;901&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;1138&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;첫 번째 job과 동일한 방식으로 정의해 주시면 됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5.4 Job이 trigger 되었을 때 이미지 값이 자동으로 변경되는지 확인&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 이미지 값을 확인합니다. (tag가 v5 임을 확인할 수 있습니다.)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUKodF/btsEeLqpdrC/E1ukR4kIyqNB0Cy7YoKQ00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUKodF/btsEeLqpdrC/E1ukR4kIyqNB0Cy7YoKQ00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUKodF/btsEeLqpdrC/E1ukR4kIyqNB0Cy7YoKQ00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUKodF%2FbtsEeLqpdrC%2FE1ukR4kIyqNB0Cy7YoKQ00%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;538&quot; height=&quot;534&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;603&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Pipeline Project에서 [Build Now]를 클릭합니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSCaKw/btsEhn3Lf3c/42gWHh1JKegksOUjMdC6sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSCaKw/btsEhn3Lf3c/42gWHh1JKegksOUjMdC6sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSCaKw/btsEhn3Lf3c/42gWHh1JKegksOUjMdC6sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSCaKw%2FbtsEhn3Lf3c%2F42gWHh1JKegksOUjMdC6sk%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;591&quot; height=&quot;298&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;511&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Job이 정상적으로 종료된 것을 Jenkins에서 확인할 수 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1698&quot; data-origin-height=&quot;1170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czOQy2/btsEizJartu/3QSZ7ylxUH94penJKm3mkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czOQy2/btsEizJartu/3QSZ7ylxUH94penJKm3mkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czOQy2/btsEizJartu/3QSZ7ylxUH94penJKm3mkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczOQy2%2FbtsEizJartu%2F3QSZ7ylxUH94penJKm3mkK%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;685&quot; height=&quot;472&quot; data-origin-width=&quot;1698&quot; data-origin-height=&quot;1170&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Github에서 버전 값이 변경되었는지 확인합니다. (tag 값이 v5에서 v6으로 변경된 것을 확인할 수 있습니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPCMBR/btsEdXq6xTP/EzTQKnVKxnwhhmmxhaTAPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPCMBR/btsEdXq6xTP/EzTQKnVKxnwhhmmxhaTAPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPCMBR/btsEdXq6xTP/EzTQKnVKxnwhhmmxhaTAPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPCMBR%2FbtsEdXq6xTP%2FEzTQKnVKxnwhhmmxhaTAPk%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;788&quot; height=&quot;154&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Jenkins에서 job을 2개 생성하고 각각의 job들이 목적에 맞게 잘 돌아가는지 확인해 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직까지는 두 개의 job을 연결하는 부분을 추가해 주지 않았기 때문에 두 개의 job이 연결되어 돌아가지는 않는다는 점 다시 한번 말씀드리며, 이번 글을 마무리하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;job들이 시나리오 대로 잘 돌아가는 것을 확인했으니&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음 글에서는 ①&lt;span&gt;&amp;nbsp;&lt;/span&gt;두 번째 job에 의해 update 될 deploy.yaml file이 있는 GitHub Repository와 AKS 간 sync를 위해 ArgoCD에서 어떤 구성을 해 주어야 하는지 알아보고 ② CI/CD Pipeline 전 과정을 자동화 해 보도록 하겠습니다.  &lt;/p&gt;</description>
      <category>TOPIC/DevOps</category>
      <category>AKS</category>
      <category>ArgoCD</category>
      <category>Azure</category>
      <category>CICD</category>
      <category>DevOps</category>
      <category>Jenkins</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/20</guid>
      <comments>https://with-cloud.tistory.com/20#entry20comment</comments>
      <pubDate>Thu, 1 Feb 2024 14:22:39 +0900</pubDate>
    </item>
    <item>
      <title>Jenkins, ArgoCD로 CI/CD Pipeline 구성하기 (1)</title>
      <link>https://with-cloud.tistory.com/19</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;드디어 길고 길었던 CI/CD Pipeline 구성이 끝이 났습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개인적으로, CI/CD Pipeline은 구성할 때마다 어렵다   이거 언제 다 연결하지? 라는 마음이 드는데요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;막상 구성해 놓고 보면 자동으로 척척 빌드되고 배포되는 게 멋있고 뿌듯하더라구요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 할 때마다 어려워 할 수는 없으니! 이번 기회에 쭈욱 정리해 보고자 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;※ Jenkins와 ArgoCD&amp;nbsp;등 CI/CD Pipeline 구성에 필요한 모든 리소스는 사전에 배포해 두었습니다.※&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. CI/CD Flow&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1571&quot; data-origin-height=&quot;772&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/smjTv/btsEdBtZKkd/vhluuvoNqzQL9kjAH52Jk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/smjTv/btsEdBtZKkd/vhluuvoNqzQL9kjAH52Jk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/smjTv/btsEdBtZKkd/vhluuvoNqzQL9kjAH52Jk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsmjTv%2FbtsEdBtZKkd%2FvhluuvoNqzQL9kjAH52Jk0%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;1571&quot; height=&quot;772&quot; data-origin-width=&quot;1571&quot; data-origin-height=&quot;772&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발자가 코드를 수정한 후 'Toy-Project-Web' Repository에 변경 사항을 push합니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Toy-Project-Web이라는 GitHub Repository에는 Dockerfile과 웹 어플리케이션 소스 코드가 포함되어 있습니다.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub에 설정된 Webhook이 push 이벤트를 감지하고 Jenkins의 job을 트리거합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkins는 트리거를 받아 구성된 job을 실행하여 새로운 코드 변경 사항을 기반으로 이미지를 build하고 이를 Azure Container Registry에 push 합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkins의 첫 번째 job의 마지막 stage에서 두 번째 job을 트리거합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Jenkins에서 두 번째 job이 실행되고, 이에 따라 'Manifest' Repository의 deploy.yaml file 내의 image version이 업데이트 됩니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ArgoCD는 주기적으로 'Manifest' Repository를 체크하다가 변경 사항을 감지하면 AKS의 현재 상태와 GitHub에 정의된 desired state 간 Sync를 진행합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AKS 내 배포된 Deployment에 대한 새로운 변경 사항을 rollout합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. GitHub - Jenkins 연결&lt;/span&gt;&lt;/h3&gt;
&lt;h4 id=&quot;1.1-Personal-Access-Token&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;29&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.1 Personal Access Token 발급&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;✅&lt;/span&gt; GitHub Private Repository와 Jenkins를 연결하기 위해 Personal Access Token를 발급해야 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;✅&lt;/span&gt; GitHub의 Personal Access Token(PAT)는 API를 통해 GitHub에 인증하여 접근할 수 있는 방법 중 하나입니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub Log in &amp;gt; Profile 아이콘 클릭 &amp;gt; [Settings] &amp;gt; [Developer settings] &amp;gt; [Tokens (classic)] &amp;gt; [Generate new token]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1896&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7w9a7/btsEfo8vGV9/7uZRlcno92Q2RMKc6vxbuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7w9a7/btsEfo8vGV9/7uZRlcno92Q2RMKc6vxbuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7w9a7/btsEfo8vGV9/7uZRlcno92Q2RMKc6vxbuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7w9a7%2FbtsEfo8vGV9%2F7uZRlcno92Q2RMKc6vxbuK%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;1896&quot; height=&quot;355&quot; data-origin-width=&quot;1896&quot; data-origin-height=&quot;355&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; token 이름과 권한 범위를 선택합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;repo, admin:org, admin:repo_hook&lt;/i&gt; 권한을 부여합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;874&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bv7pkP/btsEbAoQkDz/vBl07gmrSbUOvSPKuoj0XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bv7pkP/btsEbAoQkDz/vBl07gmrSbUOvSPKuoj0XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bv7pkP/btsEbAoQkDz/vBl07gmrSbUOvSPKuoj0XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbv7pkP%2FbtsEbAoQkDz%2FvBl07gmrSbUOvSPKuoj0XK%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;724&quot; height=&quot;678&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;874&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하단의 [Generate token] 버튼을 클릭하여 token을 생성합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;발급된 PAT를 복사한 후 보관합니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 키는 다시 볼 수 없기 때문에 메모장 등에 따로 보관해 두어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clwO31/btsEhmvRBPu/VzeKA6jhb6fyw7Wzupx0pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clwO31/btsEhmvRBPu/VzeKA6jhb6fyw7Wzupx0pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clwO31/btsEhmvRBPu/VzeKA6jhb6fyw7Wzupx0pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclwO31%2FbtsEhmvRBPu%2FVzeKA6jhb6fyw7Wzupx0pk%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;766&quot; height=&quot;352&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;435&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 id=&quot;1.1-Personal-Access-Token&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-ke-size=&quot;size20&quot; data-renderer-start-pos=&quot;29&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.2 Jenkins에 GitHub의 Personal Access Token을 Credentials로 등록&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;background-color: #fcfcfc; text-align: left;&quot;&gt;✅&lt;/span&gt; GitHub의 PAT를 Jenkins Server에 Credentials로 등록 합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Dashboard] &amp;gt; [Manage Jenkins] &amp;gt; [System] &amp;gt; [&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;GitHub&lt;/span&gt;] &amp;gt; [Add GitHub Server]&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;561&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/casc4P/btsEfqL4vun/P4DPZNeVTrJhoZqATckVK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/casc4P/btsEfqL4vun/P4DPZNeVTrJhoZqATckVK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/casc4P/btsEfqL4vun/P4DPZNeVTrJhoZqATckVK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcasc4P%2FbtsEfqL4vun%2FP4DPZNeVTrJhoZqATckVK0%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;727&quot; height=&quot;430&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;561&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Credentials 추가를 위해 [+ Add] &amp;gt; [Jenkins]로 이동합니다. &lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kind : &lt;b&gt;Secret text&lt;/b&gt; 선택 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Secret : 복사해 둔 Personal Access Token 입력 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ID&amp;nbsp;:&amp;nbsp;해당&amp;nbsp;credential&amp;nbsp;식별에&amp;nbsp;사용할&amp;nbsp;ID&amp;nbsp;입력&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;834&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIQqi6/btsEfpGoeg3/4mV26YYxwMMzHokLAqKXgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIQqi6/btsEfpGoeg3/4mV26YYxwMMzHokLAqKXgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIQqi6/btsEfpGoeg3/4mV26YYxwMMzHokLAqKXgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIQqi6%2FbtsEfpGoeg3%2F4mV26YYxwMMzHokLAqKXgk%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;732&quot; height=&quot;428&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;834&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;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: #ffffff; color: #000000; text-align: left;&quot;&gt; 생성한 Credentials 선택한 후 [Test Connection] 버튼을 클릭하여 연결을 확인합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4rAi1/btsEhkY7tfD/bQzPc2wlcFNvtQKk52GjSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4rAi1/btsEhkY7tfD/bQzPc2wlcFNvtQKk52GjSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4rAi1/btsEhkY7tfD/bQzPc2wlcFNvtQKk52GjSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4rAi1%2FbtsEhkY7tfD%2FbQzPc2wlcFNvtQKk52GjSk%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;761&quot; height=&quot;331&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;669&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;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: #ffffff; color: #000000; text-align: left;&quot;&gt; 하단의 [Save] 버튼을 클릭하여 변경 사항을 저장합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;1.1-Personal-Access-Token&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;29&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.3 GitHub Webhook 설정&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ GitHub Repository에 변경 사항이 발생할 경우 GitHub는 &lt;span style=&quot;background-color: #fcfcfc; text-align: left;&quot;&gt;Webhook을 통해 &lt;/span&gt;Jenkins에게 Event에 대한 트리거를 보냅니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;❌ Jenkins Server가 Private IP 주소만 가지고 있을 경우 이 ip 주소를 Payload URL로 사용할 수 없습니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;➡️ 이 경우, Azure Firewall로 트래픽을 라우팅 하여 Azure Firewall의 Public IP 주소로 Webhook의 Payload URL을 지정하도록 구성해야 합니다.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구성 방법은 그렇게 어렵지 않습니다! 아래를 봐주세요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub Webhook의 Payload URL을 Azure Firewall의 Public IP로 지정하기 위해서 Azure Firewall에 DNAT Rule을 추가합니다. &lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원본 : &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;GitHub&lt;/span&gt; Webhook IP 주소 (참고 링크 :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://api.github.com/meta)&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://api.github.com/meta&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대상 포트 : 8080 # 원하는 port 지정&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대상 : Azure Firewall의 Public IP 주소 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변환된 주소 : Jenkins Server의 Private IP 주소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;번역된&amp;nbsp;포트&amp;nbsp;:&amp;nbsp;8080&amp;nbsp;#&amp;nbsp;Jenkins가&amp;nbsp;LISTEN하고&amp;nbsp;있는&amp;nbsp;port&amp;nbsp;입력&amp;nbsp;필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLLOPb/btsEcq0yewl/Y7ktagO1fm0dLPksk1CP6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLLOPb/btsEcq0yewl/Y7ktagO1fm0dLPksk1CP6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLLOPb/btsEcq0yewl/Y7ktagO1fm0dLPksk1CP6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLLOPb%2FbtsEcq0yewl%2FY7ktagO1fm0dLPksk1CP6k%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;801&quot; height=&quot;299&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게만 해주면 됩니다!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규칙 추가가 끝났다면 본론으로 돌아와 다시 Webhook 설정을 진행해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Repository&amp;nbsp;&amp;gt;&amp;nbsp;[Settings]&amp;nbsp;&amp;gt;&amp;nbsp;[Webhooks]&amp;nbsp;&amp;gt;&amp;nbsp;[Add&amp;nbsp;webhook]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1067&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wh8uJ/btsEdGIRbZJ/ELER9hl6JkVgREknKwgvbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wh8uJ/btsEdGIRbZJ/ELER9hl6JkVgREknKwgvbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wh8uJ/btsEdGIRbZJ/ELER9hl6JkVgREknKwgvbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWh8uJ%2FbtsEdGIRbZJ%2FELER9hl6JkVgREknKwgvbk%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;753&quot; height=&quot;357&quot; data-origin-width=&quot;1067&quot; data-origin-height=&quot;506&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Webhook 추가&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Payload&amp;nbsp;URL&amp;nbsp;:&amp;nbsp;Azure&amp;nbsp;Firewall의&amp;nbsp;Public&amp;nbsp;IP&amp;nbsp;주소&amp;nbsp;뒤에&lt;b&gt;&amp;nbsp;/github-webhook/&lt;/b&gt;를 추가해 줍니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RbAWN/btsEaOOMsX1/aWmYd0dOeQh2cf4vk7z4K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RbAWN/btsEaOOMsX1/aWmYd0dOeQh2cf4vk7z4K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RbAWN/btsEaOOMsX1/aWmYd0dOeQh2cf4vk7z4K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRbAWN%2FbtsEaOOMsX1%2FaWmYd0dOeQh2cf4vk7z4K1%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;702&quot; height=&quot;474&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;474&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Add Webhook]을 클릭하여 Webhook을 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Webhook이 정상적으로 연결되면 하기와 같이 ✅ 마크가 Payload URL 앞에 표시됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eneSo0/btsEdVFSJxc/P0Qgj0o6rLopqAPDlvYAY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eneSo0/btsEdVFSJxc/P0Qgj0o6rLopqAPDlvYAY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eneSo0/btsEdVFSJxc/P0Qgj0o6rLopqAPDlvYAY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeneSo0%2FbtsEdVFSJxc%2FP0Qgj0o6rLopqAPDlvYAY1%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;484&quot; height=&quot;209&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. Azure Container Registry - Jenkins 연결&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;code를 수정한 후 GitHub에 변경 사항을 push 할 때, 이러한 push event를 알려줄 GitHub Webhook에 대한 구성을 완료했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그럼 그 다음에 해야할 일은 무엇일까요? 바로, Jenkins에 첫 번째 job을 생성하는 것인데요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 ❗❗❗&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;job을 생성하기 전에 해야 할 일이 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ACR과 Jenkins를 연결하기 위한 Environment Variables와 Managed Identity에 대한 Credentials을 먼저 생성해 주어야 하는 것이 선행되어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그럼 먼저 Azure Container Registry용 Environment Variables를 생성해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;2.1-Azure-Container-Registry용-Environment-Variables-생성&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2097&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.1 Azure Container Registry용 Environment Variables 생성&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;[Dashboard]&amp;nbsp;&amp;gt;&amp;nbsp;[Manage&amp;nbsp;Jenkins]&amp;nbsp;&amp;gt;&amp;nbsp;[System]&amp;nbsp;&amp;gt;&amp;nbsp;[Global&amp;nbsp;properties]&amp;nbsp;&amp;gt;&amp;nbsp;[Environment&amp;nbsp;variables]&amp;nbsp;&amp;gt;&amp;nbsp;[Add]&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle; background-color: #ffffff; color: #172b4d; text-align: left;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Name : 변수 명&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Value : Azure Container Registry 로그인 서버 이름 입력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하단의 [Save] 버튼을 클릭하여 저장&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxGbxX/btsEaPUwcJ8/WmZfBQL9CzgvEKn4wKHyDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxGbxX/btsEaPUwcJ8/WmZfBQL9CzgvEKn4wKHyDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxGbxX/btsEaPUwcJ8/WmZfBQL9CzgvEKn4wKHyDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxGbxX%2FbtsEaPUwcJ8%2FWmZfBQL9CzgvEKn4wKHyDk%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;345&quot; height=&quot;390&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;846&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 id=&quot;2.1-Azure-Container-Registry용-Environment-Variables-생성&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2097&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.2 &amp;nbsp;Managed Identity에 대한 Credentials 생성&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ 먼저 Azure Credentials Plugins을 설치해 주어야 합니다.&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;background-color: #fcfcfc; text-align: left;&quot;&gt;✅ Managed Identity를 사용해서 Jenkins에서 ACR에 접근하기 위함입니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Dashboard] &amp;gt; [Manage Jenkins] &amp;gt; [Plugins] &amp;gt; [Available plugins] &amp;gt; [Azure Credentials] 설치 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwxaBG/btsEhywhHi8/0gGLSq51864yccCk1V2yy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwxaBG/btsEhywhHi8/0gGLSq51864yccCk1V2yy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwxaBG/btsEhywhHi8/0gGLSq51864yccCk1V2yy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwxaBG%2FbtsEhywhHi8%2F0gGLSq51864yccCk1V2yy0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;730&quot; height=&quot;374&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;Azure Credentials&lt;/i&gt; Plugin이 설치되었으니 Credentials을 등록해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; [Dashboard] &amp;gt; [Manage Jenkins] &amp;gt; [Credentials] &amp;gt; [System] &amp;gt; [Global credentials (unrestricted)] &amp;gt; [+ Add Credentials] &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1537&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eoHS6I/btsEf3pWTc0/rbn5J1zKMzkWLHJNltn6qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eoHS6I/btsEf3pWTc0/rbn5J1zKMzkWLHJNltn6qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eoHS6I/btsEf3pWTc0/rbn5J1zKMzkWLHJNltn6qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeoHS6I%2FbtsEf3pWTc0%2Frbn5J1zKMzkWLHJNltn6qk%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;1537&quot; height=&quot;462&quot; data-origin-width=&quot;1537&quot; data-origin-height=&quot;462&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;1901&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj64Jt/btsEeEYlEJl/rYqLhGlyngEK27YS2QNWrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj64Jt/btsEeEYlEJl/rYqLhGlyngEK27YS2QNWrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj64Jt/btsEeEYlEJl/rYqLhGlyngEK27YS2QNWrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj64Jt%2FbtsEeEYlEJl%2FrYqLhGlyngEK27YS2QNWrK%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;1901&quot; height=&quot;518&quot; data-origin-width=&quot;1901&quot; data-origin-height=&quot;518&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;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: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;Azure Container Registry에 기여자 역할이 할당된 Managed Identity에 대한 정보를 입력 합니다.&lt;/span&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle; background-color: #ffffff; color: #172b4d; text-align: left;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kind : &lt;b&gt;Azure Managed Identity &lt;/b&gt;(Azure Credentials Plugins 사전 설치 필요)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Subscription ID : Azure Container Registry가 있는 &lt;b&gt;구독 ID&lt;/b&gt; 입력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ID : 연결하고자 하는 Managed Identity의 &lt;b&gt;이름 &lt;/b&gt;입력&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;1099&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wGKoB/btsEa9LYGET/SIgvrBBOegEBPgXB1ozSlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wGKoB/btsEa9LYGET/SIgvrBBOegEBPgXB1ozSlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wGKoB/btsEa9LYGET/SIgvrBBOegEBPgXB1ozSlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwGKoB%2FbtsEa9LYGET%2FSIgvrBBOegEBPgXB1ozSlk%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;593&quot; height=&quot;649&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;1099&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;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: #ffffff; color: #000000; text-align: left;&quot;&gt; 하단의 [Create] 버튼을 클릭하여 Credentials을 생성합니다.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Credentials이 생성되었다면 다음엔 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성한 Credentials에 대한 Verification을 수행해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; 위에서 생성한 Credentials(mi-aks-boc)을 클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddzavY/btsEhAHEOAe/PPPpRLA5MBAim1xE89K6MK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddzavY/btsEhAHEOAe/PPPpRLA5MBAim1xE89K6MK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddzavY/btsEhAHEOAe/PPPpRLA5MBAim1xE89K6MK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddzavY%2FbtsEhAHEOAe%2FPPPpRLA5MBAim1xE89K6MK%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;650&quot; height=&quot;282&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;572&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 좌측의 [Update] 버튼을 클릭합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIVDGz/btsEaW7bOih/2GC3sKTYP9df7ozOkZHe6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIVDGz/btsEaW7bOih/2GC3sKTYP9df7ozOkZHe6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIVDGz/btsEaW7bOih/2GC3sKTYP9df7ozOkZHe6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIVDGz%2FbtsEaW7bOih%2F2GC3sKTYP9df7ozOkZHe6k%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;671&quot; height=&quot;259&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;436&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;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: #ffffff; color: #000000; text-align: left;&quot;&gt; 우측 하단의 [Verify Configuration] 버튼을 클릭하여 유효성을 검사합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1900&quot; data-origin-height=&quot;1138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nNNiH/btsEftCkIPK/KcFJTLKAa7HnZQ5YPjBtb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nNNiH/btsEftCkIPK/KcFJTLKAa7HnZQ5YPjBtb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nNNiH/btsEftCkIPK/KcFJTLKAa7HnZQ5YPjBtb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnNNiH%2FbtsEftCkIPK%2FKcFJTLKAa7HnZQ5YPjBtb1%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;1138&quot; data-origin-width=&quot;1900&quot; data-origin-height=&quot;1138&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약, 하기와 같은 문구가 출력되었다면 유효성 검증은 정상적으로 진행된 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eJfGja/btsEhG8RxqC/V0ODjLsWGDekkP1CGcdsSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eJfGja/btsEhG8RxqC/V0ODjLsWGDekkP1CGcdsSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eJfGja/btsEhG8RxqC/V0ODjLsWGDekkP1CGcdsSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeJfGja%2FbtsEhG8RxqC%2FV0ODjLsWGDekkP1CGcdsSk%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;1470&quot; height=&quot;115&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러나 에러가 발생하기도 하는데요, 특히 Managed Identity에 대한 내용은 구글링으로도 찾기가 어려워 저도 처음에는 많이 헤맸습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;2.1-Azure-Container-Registry용-Environment-Variables-생성&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2097&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.3&amp;nbsp; Managed Identity에 대한 Credentials 생성 시 에러가 발생하는 경우&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;결과부터 적어보자면, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Verify Configuration] 버튼을 클릭했을 때 하기와 같은 메시지가 출력될 경우에는 Managed Identity와 Virtual Machine을 연결해 주어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;⚠️&lt;span style=&quot;color: #000000;&quot;&gt;The provided credentials are not valid: managed identity authentication is not available.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1455&quot; data-origin-height=&quot;231&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btc8Xa/btsEdFwJVyG/uv8g5YZ7fwOQ7nIRPACKRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btc8Xa/btsEdFwJVyG/uv8g5YZ7fwOQ7nIRPACKRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btc8Xa/btsEdFwJVyG/uv8g5YZ7fwOQ7nIRPACKRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbtc8Xa%2FbtsEdFwJVyG%2Fuv8g5YZ7fwOQ7nIRPACKRK%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;1455&quot; height=&quot;231&quot; data-origin-width=&quot;1455&quot; data-origin-height=&quot;231&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;제가 생각하기에는 Jenkins Server가 구동되는 Spoke VM에 Managed Identity에 대한 권한 또는 연결점이 없어서 이러한 에러가 발생하는 것 같습니다. (아니라면 알려주세요!)&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;그래서 가상 머신과 Managed Identity를 연결하는 과정을 추가적으로 진행해 주었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[가상&amp;nbsp;머신]&amp;nbsp;&amp;gt;&amp;nbsp;[설정]&amp;nbsp;&amp;gt;&amp;nbsp;[ID]&amp;nbsp;&amp;gt;&amp;nbsp;[사용자&amp;nbsp;할당&amp;nbsp;항목]&amp;nbsp;&amp;gt;&amp;nbsp;[+&amp;nbsp;추가]&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwAjRF/btsEfqyO9zg/jEeh7MWRJ661xxyQua9TG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwAjRF/btsEfqyO9zg/jEeh7MWRJ661xxyQua9TG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwAjRF/btsEfqyO9zg/jEeh7MWRJ661xxyQua9TG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwAjRF%2FbtsEfqyO9zg%2FjEeh7MWRJ661xxyQua9TG0%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;463&quot; height=&quot;428&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;496&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VM에서 Managed Identity를 사용하여 Azure Login을 진행합니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;641&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PtaPL/btsEcrrQ6a7/JKONB9WnbnZ80y4jCq4qZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PtaPL/btsEcrrQ6a7/JKONB9WnbnZ80y4jCq4qZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PtaPL/btsEcrrQ6a7/JKONB9WnbnZ80y4jCq4qZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPtaPL%2FbtsEcrrQ6a7%2FJKONB9WnbnZ80y4jCq4qZ0%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;372&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;641&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[Verify Configuration]을 다시 클릭하여 유효성 검사를 재수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 정상적으로 유효성 검사가 진행되는 것을 확인하실 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 본격적으로 Jenkins, ArgoCD를 통해 CI/CD Pipeline을 구성하기에 앞서 필요한 사전 준비에 대해 다뤄보았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글부터는 실제 Jenkins에서 Job을 생성하는 과정에 대해 다뤄보겠습니다.&amp;nbsp;&lt;/p&gt;</description>
      <category>TOPIC/DevOps</category>
      <category>AKS</category>
      <category>ArgoCD</category>
      <category>Azure</category>
      <category>CI/CD</category>
      <category>CICD</category>
      <category>Jenkins</category>
      <category>managed identity</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/19</guid>
      <comments>https://with-cloud.tistory.com/19#entry19comment</comments>
      <pubDate>Wed, 31 Jan 2024 14:46:37 +0900</pubDate>
    </item>
    <item>
      <title>Kubernetes Network Policy 공부하기 (2)</title>
      <link>https://with-cloud.tistory.com/18</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이전 글에서 Network Policy에 대해서 공부해 보았는데요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 실제로 Network Policy에 대해 테스트한 내용에 대해 다뤄보도록 하겠습니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Policy에 대한 이론을 정리한 글은 아래 링크를 참고해 주세요!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/17&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://with-cloud.tistory.com/17&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Namespace 생성 및 Label 지정&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트에 사용할 namespace를 생성합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl create ns ns-01&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl create ns ns-02&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성된 namespace 확인하기 위해 하기 명령어를 입력합니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl get ns | awk &amp;lsquo;NR==1 || /ns-/'&lt;/i&gt; &amp;larr; 이 명령어는 첫 번째 행 또는 ns-라는 문자열이 포함된 행을 출력하라는 의미입니다.&lt;br /&gt;&lt;/span&gt;&lt;img style=&quot;caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/FF9LG/btsDnEljEqu/ncxFhK6DGxj94ERcdgTkM1/img.png&quot; width=&quot;530&quot; height=&quot;80&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;118&quot; data-is-animation=&quot;false&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;kubectl 명령어 외 파이프라인 뒤 명령어의 경우 하기 내용을 확인해 주세요!&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;awk&lt;/i&gt; 명령어는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자로부터 직접 입력을 받거나, 파일을 지정하여 데이터를 가공하고 처리하는 명령어입니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;NR은&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 레코드의 번호를 의미합니다. 예를 들어, &lt;b&gt;NR==1&lt;/b&gt;은 첫 번째 행을 의미하죠.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;/ /은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정규식 패턴을 의미합니다. 예를 들어, &lt;b&gt;/ns-/&lt;/b&gt;는 ns-라는 문자열과 일치하는 것이 있는지 확인하기 위한 패턴입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;namespace에 label을 지정해 줍니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl label namespace ns-01 ns=ns-01&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지정된 label을 확인하기 위해 하기와 같은 명령어를 입력합니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl get ns ns-01 --show-labels&lt;/i&gt;&lt;/span&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3h9KP/btsDrjUf2tz/8lGFK8OKVwOkaKMuYGwUNK/img.png&quot; width=&quot;713&quot; height=&quot;69&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;89&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Deployment 생성&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-01 namespace에 Deployment를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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: amsy810/echo-nginx:v2.0
        ports:
        - containerPort: 80&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl apply -f deploy.yaml&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/Lh62Z/btsDrm4vtG9/szcbh1Ek6FFwHm42Okh0T0/img.png&quot; width=&quot;540&quot; height=&quot;72&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;88&quot; data-origin-width=&quot;660&quot; /&gt;&lt;br /&gt;&lt;/i&gt;&lt;i&gt;image&lt;/i&gt;는 &lt;i&gt;&lt;b&gt;&amp;ldquo;쿠버네티스 완벽 가이드&amp;rdquo;&lt;/b&gt;&lt;/i&gt; 책의 image를 참고하였습니다. &lt;i&gt;(curl 등 network 통신 테스트가 목적이기 때문입니다.)&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pod ip를 조회합니다. &lt;i&gt;(AKS를 종료한 후 재시작 할 경우, pod의 ip는 변경된다는 점, 잊지 마세요!)&lt;/i&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl get po -o wide&lt;/i&gt;&lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/bkwVbt/btsDqPePkDV/k92swkK7zuzidZfxjujoyk/img.png&quot; width=&quot;661&quot; height=&quot;97&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;174&quot; data-origin-width=&quot;1189&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 ip 중 하나로 curl 명령어를 날립니다. (AKS에 접근할 수 있는 Spoke 대역의 VM에서 명령어를 입력해야 합니다.)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/bdkh15/btsDrlxK4WF/2ek0N4c6scIuC7nLTw7Pvk/img.png&quot; width=&quot;711&quot; height=&quot;506&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;757&quot; data-origin-width=&quot;1064&quot; /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;정상적으로 nginx의 default page가 보이는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-02 namespace에 Deployment를 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-test
  namespace: ns-02
  labels:
    app: test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test
        image: amsy810/echo-nginx:v2.0
        ports:
        - containerPort: 80&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;i&gt;kubectl apply -f deploy1.yaml&lt;/i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/cTFtfW/btsDp4Q5zbG/5VV9IU4VTzGHGqkivQqz0K/img.png&quot; width=&quot;461&quot; height=&quot;41&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;60&quot; data-origin-width=&quot;675&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pod ip를 조회합니다.&lt;i&gt;(AKS를 종료한 후 재시작 할 경우, pod의 ip는 변경된다는 점, 잊지 마세요!)&lt;/i&gt; &lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl get po -o wide -n ns-02&lt;/i&gt;&lt;/span&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b12I2U/btsDntYGSlv/kMqgkPu0rv1ky0KtgKziK0/img.png&quot; width=&quot;678&quot; height=&quot;86&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;146&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. Network Policy 생성 1 - podSelector&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.1 Test Architecture&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;※ pod는 Deployment를 통해 배포되었지만, pod 간 트래픽 흐름을 나타내기 위해 Deployment 표기는 생략한 점 참고 부탁드립니다.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-width-type=&quot;pixel&quot; data-width=&quot;760&quot; data-layout=&quot;center&quot; data-node-type=&quot;mediaSingle&quot;&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1295&quot; data-origin-height=&quot;849&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bo83R/btsDnbX2awP/AmQ3bimzsnKkRNLjQdCI4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bo83R/btsDnbX2awP/AmQ3bimzsnKkRNLjQdCI4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bo83R/btsDnbX2awP/AmQ3bimzsnKkRNLjQdCI4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBo83R%2FbtsDnbX2awP%2FAmQ3bimzsnKkRNLjQdCI4K%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;1295&quot; height=&quot;849&quot; data-origin-width=&quot;1295&quot; data-origin-height=&quot;849&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Public IP가 붙은 Hub 대역의 VM에서 Spoke 대역의 VM에 접근합니다. (&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke 대역의 VM에는 Public IP를 붙이지 않았기 때문입니다.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-01의 모든 pod들에 대해 ingress/egress 트래픽을 차단하는 Network Policy를 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 시나리오는 다음과 같습니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster 외부&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Spoke VM에서 ns-01의 pod로 curl 명령어를 날립니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster 내부&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-01의 임의의 pod에서 ns-02의 임의의 pod로 curl 명령어 실행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-02의 임의의 pod에서 ns-01의 임의의 pod로 curl 명령어 실행&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.2 Test&amp;nbsp;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;ns-01 namespace 내 모든 pod들에 대해 ingress/egress 트래픽을 모두 차단하는 Network Policy를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: np-deny-all
  namespace: ns-01
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Policy를 생성하기 위해 하기와 같은 명령어를 입력합니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl apply -f np.yaml&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/bHAbTQ/btsDqTO2fto/T4wzIgEnPhHNFUG9ByzKRk/img.png&quot; width=&quot;564&quot; height=&quot;48&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;62&quot; data-origin-width=&quot;728&quot; /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster &lt;b&gt;외부&lt;/b&gt;에서 들어오는 트래픽에 대한 테스트를 하기 위해 curl 명령어를 사용합니다.&lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/c7Gwgz/btsDoqmNu57/iLOuDjCYID7nKMly7DgnjK/img.png&quot; width=&quot;633&quot; height=&quot;46&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;58&quot; data-origin-width=&quot;798&quot; /&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Policy를 적용한 후에는 aks와 같은 VNet 대역에 있는 VM에서 curl 명령어를 해당 pod의 ip로 날려도 통신이 되지 않는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-width-type=&quot;pixel&quot; data-width=&quot;500&quot; data-layout=&quot;center&quot; data-node-type=&quot;mediaSingle&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster &lt;b&gt;내부&lt;/b&gt;에서의 pod 간 통신을 테스트하기 위해 pod 내 container에 접근하여 curl 명령어를 날립니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Policy의 적용을 받은 pod 중 하나를 실행하여 namespace 2의 pod에게 curl 명령어를 날립니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;➡️ &lt;/b&gt;egress가 차단 되어 &lt;i&gt;&lt;b&gt;curl: (28) Connection timed out after 5001 milliseconds&lt;/b&gt;&lt;/i&gt;라는 메시지가 출력되는 것을 확인할 수 있습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl exec -it nginx-deployment-799744886-4nvls -- curl --connect-timeout 5 10.10.144.28&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/tZZyv/btsDntxBERF/BkhzPrIr7KGbCaWDTc0kSK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;82&quot; data-origin-width=&quot;1525&quot; /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;namespace 2에 pod를 하나 생성하여 Network Policy의 적용을 받은 pod 중 하나로 curl 명령어를 날립니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;b&gt;➡️&lt;/b&gt; ingress가 차단되어 &lt;i&gt;&lt;b&gt;curl: (28) Connection timed out after 5001 milliseconds&lt;/b&gt;&lt;/i&gt;라는 메시지가 출력되는 것을 확인할 수 있습니다. &lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl exec -it deployment-test-f8dbf68bd-9vr78 -- curl --connect-timeout 5 10.10.144.23&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/vC9qh/btsDp6Bo6IN/swgwzIcKgW0YJyIUVQIFZK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;85&quot; data-origin-width=&quot;1552&quot; /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. Network Policy 생성 2 - namespaceSelector&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.1 Test Architecture&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;i&gt;※ pod는 Deployment를 통해 배포되었지만, pod 간 트래픽 흐름을 나타내기 위해 Deployment 표기는 생략한 점 참고 부탁드립니다.&lt;/i&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div data-width-type=&quot;pixel&quot; data-width=&quot;760&quot; data-layout=&quot;center&quot; data-node-type=&quot;mediaSingle&quot;&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;879&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SYALz/btsDp35MAUz/27y4hpgyPbJWhpYRMVxId0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SYALz/btsDp35MAUz/27y4hpgyPbJWhpYRMVxId0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SYALz/btsDp35MAUz/27y4hpgyPbJWhpYRMVxId0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSYALz%2FbtsDp35MAUz%2F27y4hpgyPbJWhpYRMVxId0%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;1412&quot; height=&quot;879&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;879&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Public IP가 붙은 Hub 대역의 VM에서 Spoke 대역의 VM에 접근합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-01에 생성했던 network policy를 제거합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-01 namespace에 &lt;b&gt;ns: ns-01&lt;/b&gt;이라는 Label이 붙어 있는 것을 다시 확인합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-02의 모든 pod들에 대해 ingress/egress 트래픽을 차단하는 Network Policy를 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-02의 배포된 pod들 중 &lt;b&gt;app: test&lt;/b&gt; Label을 가지는 pod들에 대해 egress 트래픽을 허용하는 Network Policy를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 시나리오는 다음과 같습니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster 내부&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-02에 배포된 pod들 중 &lt;b&gt;app: test&lt;/b&gt; Label을 가지는 pod에서 ns-01의 임의의 pod로 curl 명령어 실행&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-02에 배포된 pod들 중 &lt;b&gt;app: hyein&lt;/b&gt; Label을 가지는 pod에서 ns-01의 임의의 pod로 curl 명령어 실행&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.2 Test&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;namespace 2의 모든 pod들에 대한 ingress/egress를 차단하기 위한 network policy를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: np-deny-all
  namespace: ns-02
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;namespace 2의 pod 중 &lt;b&gt;app: test&lt;/b&gt;라는 Label을 가진 pod에 대해서만 namespace 1에 있는 모든 pod로 Egress 트래픽을 보내는 것을 허용하기 위해 namespaceSelector 옵션을 사용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: np-deny-egress-to-ns-01
  namespace: ns-02
spec:
  podSelector:
    matchLabels:
      app: test
  policyTypes:
    - Egress
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          ns: ns-01
    ports:
    - protocol: TCP
      port: 80&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Policy를 생성하기 위해 하기와 같은 명령어를 실행합니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl apply -f np4.yaml&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/ciJ9zV/btsDpxlHJDb/T7Ua0IeTKk9cCJPDX3CKn1/img.png&quot; width=&quot;550&quot; height=&quot;46&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;61&quot; data-origin-width=&quot;730&quot; /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl apply -f np2.yaml&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/ciJ9zV/btsDpxlHJDb/T7Ua0IeTKk9cCJPDX3CKn1/img.png&quot; width=&quot;550&quot; height=&quot;46&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;61&quot; data-origin-width=&quot;730&quot; /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-02 namespace에 있는 Deployment 및 Label를 조회하기 위한 명령어는 하기와 같습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;i&gt;kubectl get deploy -n ns-02 --show-labels&lt;/i&gt;&lt;/i&gt;&lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/bDdY4m/btsDpxeYYKy/3hGrLETF2KlFGenOan5MNK/img.png&quot; width=&quot;699&quot; height=&quot;86&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;117&quot; data-origin-width=&quot;955&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;➡️ deployment-test에서 ns-01 namespace로 보내는 egress 트래픽은 차단단되어야 하고 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;deployment-hyein에서 ns-01 namespace로 보내는 egress 트래픽은 허용되어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면 테스트 결과를 확인해 보겠습니다!&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;deployment-test의 pod에서 ns-01에 있는 pod 중 임의의 pod로 curl 명령어 날립니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl exec -it deployment-test-f8dbf68bd-9vr78 -- curl --connect-timeout 5 10.10.144.5&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/bCezy7/btsDrnoPVzd/K2iM2LkNj26cBeI6HpdMMk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;59&quot; data-origin-width=&quot;1542&quot; /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;deployment-hyein의 pod에서 ns-01에 있는 pod 중 임의의 pod로 curl 명령어를 날립니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl exec -it deployment-hyein-87b66c554-2dsdb -- curl --connect-timeout 5 10.10.144.5&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/cW92kj/btsDqkMWv3x/2ceVs2eViVb7dPXXeCjxT1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;83&quot; data-origin-width=&quot;1553&quot; /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. Network Policy 생성 3 - ipBlock&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5.1 Test Architecture&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;i&gt;※ pod는 Deployment를 통해 배포되었지만, pod 간 트래픽 흐름을 나타내기 위해 Deployment 표기는 생략한 점 참고 부탁드립니다.&lt;/i&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;※ ns-02의 Deployment 및 Network Policy는 5. Network Policy 생성 3 - ipBlock에서 사용하지 않아 표기를 생략한 점 참고 부탁드립니다.&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-width-type=&quot;pixel&quot; data-width=&quot;760&quot; data-layout=&quot;center&quot; data-node-type=&quot;mediaSingle&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqUy3m/btsDqMbl1qA/nR9vENPamD7ryRgpqhIKV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqUy3m/btsDqMbl1qA/nR9vENPamD7ryRgpqhIKV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqUy3m/btsDqMbl1qA/nR9vENPamD7ryRgpqhIKV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqUy3m%2FbtsDqMbl1qA%2FnR9vENPamD7ryRgpqhIKV0%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;1201&quot; height=&quot;568&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Public IP가 붙은 Hub 대역의 VM에서 Spoke 대역의 VM에 접근합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2개의 Spoke VM에 각각 접근합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-01에 ingres/egress를 모두 차단하는 network policy를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;app: test&lt;/b&gt; Label을 가지는 pod들에 대해 특정 ip 대역에서 들어오는 ingress 트래픽을 허용하는 Network Policy를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 시나리오는 다음과 같습니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster 외부&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;10.10.128.4의 ip 주소를 가지는 Spoke VM에서 curl 명령어 실행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;10.10.128.5의 ip 주소를 가지는 Spoke VM에서 curl 명령어 실행&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5.2 Test - spoke-vm 대역에서 pod로 직접 통신&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;ns-01 namespace 내 &lt;b&gt;app: nginx&lt;/b&gt;라는 Label Selector을 가지고 있는 pod들에 대해 snet-vm(10.10.128.0/27) 대역에서 들어오는 ingress 트래픽을 허용하되, &lt;i&gt;except&lt;/i&gt; field를 사용하여 10.10.128.5 ip 주소를 가지는 source에서 들어오는 ingress 트래픽은 차단하는 Network Policy를 생성합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: np-with-ipblock
  namespace: ns-01
spec:
  podSelector:
    matchLabels:
      app: nginx
  policyTypes:
    - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 10.10.128.0/27
        except:
        - 10.10.128.5/32
    ports:
    - protocol: TCP
      port: 80&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Policy를 생성하기 위해 하기 명령어를 실행합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl apply -f np1.yaml&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/b9p6sC/btsDqnbNtfr/QWT0DdcgUFtvN0roQ9jr3K/img.png&quot; width=&quot;579&quot; height=&quot;50&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;68&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅&amp;nbsp;현재 ns-01 namespace에는 모든 ingress/egress 트래픽을 차단하는 &lt;b&gt;np-deny-all&lt;/b&gt;이라는 network policy와 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 subnet 대역에서 들어오는 트래픽만 허용하는 &lt;b&gt;np-with-ipblock &lt;/b&gt;이라는 network policy가 배포되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;text-align: start;&quot;&gt;✅&lt;/span&gt; Network Policy는 &lt;u&gt;합집합&lt;/u&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;➡️ 특정 subnet 대역에서 Service의 External IP로 접속을 시도해도 통신이 &lt;b&gt;불가&lt;/b&gt;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;snet-vm 대역에 생성한 2개의 VM에 접속하여 테스트를 진행합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;vm-01 (10.10.128.4)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pod 중 하나로 curl 명령어를 실행하면 하기 빨간 박스와 같이 통신이 가능한 것을 확인할 수 있습니다.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpdJp6/btsDqoBMUM4/uv6nlRF9suuOV2WGLpdKi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpdJp6/btsDqoBMUM4/uv6nlRF9suuOV2WGLpdKi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpdJp6/btsDqoBMUM4/uv6nlRF9suuOV2WGLpdKi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpdJp6%2FbtsDqoBMUM4%2Fuv6nlRF9suuOV2WGLpdKi0%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;1312&quot; height=&quot;56&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;56&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;vm-02 (10.10.128.5)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pod 중 하나로 curl 명령어를 실행하면 하기 빨간 박스와 같이 통신이 불가한 것을 확인할 수 있습니다.&lt;b&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/nChn6/btsDqb3MHp2/9GhkVgH2QkvoxQUywdzciK/img.png&quot; width=&quot;632&quot; height=&quot;48&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;63&quot; data-origin-width=&quot;823&quot; /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6. Network Policy 생성 4 - ipBlock&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6.1 Test Architecture&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;i&gt;※ pod는 Deployment를 통해 배포되었지만, pod 간 트래픽 흐름을 나타내기 위해 Deployment 표기는 생략한 점 참고 부탁드립니다.&lt;/i&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;※ ns-02의 Deployment 및 Network Policy는 6. Network Policy 생성 4 - ipBlock에서 사용하지 않아 표기를 생략한 점 참고 부탁드립니다.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-width-type=&quot;pixel&quot; data-width=&quot;760&quot; data-layout=&quot;center&quot; data-node-type=&quot;mediaSingle&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1606&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baGvEs/btsDqiBz66G/Atnh3hTmXBnh2Slpxk8u4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baGvEs/btsDqiBz66G/Atnh3hTmXBnh2Slpxk8u4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baGvEs/btsDqiBz66G/Atnh3hTmXBnh2Slpxk8u4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaGvEs%2FbtsDqiBz66G%2FAtnh3hTmXBnh2Slpxk8u4k%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;1606&quot; height=&quot;786&quot; data-origin-width=&quot;1606&quot; data-origin-height=&quot;786&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Public IP가 붙은 Hub 대역의 VM에서 테스트 수행합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-01에 ingres/egress를 모두 차단하는 network policy를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Node ip 대역에서 들어오는 ingress 트래픽을 허용하는 network policy를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 시나리오는 다음과 같습니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster 외부&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hub 대역의 VM에서 Internal Load Balancer의 ip를 통해 Application에 접근할 수 있는지 확인합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6.2 Test - Hub VM - Service - Deployment - Pod로의 Ingerss 통신 제어&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;ns-01 namespace 내 nginx-deployment 앞단에 LoadBalancer Type의 Service를 배포합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Service
metadata:
  name: svc-deploy-nginx
  namespace: ns-01
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: &quot;true&quot;
    service.beta.kubernetes.io/azure-load-balancer-internal-subnet: &quot;snet-lb&quot;
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
  type: LoadBalancer&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Service를 배포하기 위해 하기 명령어를 실행합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl apply -f svc1.yaml&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/bJZP4i/btsDpxsuF01/VjloFhwPRtML1kL4ynwgl0/img.png&quot; width=&quot;587&quot; height=&quot;42&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;56&quot; data-origin-width=&quot;783&quot; /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Service의 External IP를 확인하기 위해 하기 명령어를 실행합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl get svc&lt;/i&gt;&lt;i&gt;&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/xYI1n/btsDqQ5XaJD/i1cKHZDys2ggTaXzpt93C1/img.png&quot; width=&quot;668&quot; height=&quot;52&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;92&quot; data-origin-width=&quot;1181&quot; /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Internal Load Balancer의 External IP를 통해 Appilcation에 접근해 봅니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;접근이 불가한 것을 확인할 수 있습니다. &lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/E3mRp/btsDqTBx8Xj/vkpq3OkxiBrOqnraoVz08k/img.png&quot; width=&quot;690&quot; height=&quot;531&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;1022&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;왜 접근이 불가능할까요&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;❓&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ 현재 ns-01 namespace에는 모든 ingress/egress 트래픽을 차단하는 &lt;b&gt;np-deny-all&lt;/b&gt;이라는 network policy와 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 subnet 대역에서 들어오는 트래픽만 허용하는 &lt;b&gt;np-with-ipblock&lt;/b&gt; 이라는 network policy가 배포되어 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ Network Policy는 &lt;u&gt;합집합&lt;/u&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;➡️ Hub VM에서 Service의 External IP로 접속을 시도해도 통신이 &lt;b&gt;불가&lt;/b&gt;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Load Balancer를 타고 들어온 트래픽이 Node를 거쳐 pod로 흐를 수 있도록 node들의 ip를 허용해 주는 network policy를 생성해야 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: np-with-ipblock-for-node
  namespace: ns-01
spec:
  podSelector:
  policyTypes:
    - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 10.10.144.0/20
    ports:
    - protocol: TCP
      port: 80&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AKS의 node들이 배포되어 있는 subnet 대역을 cidr로 지정해 줍니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Policy를 생성하기 위해 하기와 같은 명령어를 입력합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl apply -f np5.yaml&lt;/i&gt;&lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/cAPYqA/btsDmVgTCFF/JzZcOu75Gtbep86UYOuflK/img.png&quot; width=&quot;700&quot; height=&quot;44&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;53&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ns-01에 배포된 Network Policy를 조회하기 위해 하기와 같은 명령어를 입력합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;kubectl get netpol&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/SRU8N/btsDp7tzPtX/5JT6bNqHm2XH4Pkmm8bvck/img.png&quot; width=&quot;554&quot; height=&quot;117&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;143&quot; data-origin-width=&quot;677&quot; /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Internal Load Balancer의 External IP를 통해 Appilcation에 다시 한번 접근해 봅니다.&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1052&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MfgBr/btsDpyybp0l/IBlRlRie1mxKhYKlajPW1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MfgBr/btsDpyybp0l/IBlRlRie1mxKhYKlajPW1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MfgBr/btsDpyybp0l/IBlRlRie1mxKhYKlajPW1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMfgBr%2FbtsDpyybp0l%2FIBlRlRie1mxKhYKlajPW1K%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;1052&quot; height=&quot;203&quot; data-origin-width=&quot;1052&quot; data-origin-height=&quot;203&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;와! 이번에는 접속이 가능하군요!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ClientIP에 10.10.144.11 (node ip 중 하나)가 찍힌 것을 통해 정상적으로 network policy가 적용된 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이상으로 Network Policy에 대한 테스트를 마치도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;감사합니다!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>AKS</category>
      <category>Azure</category>
      <category>azure kubernetes service</category>
      <category>Kubernetes</category>
      <category>network policy</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/18</guid>
      <comments>https://with-cloud.tistory.com/18#entry18comment</comments>
      <pubDate>Fri, 12 Jan 2024 21:40:44 +0900</pubDate>
    </item>
    <item>
      <title>Kubernetes Network Policy 공부하기 (1)</title>
      <link>https://with-cloud.tistory.com/17</link>
      <description>&lt;div data-pm-slice=&quot;0 0 []&quot; data-local-id:=&quot;b3936ace-d4fb-4cca-b613-d069b1aa1d6e&quot; data-layout=&quot;default&quot; data-parameters=&quot;{&amp;quot;macroParams&amp;quot;:{},&amp;quot;macroMetadata&amp;quot;:{&amp;quot;schemaVersion&amp;quot;:{&amp;quot;value&amp;quot;:&amp;quot;1&amp;quot;},&amp;quot;title&amp;quot;:&amp;quot;목차 영역&amp;quot;,&amp;quot;macroId&amp;quot;:{&amp;quot;value&amp;quot;:&amp;quot;6219e4cf-7a5a-4d30-9356-e03f5372ef8b&amp;quot;}}}&quot; data-extension-key=&quot;toc-zone&quot; data-extension-type=&quot;com.atlassian.confluence.macro.core&quot; data-node-type=&quot;bodied-extension&quot;&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 Kubernetes Network Policy에 대해서 공부해 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 이론적으로 Network Policy에 대해서 알아본 후 다음 글에서 실제 테스트한 내용을 다뤄보도록 하겠습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Network Policy란?&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster 내부에서 pod 간 통신 시 트래픽 규칙을 규정하는 역할을 하는 object입니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본적으로 Network Policy를 사용하지 않는 경우 Kubernetes Cluster 내부의 모든 pod는 서로 통신 가능하지만 Network Policy 사용 시 pod 간 통신을 제어할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Kubernetes Cluster가 Network Policy를 지원하는 &lt;i&gt;&lt;b&gt;네트워크 플러그인(CNI Plug-in)&lt;/b&gt;&lt;/i&gt;을 사용해야 Network Policy를 활성화할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ 물론, Kubernetes Cluster가 사용하는 CNI가 Network Policy를 지원하지 않더라도 Network Policy object 자체는 생성할 수 있습니다. &lt;br /&gt;❌ 그러나 동작은 하지 않는 점! 주의하시길 바랍니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Policy는 Namespace Scoped 리소스로 &lt;b&gt;Namespace 별&lt;/b&gt;로 생성해야 합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Kubernetes Service의 경우 Network Policy를 구현하는 &lt;u&gt;두 가지 방법&lt;/u&gt;을 제공하고 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Azure Network Policy Manager&lt;/b&gt; : Azure에서 자체적으로 구현한 정책&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Calico Network Policy&lt;/b&gt; : Tigera에서 만든 오픈 소스 네트워크 및 네트워크 보안 솔루션&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 Policy 간 차이점은 하기 링크를 참고해 주세요 :)&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/azure/aks/use-network-policies#differences-between-azure-network-policy-manager-and-calico-network-policy-and-their-capabilities&quot;&gt;https://learn.microsoft.com/ko-kr/azure/aks/use-network-policies#differences-between-azure-network-policy-manager-and-calico-network-policy-and-their-capabilities&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1704872189594&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;네트워크 정책을 사용하여 Pod 트래픽 보안 - Azure Kubernetes Service&quot; data-og-description=&quot;AKS(Azure Kubernetes Service)에서 Kubernetes 네트워크 정책을 사용하여 pod 안팎으로 흐르는 트래픽을 보호하는 방법 알아보기&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/ko-kr/azure/aks/use-network-policies#differences-between-azure-network-policy-manager-and-calico-network-policy-and-their-capabilities&quot; data-og-url=&quot;https://learn.microsoft.com/ko-kr/azure/aks/use-network-policies&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cNvlWC/hyU2pjji3G/uHz2ubDwlXfDMgMckKfTrK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/azure/aks/use-network-policies#differences-between-azure-network-policy-manager-and-calico-network-policy-and-their-capabilities&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/ko-kr/azure/aks/use-network-policies#differences-between-azure-network-policy-manager-and-calico-network-policy-and-their-capabilities&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cNvlWC/hyU2pjji3G/uHz2ubDwlXfDMgMckKfTrK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;네트워크 정책을 사용하여 Pod 트래픽 보안 - Azure Kubernetes Service&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AKS(Azure Kubernetes Service)에서 Kubernetes 네트워크 정책을 사용하여 pod 안팎으로 흐르는 트래픽을 보호하는 방법 알아보기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[AKS] &amp;gt; [설정] &amp;gt; [네트워킹] 탭에서 [네트워크 정책]을 확인할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/bHBeJN/btsDdBW6gCe/Eowie0k2xZENCIdAa718b0/img.png&quot; width=&quot;558&quot; height=&quot;304&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;350&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Network Policy를 통한 Kubernetes Cluster 내 pod 간 트래픽 제어 방식&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ Ingress 트래픽 제어와 Egress 트래픽 제어는 독립적으로 선언됩니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Ingress 트래픽과 Egress 트래픽 둘 다를 제어하고자 한다면 각각 규칙을 선언해 줘야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ Network Policy는 충돌 되지 않으며 합산 되어 적용됩니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 특정 방향에 대해 여러 개의 Policy가 존재할 경우에는 해당 Policy 모두가 적용됩니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. Network Policy 종류&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ podSelector와 namespaceSelector는 Kubernetes Cluster 내부의 통신 제어 시 사용하는 것이 권장되고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ipBlock의 경우 Kubernetes Cluster 외부 네트워크 제어에 사용하는 것이 권장됩니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cf) pod ip는 임시적이고 예측할 수 없어 pod의 ip로 network를 통제하는 것이 비효율적이기 때문입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; ✅ podSelector와 namespaceSelector는 ingress/egress rule에서 두 종류를 함께 지정하여 사용할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Policy의 종류에 대해 좀 더 알아보도록 하겠습니다.&amp;nbsp;&lt;/span&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;3.1 podSelector&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 pod에서 들어오는(Ingress), 특정 pod로 나가는(Egress) 통신을 제어하는 정책으로&amp;nbsp;Selector를 사용하여 Selector와 일치하는 pod에 대한 ingress/egress rule을 지정합니다.&amp;nbsp;&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;3.2 namespaceSelector&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 Namespace 상에 있는 pod에서 들어오는(Ingress), 특정 Namespace 상에 있는 pod로 나가는(Egress) 통신을 제어하는 정책으로&amp;nbsp;Selector를 사용하여 Selector와 일치하는 pod에 대한 ingress/egress rule을 지정합니다.&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;3.3 ipBlock&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 IP Block(CIDR 범위)에서 들어오는(Ingress), 특정 IP Block(CIDR 범위)로 나가는(Egress) 통신을 제어하는 정책입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. Network Policy 예제&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.1 Kubernetes 공식 문서 예제&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(출처 : &lt;a href=&quot;https://kubernetes.io/docs/concepts/services-networking/network-policies/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kubernetes.io/docs/concepts/services-networking/network-policies/&lt;/a&gt;)&lt;/p&gt;
&lt;pre id=&quot;code_1704873980229&quot; class=&quot;yaml&quot; data-ke-language=&quot;highlight.js&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector: # Network Policy를 적용할 pod 명시 
    matchLabels:
      role: db # Label Selector를 사용하기 때문에 여러 pod를 대상으로 할 수 있음 
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
        - ipBlock:
            cidr: 172.17.0.0/16
            except:
              - 172.17.1.0/24
        - namespaceSelector:
            matchLabels:
              project: myproject # Namespace에 Label 먼저 지정해 줘야 함 
        - podSelector: 
            matchLabels:
              role: frontend
      ports:
        - protocol: TCP
          port: 6379
  egress:
    - to:
        - ipBlock:
            cidr: 10.0.0.0/24
      ports:
        - protocol: TCP
          port: 5978
          endPort: 6000&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spec section 하위 ingress / egress는 규칙들의 집합입니다.&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ingress의 경우 &lt;b&gt;from&lt;/b&gt; field를 사용하고 egress의 경우 &lt;b&gt;to&lt;/b&gt; field를 사용합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;policyTypes
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선택한 pod에 대한 Policy를 적용할 것인지 그 여부를 나타내는 field입니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;policyTypes가 명시되지 않은 경우 기본적으로 Ingress와 관련된 정책으로 인식하게 되며, Egress는 명시해 주어야 합니다.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;cf) ingress와 egress를 모두 차단하고자 할 경우 policyTypes에 ingress와 egress를 모두 명시해 주어야 합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;endPort&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;field를 사용하여 &lt;/span&gt;단일 포트 대신 포트 범위를 대상으로 지정할 수 있습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;이 field를 지원하는 CNI Plug-in에서만 사용할 수 있으며, 만약 endPort field를 지원하지 않는 Plug-in인 경우 endPort field를 사용하여도 port field만 적용됩니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.2 Ingress나 Egress를 모두 허용하고자 할 경우&lt;/h4&gt;
&lt;pre id=&quot;code_1704874092520&quot; class=&quot;yaml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;highlight.js&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: np-allow-all
  namespace: default
spec:
  podSelector: {}
  egress:
  - {}
  ingress:
  - {}
  policyTypes:
  - Ingress
  - Egress&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;{}는 모두 포함한다는 의미입니다. (빈칸으로 놔두는 셈이죠.)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;지정한 Namespace에 배포된 모든 pod에 대해 egress/ingress를 허용하겠다라는 의미입니다.&amp;nbsp;&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;4.3 Ingress나 Egress를 모두 차단하고자 할 경우&lt;/h4&gt;
&lt;pre id=&quot;code_1704874108869&quot; class=&quot;bash&quot; data-ke-language=&quot;highlight.js&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: np-deny-all
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spec section 하위에 ingress/egress 규칙을 지정한 field 없이 policyTypes를 Ingress/Egress로 지정할 경우 허용되는 규칙이 없기 때문에 모든 트래픽이 차단되게 됩니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Network Policy의 이론적인 내용에 대해 다뤄 보았는데요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 실제로 Azure Kubernetes Service 내에서 Network Policy를 통해서 pod 간의 트래픽을 제어하는 방식에 대해 테스트한 내용으로 돌아 오겠습니다.  &lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>AKS</category>
      <category>Azure</category>
      <category>azure kubernetes service</category>
      <category>Kubernetes</category>
      <category>network policy</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/17</guid>
      <comments>https://with-cloud.tistory.com/17#entry17comment</comments>
      <pubDate>Wed, 10 Jan 2024 17:01:59 +0900</pubDate>
    </item>
    <item>
      <title>Application Gateway에 SSL 인증서를 적용하여 HTTPS로 Application 접근하기</title>
      <link>https://with-cloud.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 Application Gateway에 SSL 인증서를 적용하여 백 엔드 Application에 HTTPS로 접근하도록 테스트해 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SSL/TLS 관련 정리는 아래 링크를 참조해 주세요!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/15&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://with-cloud.tistory.com/15&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704629163467&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;SSL/TLS 알아 보기&quot; data-og-description=&quot;안녕하세요. HYEN입니다. 이번에는 Application Gateway SSL 인증서를 적용하여 저와 동기가 만든 Web Server를 https를 이용해서 접근해 보려고 하던 도중, 대체 SSL이 무엇인가! 하는 궁금증이 생겨 공부해 &quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/15&quot; data-og-url=&quot;https://with-cloud.tistory.com/15&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iQbVg/hyU2hkrJ7t/KJNjC0hKmbulVm2QlZ7JK1/img.png?width=800&amp;amp;height=317&amp;amp;face=0_0_800_317,https://scrap.kakaocdn.net/dn/bvb7nT/hyU2td7snf/ViBGdFBPvATVKmBAnIpls0/img.png?width=800&amp;amp;height=317&amp;amp;face=0_0_800_317,https://scrap.kakaocdn.net/dn/fqv1Q/hyU2hkrJ1C/XvL2py6aw7R4kEtsKjf8eK/img.jpg?width=1800&amp;amp;height=1202&amp;amp;face=0_0_1800_1202&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/15&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/15&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iQbVg/hyU2hkrJ7t/KJNjC0hKmbulVm2QlZ7JK1/img.png?width=800&amp;amp;height=317&amp;amp;face=0_0_800_317,https://scrap.kakaocdn.net/dn/bvb7nT/hyU2td7snf/ViBGdFBPvATVKmBAnIpls0/img.png?width=800&amp;amp;height=317&amp;amp;face=0_0_800_317,https://scrap.kakaocdn.net/dn/fqv1Q/hyU2hkrJ1C/XvL2py6aw7R4kEtsKjf8eK/img.jpg?width=1800&amp;amp;height=1202&amp;amp;face=0_0_1800_1202');&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;SSL/TLS 알아 보기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. HYEN입니다. 이번에는 Application Gateway SSL 인증서를 적용하여 저와 동기가 만든 Web Server를 https를 이용해서 접근해 보려고 하던 도중, 대체 SSL이 무엇인가! 하는 궁금증이 생겨 공부해&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Application Gateway의 암호화&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 먼저 Application Gateway의 암호화에 대해 정리해 보았습니다.&amp;nbsp;&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;1544&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ncbPP/btsC2vJzaOo/YnBPQsjG33SndAG63xdtC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ncbPP/btsC2vJzaOo/YnBPQsjG33SndAG63xdtC1/img.png&quot; data-alt=&quot;Application Gateway Flow (https://learn.microsoft.com/ko-kr/training/modules/end-to-end-encryption-with-app-gateway/2-application-gateway-and-encryption)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ncbPP/btsC2vJzaOo/YnBPQsjG33SndAG63xdtC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FncbPP%2FbtsC2vJzaOo%2FYnBPQsjG33SndAG63xdtC1%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;1544&quot; height=&quot;529&quot; data-origin-width=&quot;1544&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Application Gateway Flow (https://learn.microsoft.com/ko-kr/training/modules/end-to-end-encryption-with-app-gateway/2-application-gateway-and-encryption)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Application Gateway는 전송 중 데이터 암호화를 위해 인증 기관에서 &lt;u&gt;인증서를 구매&lt;/u&gt;하여 서버로 들어오고 나가는 메시지를 암호화할 수 있습니다. 이러한 암호화를 통해 전송 중인 메시지를 권한 없는 사용자가 가로채서 그 안에 있는 정보를 볼 수 없게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Application Gateway는 HTTP 트래픽 로드 밸런싱, WAF 방화벽 및 데이터의 SSL 암호화 지원과 같은 기능을 제공합니다.&amp;nbsp;또한 사용자와 Application Gateway 간의 트래픽, Application Server와 Application Gateway 간의 트래픽 암호화를 지원합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본적으로 SSL Termination 수행 시 사용자와 Application Gateway 간의 트래픽은 HTTPS로 암호화되고 Application Gateway와 Backend Server 간의 트래픽은 HTTP로 통신이 이루어집니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만일, Application Gateway에서 Backend Server로 가는 트래픽 역시 HTTPS로 암호화하여 구성하고 싶을 경우 Application Gateway에서 지원하는 End-to-End TLS 암호화를 구성하면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0RIu2/btsDbdGRlbG/f39qUdboGwK3amiPuqBGE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0RIu2/btsDbdGRlbG/f39qUdboGwK3amiPuqBGE0/img.png&quot; data-alt=&quot;End-to-End TLS Encryption 설명 (https://learn.microsoft.com/en-us/azure/application-gateway/ssl-overview#end-to-end-tls-encryption)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0RIu2/btsDbdGRlbG/f39qUdboGwK3amiPuqBGE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0RIu2%2FbtsDbdGRlbG%2Ff39qUdboGwK3amiPuqBGE0%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;559&quot; height=&quot;376&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;End-to-End TLS Encryption 설명 (https://learn.microsoft.com/en-us/azure/application-gateway/ssl-overview#end-to-end-tls-encryption)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Application Gateway에서 SSL Termination을 수행할 경우 서버에 인증서를 설치하고 SSL을 구성할 필요가 없어집니다.&amp;nbsp;&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;&lt;span style=&quot;color: #000000;&quot;&gt;2. Application Gateway를 통한 트래픽 암호화 로직&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Application Gateway를 통한 트래픽이 암호화 되는 방식에 대해 좀 더 알아보겠습니다.&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;1852&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chQsHK/btsDbdtkuRX/yKDiFn4qeIV5bG2kVpcyX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chQsHK/btsDbdtkuRX/yKDiFn4qeIV5bG2kVpcyX1/img.png&quot; data-alt=&quot;Application Gateway 구성 요소 (https://learn.microsoft.com/ko-kr/training/modules/end-to-end-encryption-with-app-gateway/2-application-gateway-and-encryption)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chQsHK/btsDbdtkuRX/yKDiFn4qeIV5bG2kVpcyX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchQsHK%2FbtsDbdtkuRX%2FyKDiFn4qeIV5bG2kVpcyX1%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;1852&quot; height=&quot;568&quot; data-origin-width=&quot;1852&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Application Gateway 구성 요소 (https://learn.microsoft.com/ko-kr/training/modules/end-to-end-encryption-with-app-gateway/2-application-gateway-and-encryption)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;트래픽은 Frontend의 포트를 통해 들어오고 수신기를 거쳐 규칙에 맞게 수신 요청을 Backend Pool에 전달합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수신기 (Listener)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 호스트, 특정 IP 주소의 특정 포트를 수신 대기하도록 설정된 리소스로&amp;nbsp;SSL 인증서를 사용하여 Application Gateway로 들어오는 트래픽을 암호 해독 할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수신기가 지원하는 포트 (여러 포트 open 가능)는 다음과 같습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 51px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;b&gt;SKU&lt;/b&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;b&gt;Supported Port Range&lt;/b&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;b&gt;Exceptions&lt;/b&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; V2 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 1 ~ 64999 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 22 &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; V1 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 1 ~ 65502 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 3389 &lt;/span&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;span style=&quot;color: #000000;&quot;&gt;3. Application Gateway의 TLS Termination&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면 TLS Termination 구성의 장점은 무엇일까요? &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://learn.microsoft.com/ko-kr/azure/application-gateway/ssl-overview#tls-termination&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/ko-kr/azure/application-gateway/ssl-overview#tls-termination&lt;/a&gt;&lt;/span&gt;에 대해서 읽어보시는 것을 권장 드립니다.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TLS 암호 해독 시 성능에 가장 부하를 주는 것은 초기 Handshake이기 때문에 Application Gateway에서 TLS Termination을 수행할 경우, Client의 모든 요청에 대해 캐시된 값을 사용할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cf) Backend Server에서 TLS Termination 수행할 경우, Client의 요청이 다른 Server로 갈 때마다 Client가 다시 인증을 해야 하는 번거로움이 발생합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SSL/TLS 통신 시 CPU 사용률이 높으며 SSL/TLS 통신 시 사용하는 키의 크기가 커짐에 따라 이 사용률은 더 증가하고 있습니다. 그렇기 때문에 Backend Server에서 이 작업을 하지 않을 경우 Server는 데이터를 가장 효율적으로 전달할 수 있는 방식에 대해서만 집중할 수 있게 됩니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Application Gateway가 트래픽의 암호를 해독할 때 헤더, URI 등에 액세스 할 수 있기 때문에 이를 활용하여 요청을 지능적으로 라우팅할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Application Gateway에만 Certificate를 설치하면 되기 때문에 시간과 비용을 절약할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-panel-type=&quot;success&quot;&gt;
&lt;div data-panel-content=&quot;true&quot;&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ TLS Termination을 구성하기 위해서는 TLS/SSL Certificate가 반드시 수신기에 구성되어 있어야 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ Application Gateway에 제공된 인증서는 개인키와 공개키를 모두 포함하는 PFX(개인 정보 교환) 형식이어야 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;❌ &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Application Gateway는 새 인증서를 만들거나 인증 기관에 인증서 요청을 보내는 기능을 제공하지 않습니다.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 Application Gateway는 들어오는 트래픽을 해독하고 Client에 대한 response 트래픽을 암호화할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.1 Backend Server TLS 암호화&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;※ 이번 포스팅에서는 이 부분에 대한 테스트를 다루고 있지는 않습니다.&lt;/span&gt; &lt;/i&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Backend Server로 전달되는 트래픽을 암호화하여 보내고자 할 경우 Application Gateway의 End-to-End TLS 암호화 기능을 사용하면 됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;End-to-End TLS는 백 엔드 설정에서 백 엔드 프로토콜을 HTTPS로 변경하여 사용 가능합니다. &lt;/span&gt;&lt;/span&gt;&lt;img style=&quot;caret-color: transparent; color: #333333; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/bE5dGF/btsC4E0g1yS/d5nYJ0dR3KCsiIeAypJk5K/img.png&quot; width=&quot;571&quot; height=&quot;235&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;309&quot; data-is-animation=&quot;false&quot; /&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;&lt;span style=&quot;color: #000000;&quot;&gt;4. Application Gateway의 TLS Termination 구성&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.1 SSL Certificate 만들기&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.1.1 회원 가입&lt;/span&gt;&lt;/h4&gt;
&lt;div data-level=&quot;1&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSL Certificate를 무료로 발급할 수 있는 사이트(ex. &lt;a href=&quot;https://www.sslforfree.com/&quot;&gt;https://www.sslforfree.com/&lt;/a&gt;) 접속한 후 회원 가입을 진행합니다.&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXDrXp/btsC4Kzym2b/GVP7UTZRDKAeJxjDSD8dKk/img.png&quot; width=&quot;675&quot; height=&quot;310&quot; data-origin-width=&quot;1075&quot; data-origin-height=&quot;494&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Certificate 관련 메일이 수신되기 때문에 사용하는 메일을 이용해야 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.1.2 Certificate 생성&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;[New Certificate] 클릭&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/bBxTwL/btsC6wnaExR/EsWbLKEuIWukeanYEEadfk/img.png&quot; width=&quot;697&quot; height=&quot;486&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;816&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Certificate를 발급 받고자 하는 도메인을 입력합니다.&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C62QG/btsC6TbyO6a/906TTvKAlPs4Y39sMFG9v0/img.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;1161&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;li&gt;[90-Day Certificate]를 선택합니다.&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5c2A6/btsC6rsQEnZ/3ndMZD8TJNsV1XxVX4H6g0/img.png&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;682&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.1.3 도메인 인증&lt;/span&gt;&lt;/h4&gt;
&lt;div data-level=&quot;1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제로 도메인을 소유하고 있는지 여부를 확인하기 위한 단계로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제공하는 3가지 방법 (Email Verification, DNS(CNAME), HTTP File Upload) 중 가능한 방법으로 인증하면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;※ 본 테스트에서는 &lt;b&gt;DNS(CNAME)&lt;/b&gt;을 사용하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;Name, Point To, TTL을 각각 복사하여 DNS Provider에 CNAME Record를 추가합니다.&lt;/span&gt;&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnqxsd/btsC2w9yyOo/JnhrLNldyVbqGewrrEBlM0/img.png&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;881&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가비아에서 구매한 도메인에 대해 Azure DNS의 Name Server를 사용하도록 설정해 두었기 때문에 Azure Portal에 접속하여 해당 &lt;u&gt;&lt;b&gt;DNS Zone&lt;/b&gt;&lt;/u&gt;에 Record를 등록해야 합니다. &lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/XCBiA/btsC5XL67gi/Ta7B8F4KKR8lL1nWih0IqK/img.png&quot; width=&quot;653&quot; height=&quot;396&quot; data-origin-width=&quot;1803&quot; data-origin-height=&quot;1093&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-panel-type=&quot;warning&quot;&gt;
&lt;div data-panel-content=&quot;true&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.1.4 Certificate Download&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[Download Certificate (.zip)] 버튼을 클릭합니다. &lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/ly4JY/btsC4IO9KUm/h5lYKyxkqtT2FkOkKovnLK/img.png&quot; data-origin-width=&quot;1742&quot; data-origin-height=&quot;1053&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;zip 파일을 압축 해제 합니다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; color: #333333; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/zaUhX/btsC2ysOQcd/OTFfEeNuNQasv7qtrp9zn1/img.png&quot; width=&quot;558&quot; height=&quot;287&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;410&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ol&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.1.5 SSL Certificate 포맷 변환 (.crt &amp;rarr; .pfx)&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Win64 OpenSSL Command Prompt 실행한 후 다운로드 받은 폴더로 Directory를 변경합니다. &lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/suZ52/btsC4akRddC/qlJnNkO12OpNnpy81EHKG0/img.png&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;276&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pfx 파일로 변환하기 위해 하기와 같은 명령어를 입력합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pkcs12 -export -out hyein-certificate.pfx -inkey private.key -in certificate.crt -certfile ca_bundle.crt&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;83&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kNMZm/btsC6R5SMcT/MdGiOT1URO8SjPRKhusGy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kNMZm/btsC6R5SMcT/MdGiOT1URO8SjPRKhusGy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kNMZm/btsC6R5SMcT/MdGiOT1URO8SjPRKhusGy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNMZm%2FbtsC6R5SMcT%2FMdGiOT1URO8SjPRKhusGy1%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;847&quot; height=&quot;83&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;83&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상기 명령어 실행 시 &amp;ldquo;Enter Export Password&amp;rdquo; 문구가 출력되면 Certificate의 암호로 사용할 password를 입력합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;변환된 Certificate를 확인합니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/pvNn7/btsC83Y2nLZ/sofMUe3Y7C3kh7Em1mQW60/img.png&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;157&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.2 Application Gateway에 Certificate 업로드&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.2.1 수신기 생성 및 Certificate 업로드&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1250&quot; data-origin-height=&quot;1020&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba7HQL/btsC4e1P2aO/RvF6ZSoFkJtktiG4KVSI6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba7HQL/btsC4e1P2aO/RvF6ZSoFkJtktiG4KVSI6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba7HQL/btsC4e1P2aO/RvF6ZSoFkJtktiG4KVSI6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba7HQL%2FbtsC4e1P2aO%2FRvF6ZSoFkJtktiG4KVSI6k%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;662&quot; height=&quot;540&quot; data-origin-width=&quot;1250&quot; data-origin-height=&quot;1020&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로토콜 : HTTPS&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;포트 : 443 &lt;i&gt;&lt;span style=&quot;color: #666666;&quot;&gt;# 기존에 수신기가 이미 존재할 경우, 그 수신기와 겹치지 않는 포트 기입 필요&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PFX 인증서 파일 : &lt;i&gt;&lt;span style=&quot;color: #666666;&quot;&gt;# pfx 파일로 변환한 Certificate 업로드&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;암호 :&lt;i&gt;&lt;span style=&quot;color: #666666;&quot;&gt; # pfx 형식의 Certificate 생성 시 입력한 암호 입력&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&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;span style=&quot;color: #000000;&quot;&gt;4.2.2 규칙 생성&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;[수신기] 선택&lt;br /&gt;&lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/YGCXB/btsC869j8uj/ESsHdshLzrMKeao9pLleg1/img.png&quot; width=&quot;657&quot; height=&quot;292&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;507&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[백 엔드 대상] 선택&lt;br /&gt;&lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/HSyBp/btsC8TPF5T8/ZZ5kbLYWVjnv4JSLepYf0k/img.png&quot; width=&quot;659&quot; height=&quot;344&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;588&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.3 HTTPS를 사용하여 Application 접근&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;https://hyein.&amp;lt;domain name&amp;gt;&lt;/span&gt;을 입력하면 아래와 같이 정상적으로 Application에 접근이 가능한 것을 확인할 수 있습니다.&lt;/span&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/AYxiY/btsDdIfxND8/uuJhRrB0KebdmERBZ7CE01/img.png&quot; data-origin-width=&quot;2038&quot; data-origin-height=&quot;923&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하기와 같이 주소창 옆&amp;nbsp; [사이트 정보 보기] 버튼을 클릭한 후 &lt;i&gt;&quot;이 연결은 안전합니다.&quot;&lt;/i&gt;라는 항목을 클릭할 시, 아래와 같이 인증서와 관련된 정보를 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wbf6k/btsC5ZwmJ9i/U2xmKxkRhYMUyykG4bKNgK/img.png&quot; width=&quot;663&quot; height=&quot;455&quot; data-origin-width=&quot;1291&quot; data-origin-height=&quot;886&quot; data-is-animation=&quot;false&quot; /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;\&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이상으로, Application Gateway에 SSL Certificate를 업로드하여 Application에 HTTPS로 접근하는 방법에 대해 알아보았습니다.       &lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>application gateway</category>
      <category>Azure</category>
      <category>ssl termination</category>
      <category>TLS Termination</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/16</guid>
      <comments>https://with-cloud.tistory.com/16#entry16comment</comments>
      <pubDate>Sun, 7 Jan 2024 22:12:40 +0900</pubDate>
    </item>
    <item>
      <title>SSL/TLS 알아 보기</title>
      <link>https://with-cloud.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요. &lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이번에는 Application Gateway SSL 인증서를 적용하여 저와 동기가 만든 Web Server를 https를 이용해서 접근해 보려고 하던 도중, 대체 SSL이 무엇인가! 하는 궁금증이 생겨 공부해 보았습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. SSL와 TLS란?&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SSL(Secure Socket Layer; 보안 전송 계층)&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;암호화 기반 인터넷 보안 프로토콜로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;웹사이트와 브라우저 사이 또는 두 서버 사이에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술입니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OSI 계층 모델 중 응용 계층과 전송 계층 사이에서 동작하여 애플리케이션 데이터를 보호하고 이를 전송 계층으로 보내는 역할을 합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TLS(Transport Layer Security; 전송 계층 보안)&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SSL의 업데이트 버전 (cf. TLS 1.0은 SSL 3.0을 계승함)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-panel-type=&quot;info&quot;&gt;
&lt;div data-panel-content=&quot;true&quot;&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;➡️ 따라서 SSL과 TLS는 같은 역할을 하는 프로토콜이라고 볼 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TLS 및 SSL 프로토콜을 사용할 경우 클라이언트 및 서버 애플리케이션에서는 메시지 변조, 메시지 가로채기, 메시지 위조 등의 보안 위험을 감지할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면, 대체 SSL/TLS 프로토콜은 이러한 보안 위험을 어떻게 감지하는 걸까요?&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;바로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SSL/TLS 프로토콜은 &lt;u&gt;암호화, 해시화, 디지털 인증서&lt;/u&gt;라는 3가지 기술을 조합하여 사용하여 보안 위험을 감지하는데요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 &lt;b&gt;해시화&lt;/b&gt;에 대해 잠깐 알아보고 가도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해시화란?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;- 애플리케이션 데이터를 고정된 크기의 고유한 값으로 변환하는 기술로 데이터에 작은 변경이 발생해도 결과 해시 값이 크게 변하도록 설계되어 있어 제 3자가 데이터를 바꾸어 쓰는 변조를 감지할 수 있습니다.&amp;nbsp;&lt;br /&gt;- &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;해시값은 데이터를 요약한 것이기 때문에 해시값이 유출 되더라도 보안 상 문제는 없습니다.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이와 같은 기술들을 통해 SSL/TLS 프로토콜이 제공하는 보안 요소는 다음과 같습니다.&amp;nbsp;&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Confidentiality (기밀성)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인가된 사람들에게만 데이터를 공개하는 것&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client와 Server가 서로 주고 받는 데이터는 오직 Client와 Server만 볼 수 있어야 한다는 것을 의미합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Integrity (무결성)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 상 송, 수신되는 데이터가 임의로 수정되거나 위, 변조되지 않아야 하는 것을 의미합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정보는 변경이 허락된 주체에 의해 인가된 방법을 통해서만 변경되어야 하기 때문이죠.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Authentication (인증)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주체의 자격이나 내용을 검증하는 것으로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터에 접근할 수 있는 객체인지, 정당한 객체인지 확인되어야&amp;nbsp; 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. TLS 및 SSL Protocol Stack&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TLS 및 SSL 프로토콜은 두 가지 계층으로 나뉘어 집니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bup3OV/btsC4Kk9m5X/myjk5Hdzo5og8ppub34UB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bup3OV/btsC4Kk9m5X/myjk5Hdzo5og8ppub34UB1/img.png&quot; data-alt=&quot;https://commons.wikimedia.org/wiki/File:TLS_protocol_stack.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bup3OV/btsC4Kk9m5X/myjk5Hdzo5og8ppub34UB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbup3OV%2FbtsC4Kk9m5X%2Fmyjk5Hdzo5og8ppub34UB1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;744&quot; height=&quot;295&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;497&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://commons.wikimedia.org/wiki/File:TLS_protocol_stack.svg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2.1 상위 계층 &lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2.1.1 Handshake Protocol&lt;/b&gt;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;Client와 Server가 서로 암호화 통신을 시작할 수 있도록 서로 확인하고 필요한 정보를 서로 주고 받는 과정을 의미합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어떤 TLS 버전을 사용할 것인지, 어떤 암호화 알고리즘을 사용할 것인지 &lt;b&gt;협상&lt;/b&gt;하고,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server와 Client의 인증서를 통해 &lt;b&gt;인증&lt;/b&gt;하고,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공개키를 &lt;b&gt;공유&lt;/b&gt; (보통 &lt;u&gt;RSA 암호화 알고리즘&lt;/u&gt; 사용)합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금부터는 Handshake 프로토콜의 Flow를 좀 더 자세하게 알아보겠습니다. &lt;/span&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;(RSA 암호화 알고리즘을 기준으로 작성하였습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mVhTJ/btsC39ZMPIf/tfiNvbs0wTPWzf0SYV1kRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mVhTJ/btsC39ZMPIf/tfiNvbs0wTPWzf0SYV1kRk/img.png&quot; data-alt=&quot;Security Deployment in TR-069 CPE WAN Management Protocol - Scientific Figure on ResearchGate&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mVhTJ/btsC39ZMPIf/tfiNvbs0wTPWzf0SYV1kRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmVhTJ%2FbtsC39ZMPIf%2FtfiNvbs0wTPWzf0SYV1kRk%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;418&quot; height=&quot;521&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Security Deployment in TR-069 CPE WAN Management Protocol - Scientific Figure on ResearchGate&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Client Hello&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client는 Server에 접속하여 자신이 사용할 SSL/TLS 버전, Cipher Suite List(Client가 지원하는 암호화 방식), 세션 ID, 초기 랜덤 넘버(추후 대칭키 생성에 사용됨)를 포함한 Client Hello라는 패킷을 Server에게 보냅니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Server Hello&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server에서 사용하는 SSL/TLS 버전, Client가 보낸 암호화 방식 중 Server가 사용할 수 있는 암호화 방식을 선택(Selected Suite)하여 보냅니다. &amp;rarr; &lt;b&gt;협상&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server에서 생성한 랜덤 넘버 (추후 대칭키 생성에 사용됨) 및 세션 ID도 함께 보냅니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client Hello와 거의 동일함&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Server Certificate&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server의 Certificate을 Client에게 보냅니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증서 내부에는 Server가 발행한 공개키가 들어 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client는 Server가 보낸, CA(Certificate Authority)의 개인 키로 암호화된 Certificate을, CA의 공개키를 사용하여 복호화 합니다. &amp;rarr; 복호화 여부를 통해 Certificate 진위 여부를 검증할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client는 Server의 Certificate에 대한 무결성을 검증한 후 검증이 되었다면 데이터 암호화에 사용할 대칭키를 생성하게 됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Server Key Exchange&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server의 공개키가 Certificate 내부에 없는 경우, Server가 직접 공개키를 전달하게 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 공개키가 Certificate 내부에 있을 경우 이 과정은 생략된다고 보시면 됩니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Certificate 내부에 공개키가 있다면 3번의 CA의 공개키를 사용하여 Certificate를 복호화 하는 과정에서 이미 Server의 공개키를 확보하였을 것이기 때문이죠.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Server Hello Done &lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server의 Hello 절차가 완료되었음을 Client에게 전송하기 위한 메시지입니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Client Certificate &lt;/b&gt;(optional)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client의 인증서를 Server에 전송하는 과정입니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Client Key Exchange&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client는 3번 과정에서 생성한 대칭키를 Server가 보낸 Certificate 내부에 들어 있던 공개키로 암호화 하여 Server에게 전송합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;대칭키는 데이터를 실제로 암호화하는 키를 의미합니다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 키를 통해 Client와 Server는 교환하고자 하는 데이터를 암호화 할 수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Change Cipher Spec&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 이후로 전송되는 모든 메시지에 대해서 정해진 암호화 알고리즘과 키를 사용하여 암호화 하겠다고 알리는 패킷입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client와 Server가 서로에게 날리는 패킷으로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;교환할 정보를 모두 교환한 후 통신 준비 완료를 알리는 역할을 하죠.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Finished &lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SSL/TLS Handshake가 성공적으로 끝나서 이를 종료한다는 의미를 담은 패킷입니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&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;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.1.2 Change Cipher Spec Protocol&lt;/span&gt;&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;Handshake 과정 중 Client와 Server 간의 통신에서 암호화된 부분을 나타내는 신호 역할을 합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Handshake 프로토콜의 일부로 간주되며&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 메시지 이후 Client와 Server 간의 통신은 새로운 암호화 및 보안 매개변수를 사용하게 됩니다.&amp;nbsp;&lt;/span&gt;&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;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.1.3 Alert Protocol&lt;/span&gt;&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;SSL/TLS 통신 과정에서 발생하는 오류 및 경고 상황을 알리고 대응하기 위한 프로토콜로,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client와 Server 간 오류 및 경고 메시지를 교환하는데 사용됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Alert Level에는 Fatal(치명적)과 Warning(경고) 총 두 가지 Level이 존재 합니다.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Fatal&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 경우 connection이 즉시 끊어집니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex. 인증에 실패했을 때, 프로토콜 버전이 호환되지 않을 때 등&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Warning&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일반적인 경고 메시지입니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex. 암호화 키의 유효 기간이 다가왔을 때, 암호화 알고리즘의 안전하지 않은 사용 등&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.2 하위 계층&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.2.1 Record Protocol&lt;/span&gt;&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;데이터의 기밀성, 무결성 및 인증을 위한 프로토콜로,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SSL/TLS 세션에서 데이터의 보호를 담당하며 Handshake 프로토콜에서 협상된 보안 매개변수에 따라 데이터의 암복호화, 인증 및 압축을 수행합니다.&lt;br /&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;암호화 : Handshake 과정에서 협상된 대칭키를 사용하여 데이터를 암호화합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;무결성 : MAC(Message Authentication Code)을 사용하여 데이터의 무결성을 보장합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;압축 : 선택적으로 데이터를 압축하여 전송할 수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 프로토콜에 의해 암호화 및 인증 처리된 데이터는 TCP와 같은 전송 계층(L4) 프로토콜에 의해 전송됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 MAC은 또 뭘 의미하는 걸까요?   빠르게 알아보도록 하겠습니다.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;MAC(Message Authentication Code)&lt;br /&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;- 해시 함수와 유사하나 더 많은 보안 기능을 제공하는, 메시지의 무결성과 인증을 확인하기 위한 코드입니다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;- 주로 대칭키 암호화에서 사용되며, 특히 데이터 전송 중 메시지 변조를 탐지하는 데 활용됩니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주로 HMAC(Hash-based Message Authentication Code)가 흔히 사용되는데요. HMAC의 특징은 다음과 같습니다.&amp;nbsp;&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;span style=&quot;color: #000000;&quot;&gt;해시 함수를 기반으로 하면서 키를 사용하여 보안 수준을 높임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대칭키 암호화 방식 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;메시지에 대한 내부 해시를 계산하고, 외부에서 추가된 키를 사용하여 한 번 더 해시를 수행함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. SSL Temination이란?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uYFMS/btsCZ9TLD4E/f5xJLjocJN1Y7TS6OMSKx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uYFMS/btsCZ9TLD4E/f5xJLjocJN1Y7TS6OMSKx0/img.png&quot; data-alt=&quot;https://commons.wikimedia.org/wiki/File:SSL_termination_proxy.svg#/media/File:SSL_termination_proxy.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uYFMS/btsCZ9TLD4E/f5xJLjocJN1Y7TS6OMSKx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuYFMS%2FbtsCZ9TLD4E%2Ff5xJLjocJN1Y7TS6OMSKx0%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;751&quot; height=&quot;206&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://commons.wikimedia.org/wiki/File:SSL_termination_proxy.svg#/media/File:SSL_termination_proxy.svg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;부하 분산 장치의 옵션 기능의 하나로 Server에서 수행하던 SSL 처리를 부하 분산 장치에서 수행하는 기능을 의미하며,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;암호화, 복호화에 필요한 작업을 부하 분산 장치에 위임하는 것으로 SSL Offloading이라고도 합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client가 HTTPS로 request하면 그 request를 받은 부하 분산 장치에서 SSL 처리를 하고 부하 분산 대상 Server에는 HTTP로 전달하게 됩니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;부하 분산 장치는 Client로부터 받은 암호화된 트래픽을 해독하고, clear text 데이터로 변환합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;부하 분산 장치는 해독된 clear text를 Server로 전송합니다. (이 구간의 통신은 암호화 X)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;부하 분산 장치에서 SSL Offloading이 이루어지므로 부하 분산 장치가 SSL/TLS 암호화 및 복호화를 처리할 수 있는 기능을 가지고 있어야 합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Server가 SSL 처리를 하지 않아도 되기 때문에 처리 부하가 감소한다는 장점이 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상으로, 간단하게 SSL/TLS에 대해 알아보았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 실제로 Azure Application Gateway에 SSL 인증서를 적용하는 과정에 대해 알아보도록 하겠습니다.  &lt;/p&gt;</description>
      <category>TOPIC/General</category>
      <category>ssl</category>
      <category>ssl offloading</category>
      <category>ssl termination</category>
      <category>tls</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/15</guid>
      <comments>https://with-cloud.tistory.com/15#entry15comment</comments>
      <pubDate>Fri, 5 Jan 2024 13:44:42 +0900</pubDate>
    </item>
    <item>
      <title>Kubernetes Namespace 간 Ingress 트래픽 라우팅 하기</title>
      <link>https://with-cloud.tistory.com/14</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 Kubernetes Namespace 간 Ingress 트래픽을 라우팅하는 방법에 대해 알아보도록 하겠습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 궁금증의 시작&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 최근 Terraform으로 Azure Infra를 구성하는 테스트를 진행하고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모듈화는 처음이라 굉장히 고난을 겪었지만  멋진 동기 덕분에 무사히 테스트를 완료하였습니다.   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 다음 목표는 배포된 Azure Kubernetes Service 내부에 세부 구성을 진행하는 것이었는데요.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도커 이미지를 Build해서 Azure Container Registry로 Push하고 Azure Kubernetes Service에서 그 이미지를 가지고 Web용&amp;nbsp;Deployment를&amp;nbsp;배포하기로&amp;nbsp;했습니다.&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;동기가 만든 Deployment와 제가 만든 Deployment를 경로에 따라 분기하기 위해서 Nginx Ingress를 생성하는 작업을 진행하던 도중 궁금증이 생겼습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Deployment가 서로 다른 namespace에 있을 때,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어떤 namespace에 Ingress 리소스를 지정해 줘야 하는 걸까?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;이 궁금증을 해결하기에 앞서, 먼저 Ingress 리소스에 대해 알아보도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Ingress란?&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;L7 로드 밸런싱을 제공하는 리소스로 Service들을 묶는 Service의 상위 Object입니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TLS/SSL 인증서 처리, 도메인 기반 가상 호스팅 제공, 특정 HTTP 경로의 라우팅 등의 규칙을 정의합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;외부에서 Kubernetes 내부로 들어오는 네트워크 요청을 어떻게 처리할 지 결정하는 역할을 합니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ingress는 &lt;i&gt;&lt;b&gt;namespace scope&lt;/b&gt;&lt;/i&gt;의 object입니다. &amp;rarr; &lt;b&gt;사실상 이것이 문제!&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 백엔드로 연결할 Service는 Ingress Object와 동일한 namespace에 있어야 Ingress가 해당 백엔드를 찾아갈 수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(공식 문서 : &lt;a style=&quot;color: #000000;&quot; href=&quot;https://kubernetes.io/docs/concepts/services-networking/ingress/#resource-backend&quot;&gt;https://kubernetes.io/docs/concepts/services-networking/ingress/#resource-backend&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;img style=&quot;caret-color: transparent; color: #333333; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/zGLIv/btsCK9T32Wz/geKx9KBJrVI7GqvsSzzKY0/img.png&quot; width=&quot;621&quot; height=&quot;117&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;199&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;추가적으로, Ingress Controller는 Ingress가 어떻게 동작하는 지를 결정하는 Controller이며 이번 테스트에서는 Nginx Ingress Controller를 사용하였습니다. &lt;br /&gt;그러나 Azure의 Application Gateway의 AGIC 기능을 활성화 하여 Ingress Controller로 사용할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정리해 보면, &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ingress Object와 &lt;b&gt;같은&lt;/b&gt; Namespace에 있는 Service의 경우 Ingress가 해당 Service를 잘 찾아갈 수 있지만 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ingress Object와 &lt;b&gt;다른&lt;/b&gt; Namespace에 있는 Service는 Ingress가 인지할 수 없다는 것을 알 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;이때 사용할 수 있는 방법은 바로 &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;ExternalName Type&lt;/span&gt;&lt;/b&gt;의 Service를 추가로 배포하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;span style=&quot;color: #000000;&quot;&gt;그렇다면 ExternalName Type의 Service는 뭘까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. ExternalName&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ExternalName type의 Service는 Selector를 기반으로 하는 것이 아니라 DNS 이름으로 매핑하여&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;외부의 특정 FQDN에 대한 CNAME 매핑을 제공합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, Cluster IP 주소와 같은 ip 주소를 기반으로 액세스하는 것이 아니라 Service를 생성할 때 manifest file의 externalName field에 정의된 값을 포함하는 CNAME 레코드를 반환하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 아키텍처&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최종 테스트 아키텍처는 다음과 같습니다. &lt;/span&gt;&lt;/p&gt;
&lt;div data-node-type=&quot;mediaSingle&quot; data-layout=&quot;wide&quot; data-width=&quot;852&quot; data-width-type=&quot;pixel&quot;&gt;
&lt;div data-node-type=&quot;mediaSingle&quot; data-layout=&quot;wide&quot; data-width=&quot;852&quot; data-width-type=&quot;pixel&quot; data-pm-slice=&quot;0 0 []&quot;&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1035&quot; data-origin-height=&quot;569&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F5zZ4/btsCTBHU3MU/UL70uk5xgWU6QVdgx8H9S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F5zZ4/btsCTBHU3MU/UL70uk5xgWU6QVdgx8H9S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F5zZ4/btsCTBHU3MU/UL70uk5xgWU6QVdgx8H9S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF5zZ4%2FbtsCTBHU3MU%2FUL70uk5xgWU6QVdgx8H9S1%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;1035&quot; height=&quot;569&quot; data-origin-width=&quot;1035&quot; data-origin-height=&quot;569&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ingress를 namespace-1에 배포하고 &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;namespace-1&lt;/span&gt;에 있는 Service를 백엔드로 지정&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;namespace-1&lt;/span&gt;에 ExternalName type의 Service 배포 - &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;namespace-2&lt;/span&gt;에 있는 Service를 찾아가기 위한 bridge 역할&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 Service에 externalName: service-2. &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;namespace-2&lt;/span&gt;(Service Name.Namespace Name) 지정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. 테스트 내용&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5.1 hyein-ns&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. Load Balancer type의 Service 생성 및 Deployment 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1) lb.yaml&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-expanded=&quot;true&quot; data-title=&quot;lb.yaml&quot; data-node-type=&quot;expand&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Service
metadata:
  name: first-svc
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: &quot;true&quot;
    service.beta.kubernetes.io/azure-load-balancer-internal-subnet: &quot;snet-lb&quot;
spec:
  selector:
    app: hyein
  ports:
    - protocol: TCP
      port: 80
  type: LoadBalancer&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;internal LB로 생성하기 위해 annotation을 추가하였습니다. (service.beta.kubernetes.io/azure-load-balancer-internal: &quot;true&quot;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;실제로 생성을 한 후에&amp;nbsp;kubectl get svc first-svc -o wide&amp;nbsp;명령어를 입력하여 확인해 보면 하기와 같이 External IP가 Private IP인 것을 확인할 수 있습니다.&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m4fhp/btsCTxHC219/PWJVo7YOWenw3TlPoKvyJk/img.png&quot; width=&quot;755&quot; height=&quot;62&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;89&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 lb가 생성될 subnet을 지정하기 위해 annotation을 추가하였습니다. (service.beta.kubernetes.io/azure-load-balancer-internal-subnet: &quot;snet-lb&quot;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Azure Portal 상에서 Load Balancer가 존재하는 VNet을 선택하면 [설정] 블레이드의 [연결된 디바이스] 탭에서 &lt;b&gt;kubernetes-internal&lt;/b&gt;이라는 이름의 Load Balancer가 &lt;b&gt;snet-lb&lt;/b&gt;라는 subnet 대역에 배포되어 있는 것을 확인할 수 있습니다.&amp;nbsp;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPTfZn/btsCTCBQLEc/kzdKsKPA9gzTnfFX4uPqr0/img.png&quot; data-origin-width=&quot;1898&quot; data-origin-height=&quot;340&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2) deploy.yaml&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-expanded=&quot;true&quot; data-title=&quot;deploy.yaml&quot; data-node-type=&quot;expand&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: first-deploy
  labels:
    app: hyein
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hyein
  template:
    metadata:
      labels:
        app: hyein
    spec:
      containers:
      - name: first-container
        image: # Azure Container Registry Server/Repository/Image:Tag
        ports:
        - containerPort: 5000&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Container Registry에 있는 image를 참조하기 위해 image field에 대한 값에&lt;i&gt;&lt;b&gt; registry 주소/repository/Image:version&lt;/b&gt;&lt;/i&gt; 값을 기입하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. ExternalName type의 Service 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-expanded=&quot;true&quot; data-title=&quot;externalname.yaml&quot; data-node-type=&quot;expand&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Service
metadata:
  name: lily-svc-bridge
  namespace: hyein-ns
spec:
  type: ExternalName
  externalName: lily-svc.lily-ns&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;lily-svc-bridge라는 이름은 pod에서 DNS를 호출하는 이름으로 사용됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;externalName 값은 &lt;b&gt;lily-svc.lily-ns&lt;/b&gt;로 지정합니다. 이는 lily-ns에 있는 lily-svc를 가리킵니다. 또한 이는 pod에서 lily-svc-bridge를 호출하면 실제로 변경되는 external 주소입니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ExternalName type의 Service는 클러스터 내부에서 클러스터 외부의 특정 서비스에 접속하기 위해 &lt;b&gt;DNS CNAME&lt;/b&gt;을 설정하는 방식이라는 것 ! 잊지 않으셨죠?&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제로 ExternalName type의 Service를 생성해 보았습니다. 하기와 같이 External IP Field에 ip가 아닌 lily-ns에 배포된 lily-svc를 가리키는 도메인이 지정된 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4Vmrj/btsC353ovI7/NSpjkRK3nXkcuZa08fjkYk/img.png&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;87&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. Ingress 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-expanded=&quot;true&quot; data-title=&quot;ingress.yaml&quot; data-node-type=&quot;expand&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hyein-ingress
  namespace: hyein-ns
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: &amp;ldquo;false&amp;rdquo;
spec:
  ingressClassName: nginx
  rules:
  - host: hyein.example.com # domain address 01 
    http:
      paths:
      - path: /
        backend:
          service:
            name: first-svc
            port:
              number: 80
        pathType: Prefix
  - host: lily.example.com # domain address 02
    http:
      paths:
      - path: /
        backend:
          service:
            name: lily-svc-bridge
            port:
              number: 80
        pathType: Prefix&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본적으로 Ingress Controller는 해당 ingress에 대해 TLS 설정이 되어 있는 경우 HTTPS로 &lt;u&gt;강제 redirection&lt;/u&gt; 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 비활성화 하기 위해서는 &lt;i&gt;&lt;b&gt;nginx.ingress.kubernetes.io/ssl-redirect: &quot;false&quot;&lt;/b&gt;&lt;/i&gt; 이라는 annotation을 사용해야 합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규칙에 2개의 host를 추가해 보았습니다. 각 host별 각기 다른 backend가 지정됩니다. 규칙에 정의한 내용 대로 traffic이 분기된다고 보시면 됩니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주의할 점은,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ingress Object와 같은 namespace에 있는 Service의 경우, 그대로 Service를 backend로 지정하면 되지만&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ingress Object와 다른 namespace에 있는 Service의 경우, Ingress가 ExternalName type의 Service를 참조하여 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 Service를 찾아갈 수 있도록 backend로 ExternalName type의 Service를 지정해 주어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상기 Yaml file로 Ingress Object를 생성해 보았습니다.&lt;br /&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1261&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biHmSp/btsC32lkCC8/GG3VzQ7n7MGxpOSQfH5yV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biHmSp/btsC32lkCC8/GG3VzQ7n7MGxpOSQfH5yV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biHmSp/btsC32lkCC8/GG3VzQ7n7MGxpOSQfH5yV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiHmSp%2FbtsC32lkCC8%2FGG3VzQ7n7MGxpOSQfH5yV1%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;1261&quot; height=&quot;88&quot; data-origin-width=&quot;1261&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Helm을 통해 Ingress Controller를 생성하였을 때&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;i&gt;--set controller.service.annotations.&quot;service\.beta\.kubernetes\.io/azure-load-balancer-internal&quot;=true&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;nbsp;라는 파라미터를 통해 Azure Internal Load Balancer를 사용하도록 지정하였습니다. 따라서 Address가 Private IP인 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5.2 lily-ns&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Load Balancer type의 Service 생성 및 Deployment 생성&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/oRi1Q/btsCZgx6vbz/jTB4zyskRMwHvMcExCioB0/img.png&quot; width=&quot;722&quot; height=&quot;101&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;171&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;5.3 Azure Application Gateway 설정 및 DNS Zone 등록&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금부터는 Azure Portal로 이동하여 Azure Application Gateway에 대해 몇 가지 설정을 진행하고 DNS Zone에 Record를 등록해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 백 엔드 풀에 Ingress Object의 External IP 등록&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnSPCv/btsC4dNQw5R/5M7H2RxYlChlcl0hOK3mJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnSPCv/btsC4dNQw5R/5M7H2RxYlChlcl0hOK3mJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnSPCv/btsC4dNQw5R/5M7H2RxYlChlcl0hOK3mJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnSPCv%2FbtsC4dNQw5R%2F5M7H2RxYlChlcl0hOK3mJk%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;315&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Azure Application Gateway의 백 엔드 풀 대상으로 Ingress의 Address를 입력해 줍니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이로서 Azure Application Gateway의 뒷단에 Ingress가 연결되게 되고 이러한 Ingress는 Service의 상위 Object로서 각 Service로의 Traffic 분기를 담당하게 됩니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 상태 프로브 생성&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로브는 하나 이상의 HTTP 설정과 연결된 경우에만 백엔드 상태를 모니터링하며,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로브가 연결된 HTTP 설정과 연결과 backend pool의 백엔드 리소스를 모니터링합니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한&amp;nbsp;프로브 요청은&amp;nbsp;&amp;lt;protocol&amp;gt;://&amp;lt;hostName&amp;gt;:&amp;lt;port&amp;gt;/(urlPath)로 전송됩니다.&lt;br /&gt;&lt;i&gt;&lt;b&gt;ex.&amp;nbsp;http://10.10.144.93:80/healthz&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;1234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BmxXF/btsCZhRjXOP/r7kmolY8R0lRVBzdHiDBg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BmxXF/btsCZhRjXOP/r7kmolY8R0lRVBzdHiDBg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BmxXF/btsCZhRjXOP/r7kmolY8R0lRVBzdHiDBg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBmxXF%2FbtsCZhRjXOP%2Fr7kmolY8R0lRVBzdHiDBg0%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;840&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;1234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;호스트 : Ingress Object의 External IP를 입력합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경로 : helm으로 nginx ingress controller 생성 시 지정해 준 경로 입력&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex.)&amp;nbsp;&lt;i&gt;--set controller.service.annotations.&quot;service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path&quot;=&lt;b&gt;/healthz&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. 백 엔드 설정 수정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;1112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3dzVn/btsCWNbUmYF/4Nf9MRJR92dYRoNQKDsuhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3dzVn/btsCWNbUmYF/4Nf9MRJR92dYRoNQKDsuhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3dzVn/btsCWNbUmYF/4Nf9MRJR92dYRoNQKDsuhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3dzVn%2FbtsCWNbUmYF%2F4Nf9MRJR92dYRoNQKDsuhK%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;674&quot; height=&quot;656&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;1112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Terraform으로 생성한 백 엔드 설정 중 일부를 Azure Portal 상에서 수정했습니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;백 엔드 경로 재정의 : 재정의할 필요가 없기 때문에 공란으로 둡니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 지정 프로브 사용 : [예] 선택 후 2번에서 생성한 상태 프로브를 선택합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;4. 규칙 및 수신기 설정&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;Azure Application Gateway는 Frontend IP 주소로 traffic이 들어오면 Azure Application Gateway 내 구성된 규칙을 확인하여 지정된 백 엔드 대상으로 트래픽을 전송합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;리스너는 지정된 포트(ex. 80), 프로토콜, 호스트, IP 주소 등을 사용하여 들어오는 연결 요청을 확인하는 역할을 합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규칙 - [수신기] 탭&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmSs6h/btsCWLrDlGZ/kk0KVjUs9Pmx7W2a0mJeQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmSs6h/btsCWLrDlGZ/kk0KVjUs9Pmx7W2a0mJeQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmSs6h/btsCWLrDlGZ/kk0KVjUs9Pmx7W2a0mJeQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmSs6h%2FbtsCWLrDlGZ%2Fkk0KVjUs9Pmx7W2a0mJeQK%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;650&quot; height=&quot;285&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규칙 - [백 엔드 대상] 탭&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1147&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xRISx/btsC38Z50Oh/MoJGv3aMvDaHONgldWJiMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xRISx/btsC38Z50Oh/MoJGv3aMvDaHONgldWJiMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xRISx/btsC38Z50Oh/MoJGv3aMvDaHONgldWJiMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxRISx%2FbtsC38Z50Oh%2FMoJGv3aMvDaHONgldWJiMk%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;658&quot; height=&quot;330&quot; data-origin-width=&quot;1147&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;5. DNS Zone에 Record 등록&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1315&quot; data-origin-height=&quot;1095&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxLdX6/btsC326FG92/WD0IWvGdS1rLjSZuxI9rCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxLdX6/btsC326FG92/WD0IWvGdS1rLjSZuxI9rCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxLdX6/btsC326FG92/WD0IWvGdS1rLjSZuxI9rCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxLdX6%2FbtsC326FG92%2FWD0IWvGdS1rLjSZuxI9rCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;730&quot; height=&quot;608&quot; data-origin-width=&quot;1315&quot; data-origin-height=&quot;1095&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ingress Object 생성 시 지정한 host 이름(도메인)과 일치하도록 Record를 등록합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들어 &lt;i&gt;hyein.example.com&lt;/i&gt;이 Ingress의 Manifest file에 정의되어 있다면 example.com이라는 Azure DNS Zone을 배포한 후 hyein이라는 A 레코드를 등록해 주어야 합니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 Azure Application Gateway의 Frontend IP 주소를 각 레코드와 매핑해 주어야 합니다.&amp;nbsp;&lt;/span&gt;&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;5.4 접속 테스트&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제로 생성한 페이지에 접근해 보겠습니다. (도메인은 테스트용으로 실제 사용하고 있어 블러 처리 하였습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;hyein-ns에 생성한 Deployment&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;645&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ci9SFM/btsCU0P6O3C/DN4V1uTS0YpIZPcKHYDelk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ci9SFM/btsCU0P6O3C/DN4V1uTS0YpIZPcKHYDelk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ci9SFM/btsCU0P6O3C/DN4V1uTS0YpIZPcKHYDelk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fci9SFM%2FbtsCU0P6O3C%2FDN4V1uTS0YpIZPcKHYDelk%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;1626&quot; height=&quot;645&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;645&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;lily-ns에 생성한 Deployment&lt;/span&gt;&lt;br /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTfyqF/btsC2Bn0zKN/YnkKVeLKyezliDP4bNzmw0/img.png&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;983&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 이상으로 &lt;span style=&quot;text-align: start;&quot;&gt;Kubernetes Namespace 간 Ingress 트래픽을 라우팅하는 방법에 대해 알아 보았습니다!&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Infra</category>
      <category>AKS</category>
      <category>application gateway</category>
      <category>Azure</category>
      <category>Ingress</category>
      <category>Kubernetes</category>
      <category>Microsoft</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/14</guid>
      <comments>https://with-cloud.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 3 Jan 2024 21:49:10 +0900</pubDate>
    </item>
    <item>
      <title>[Terraform] 전체 코드 중 특정 resource/module만 apply하기</title>
      <link>https://with-cloud.tistory.com/13</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #009a87;&quot;&gt;HYEN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 Terraform 공부 중 알게된 전체 코드 중 특정 리소스만 apply하는 방법에 대해 알아보도록 하겠습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. terraform state list&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1-1 terraform state list [options] [address...] &lt;/b&gt;명령어 설명&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;address가 있는 경우, 주어진 조건과 일치하는 상태 파일의 모든 리소스를 나열합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;address가 없다면 상태 파일의 모든 리소스가 나열됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모듈 depth에 따라 알파벳 순으로 정렬됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드가 복잡한 경우 수천 개의 결과가 출력될 수 있기 때문에 하나 이상의 pattern을 사용하는 것을 권장합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;resource address&lt;/b&gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;형식은 다음과 같습니다.&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;module&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[module path][resource spec]&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;module.module_name[module index]&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;resource&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;resource_type.resource_name[instance index]&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1-2 terraform state list 명령어 실행 결과&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div data-width-type=&quot;pixel&quot; data-width=&quot;513&quot; data-layout=&quot;align-start&quot; data-node-type=&quot;mediaSingle&quot;&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dn557/btsB2aMJZJC/i3y3CVAyGyatOtlW7KKcB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dn557/btsB2aMJZJC/i3y3CVAyGyatOtlW7KKcB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dn557/btsB2aMJZJC/i3y3CVAyGyatOtlW7KKcB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDn557%2FbtsB2aMJZJC%2Fi3y3CVAyGyatOtlW7KKcB0%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;688&quot; height=&quot;234&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 명령어를 입력할 경우 전체 resource address list가 출력됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1-3 terraform state list module.fw 명령어 실행 결과&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div data-width-type=&quot;pixel&quot; data-width=&quot;654&quot; data-layout=&quot;align-start&quot; data-node-type=&quot;mediaSingle&quot;&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;963&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2ZDmA/btsB6wOulN4/lrIRQAkDuighjk1jIgMZk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2ZDmA/btsB6wOulN4/lrIRQAkDuighjk1jIgMZk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2ZDmA/btsB6wOulN4/lrIRQAkDuighjk1jIgMZk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2ZDmA%2FbtsB6wOulN4%2FlrIRQAkDuighjk1jIgMZk0%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;963&quot; height=&quot;123&quot; data-origin-width=&quot;963&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. terraform apply -target [resource address]&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2-1 terraform apply -target [resource address] 명령어 설명&amp;nbsp;&lt;/b&gt;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;[resource address]에 해당하는 target에 대해서만 apply 명령어를 실행할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2-2 terraform apply -target&amp;nbsp;&lt;/b&gt;&lt;b&gt;[resource address] &lt;/b&gt;&lt;b&gt;명령어 실행 결과&lt;/b&gt;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;예시로 terraform apply -target module.fw.azurerm_firewall_policy_rule_collection_group.rule-collection-group 명령어 실행를 실행해 보았습니다. &lt;i&gt;(Azure Firewall 정책 중 NAT Rule의 Source IP 변경)&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-width-type=&quot;pixel&quot; data-width=&quot;760&quot; data-layout=&quot;center&quot; data-node-type=&quot;mediaSingle&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2bERI/btsB5zZkicj/fViTUcULaufjRc5ID9kB10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2bERI/btsB5zZkicj/fViTUcULaufjRc5ID9kB10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2bERI/btsB5zZkicj/fViTUcULaufjRc5ID9kB10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2bERI%2FbtsB5zZkicj%2FfViTUcULaufjRc5ID9kB10%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;1536&quot; height=&quot;630&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAsxpm/btsB6Mw1qZG/TrDDI1D4qKxEsSMGz7K1kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAsxpm/btsB6Mw1qZG/TrDDI1D4qKxEsSMGz7K1kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAsxpm/btsB6Mw1qZG/TrDDI1D4qKxEsSMGz7K1kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAsxpm%2FbtsB6Mw1qZG%2FTrDDI1D4qKxEsSMGz7K1kK%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;1707&quot; height=&quot;357&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols ... Terraform will perform the following actions ~&quot;에서 알 수 있듯이 해당 명령어를 입력하면 -target flag 뒤에 명시한 resource address에 대해서만 apply가 실행됩니다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 명령어는 Warning 문구를 확인하여 예외적인 경우에만 사용할 것을 권장하고 있으며 경고 문구 상세는 하기와 같습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;Warning:&lt;/span&gt;&lt;/b&gt; Resource targeting is in effect&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;You are creating a plan with the -target option, which means that the result of this plan may not represent all of the changes requested by the current configuration.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The -target option is not for routine use, and is provided only for exceptional situations such as recovering from errors or mistakes, or when Terraform specifically suggests to use it as part of an error message.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;이상으로 Terraform 코드 중 일부 resource에 대해서만 apply하는 방법에 대해 아주 간단히 알아보았습니다!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Code</category>
      <category>terraform</category>
      <category>테라폼</category>
      <author>H-Y-E-N</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/13</guid>
      <comments>https://with-cloud.tistory.com/13#entry13comment</comments>
      <pubDate>Fri, 15 Dec 2023 18:00:42 +0900</pubDate>
    </item>
    <item>
      <title>PaaS형 DNS 서버 Azure Private Resolver 알아보자!</title>
      <link>https://with-cloud.tistory.com/12</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&quot;PaaS형 DNS 서버 역할을 수행하는 Azure Private Resolver 알아보기!&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;포스팅으로 돌아온&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;지난 번 &quot;AWS-Azure VPN S2S(Site-to-Site) 연결과 DNS 서버 구성&quot; 이라는 주제로 글을 작성했습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1702344291694&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;1부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성&quot; data-og-description=&quot;안녕하세요. 새로운 포스팅으로 돌아온 TAK 입니다. 이번 주제는 &amp;quot;AWS-Azure VPN S2S 연결 및 DNS 서버 구성&amp;quot; 입니다. 이는 VPN S2S 연결을 통해 Multi Cloud 간 통신 그리고 Azure PaaS 리소스인 Azure Storage Account(&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/10&quot; data-og-url=&quot;https://with-cloud.tistory.com/10&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/biFEQ8/hyULZ5nVt7/KN5G9X0tVH6nJsj0xgEYIK/img.png?width=800&amp;amp;height=112&amp;amp;face=0_0_800_112,https://scrap.kakaocdn.net/dn/zpV65/hyUL2gJpzL/16mIr0gKE6X1qvLmJz1ZVk/img.png?width=800&amp;amp;height=112&amp;amp;face=0_0_800_112,https://scrap.kakaocdn.net/dn/624MA/hyUIF8Bdvw/eZwm1zH8l4pUmBocphg7Mk/img.png?width=2000&amp;amp;height=831&amp;amp;face=0_0_2000_831&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/10&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biFEQ8/hyULZ5nVt7/KN5G9X0tVH6nJsj0xgEYIK/img.png?width=800&amp;amp;height=112&amp;amp;face=0_0_800_112,https://scrap.kakaocdn.net/dn/zpV65/hyUL2gJpzL/16mIr0gKE6X1qvLmJz1ZVk/img.png?width=800&amp;amp;height=112&amp;amp;face=0_0_800_112,https://scrap.kakaocdn.net/dn/624MA/hyUIF8Bdvw/eZwm1zH8l4pUmBocphg7Mk/img.png?width=2000&amp;amp;height=831&amp;amp;face=0_0_2000_831');&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;1부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 새로운 포스팅으로 돌아온 TAK 입니다. 이번 주제는 &quot;AWS-Azure VPN S2S 연결 및 DNS 서버 구성&quot; 입니다. 이는 VPN S2S 연결을 통해 Multi Cloud 간 통신 그리고 Azure PaaS 리소스인 Azure Storage Account(&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1702344296348&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;2부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성&quot; data-og-description=&quot;안녕하세요. &amp;quot;2부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성&amp;quot; 포스팅으로 돌아온 TAK 입니다. 이번 포스팅의 내용에서는 일부 일반적인 리소스 배포에 대한 내용은 생략되어 있습니다. 다만, 필요한 구&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/11&quot; data-og-url=&quot;https://with-cloud.tistory.com/11&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bqNkSo/hyUL1WrsOO/esB3jNbhJTLvtl4eDeMBm0/img.png?width=800&amp;amp;height=190&amp;amp;face=0_0_800_190,https://scrap.kakaocdn.net/dn/k46nJ/hyUL1WrsQh/CcpuSxEX1EHqZHDiABTSw1/img.png?width=800&amp;amp;height=190&amp;amp;face=0_0_800_190,https://scrap.kakaocdn.net/dn/3oKdb/hyUIA0ubja/v3CPs9zvBPg59JiXgzuxy1/img.png?width=2000&amp;amp;height=1406&amp;amp;face=0_0_2000_1406&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/11&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/11&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bqNkSo/hyUL1WrsOO/esB3jNbhJTLvtl4eDeMBm0/img.png?width=800&amp;amp;height=190&amp;amp;face=0_0_800_190,https://scrap.kakaocdn.net/dn/k46nJ/hyUL1WrsQh/CcpuSxEX1EHqZHDiABTSw1/img.png?width=800&amp;amp;height=190&amp;amp;face=0_0_800_190,https://scrap.kakaocdn.net/dn/3oKdb/hyUIA0ubja/v3CPs9zvBPg59JiXgzuxy1/img.png?width=2000&amp;amp;height=1406&amp;amp;face=0_0_2000_1406');&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;2부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. &quot;2부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성&quot; 포스팅으로 돌아온 TAK 입니다. 이번 포스팅의 내용에서는 일부 일반적인 리소스 배포에 대한 내용은 생략되어 있습니다. 다만, 필요한 구&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;이번에는 조금 더 확장하여 Azure에서 제공하는 PaaS형 DNS 서버 역할을 수행하는 Azure Private Resolver에 대한 내용을 이야기 해보려 합니다!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;1. 정의&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;Azure Private Resolver를 정의하자면 다음과 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VM 기반 DNS 서버를 배포하지 않고 온-프레미스 환경에서 Azure DNS 프라이빗 영역을 쿼리하거나 그 반대로 쿼리할 수 있는 새로운 서비스&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 이전 포스팅에서 구성한 DNS 서버 구성할 필요 없이 Cloud 내부에서 인프라 구성 시에 보다 효율적으로 사용 가능한 리소스 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure의 모든(혹은 대부분)의 PaaS형 리소스들은 DNS 기반으로 동작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이에 온-프레미스 혹은 다른 CSP 환경에서 Private 구성(Private Endpoint - Private Link)된 Azure PaaS 리소스들을 쿼리할 때, DNS서버 혹은 hosts 파일에 정보를 등록하여 액세스 및 사용 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 때 보다 많은 PaaS형 리소스 사용 혹은 Cloud Native 환경이라면 활용하기 좋은 리소스라고 생각됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 작동 방식&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xpfGy/btsBHQm9WaJ/2TjmqNxPN5BDnP8jRi7KV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xpfGy/btsBHQm9WaJ/2TjmqNxPN5BDnP8jRi7KV0/img.png&quot; data-alt=&quot;https://learn.microsoft.com/ko-kr/azure/dns/media/dns-resolver-overview/resolver-architecture.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xpfGy/btsBHQm9WaJ/2TjmqNxPN5BDnP8jRi7KV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxpfGy%2FbtsBHQm9WaJ%2F2TjmqNxPN5BDnP8jRi7KV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;456&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://learn.microsoft.com/ko-kr/azure/dns/media/dns-resolver-overview/resolver-architecture.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쿼리 프로세스를 요약하자면 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(예시에서는 Express Route를 사용했지만, VPN 연결로 이해하셔도 무방합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 네트워크 환경의 Client 에서 DNS 쿼리를 실행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client 환경의 가상 네트워크에 대한 DNS 서버가 Azure로 향하는 구성(즉, (조건부) 전달자)이 되어 있다는 가정으로, 쿼리를 지정된 IP 주소로 전달합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전달 받은 정보를 기반으로, Azure DNS 서버(&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Default&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; )&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;가 VNet에 구성되어 있으며, 동일한 VNet에 연결된 Private DNS Zone이 있는 경우에는 해당 영역을 참조합니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 쿼리가 VNet에 연결된 Private DNS Zone과 일치하지 않는다면, DNS 전달 규칙 집합에 대한 가상 네트워크 링크를 참조합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규칙 집합 링크가 없는 경우, Azure DNS를 사용하여 쿼리를 확인합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;규칙 집합 링크가 있는 경우, DNS 전달 규칙을 평가합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;접미사가 일치하는 경우, 쿼리를 지정된 주소로 전달합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러&amp;nbsp;항목이&amp;nbsp;일치하는&amp;nbsp;경우&amp;nbsp;가장&amp;nbsp;긴&amp;nbsp;접미사를&amp;nbsp;사용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일치하는&amp;nbsp;항목이&amp;nbsp;없는&amp;nbsp;경우&amp;nbsp;DNS&amp;nbsp;전달을&amp;nbsp;수행하지&amp;nbsp;않고&amp;nbsp;Azure&amp;nbsp;DNS를&amp;nbsp;사용하여&amp;nbsp;쿼리를&amp;nbsp;확인합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 구성&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;아래 구성은 이전 포스팅한 구성을 &lt;b&gt;기반으로 한 정리임을 알려드립니다.&lt;/b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2023.11.29 - [TOPIC/Cloud] - 1부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 아키텍처의 구성처럼 Azure Private Resolver의 경우, &lt;u&gt;동작을 위한 별도의 Virtual Network를 구성&lt;/u&gt;하여야 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, &lt;u&gt;DNS 확인자 역할을 하는 InBound / OutBoud 엔드포인트를 배포하는 Subnet의 경우&lt;/u&gt;에도 &lt;b&gt;Microsoft.Network/dnsResolvers&lt;/b&gt;에만 위임하기 때문에 &lt;b&gt;다른 리소스(서비스)를 사용이 불가&lt;/b&gt;합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-1. 배포를 위한 기본 및 제약 사항 확인&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1199&quot; data-origin-height=&quot;1078&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7xuxZ/btsBSaSeYj4/sGwesE1pKJh7Lkqz2V6TQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7xuxZ/btsBSaSeYj4/sGwesE1pKJh7Lkqz2V6TQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7xuxZ/btsBSaSeYj4/sGwesE1pKJh7Lkqz2V6TQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7xuxZ%2FbtsBSaSeYj4%2FsGwesE1pKJh7Lkqz2V6TQ0%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;1199&quot; height=&quot;1078&quot; data-origin-width=&quot;1199&quot; data-origin-height=&quot;1078&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3-2. 인/아웃 바운드 엔드포인트 추가&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인바운드 엔드포인트&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DNS 질의 시, 도메인 이름 확인 요청 받을 수 있는 인바운드 엔드포인트 구성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;AWS DNS 서버의 조건부 전달자 설정에 대한 IP 주소&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Static 사설 IP 할당&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;1573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/89cIx/btsBZHRkLt7/eNv9G73Gaz3cKprupLhvm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/89cIx/btsBZHRkLt7/eNv9G73Gaz3cKprupLhvm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/89cIx/btsBZHRkLt7/eNv9G73Gaz3cKprupLhvm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F89cIx%2FbtsBZHRkLt7%2FeNv9G73Gaz3cKprupLhvm0%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;2000&quot; height=&quot;1573&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1573&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;2000&quot; data-origin-height=&quot;891&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AffRs/btsBY3G6OSk/7txu3fmWvFhkOBKWnODiU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AffRs/btsBY3G6OSk/7txu3fmWvFhkOBKWnODiU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AffRs/btsBY3G6OSk/7txu3fmWvFhkOBKWnODiU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAffRs%2FbtsBY3G6OSk%2F7txu3fmWvFhkOBKWnODiU0%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;2000&quot; height=&quot;891&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;891&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위와 같은 방식으로 아웃바운드 엔드포인트 추가&lt;/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;2000&quot; data-origin-height=&quot;863&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8zPAp/btsB4TW8ebt/ysNNAUeFnak7wOqnhRyQkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8zPAp/btsB4TW8ebt/ysNNAUeFnak7wOqnhRyQkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8zPAp/btsB4TW8ebt/ysNNAUeFnak7wOqnhRyQkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8zPAp%2FbtsB4TW8ebt%2FysNNAUeFnak7wOqnhRyQkK%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;2000&quot; height=&quot;863&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;863&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-3. Ruleset&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qWJ6r/btsBZG5Yc5D/GBYiK7BpyRKnlFnzXY8RR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qWJ6r/btsBZG5Yc5D/GBYiK7BpyRKnlFnzXY8RR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qWJ6r/btsBZG5Yc5D/GBYiK7BpyRKnlFnzXY8RR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqWJ6r%2FbtsBZG5Yc5D%2FGBYiK7BpyRKnlFnzXY8RR0%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;2000&quot; height=&quot;510&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현 구성은 AWS Client &amp;gt; Azure Storage Account 에 대한 질의로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아웃바운드 엔드포인트 기준으로 DNS 트래픽에 대한 조건부 전달 규칙은 필요하지 않습니다.&lt;/p&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;rarr; Azure Private Resolver를 사용함으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Azure에 DNS 서버 구성과 Forwarder 구성 할 필요 없이, DNS Private Resolver를 통해 전달 가능합니다.&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;4. 최종 구성 및 테스트&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS DNS 서버 조건부 전달자 구성의 IP 주소를 인바운드 엔드포인트 정적 IP 주소를 추가합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 Azure의 DNS 서버의 사설 IP 주소를 그대로 둔다면, 해당 서버 OFF 상태이어야 합니다.&lt;/li&gt;
&lt;li&gt;또한,&lt;span style=&quot;color: #ee2323;&quot; data-token-index=&quot;1&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 명령어&lt;/span&gt;(ipconfig /flushdns) &lt;/span&gt;를 사용하여 DNS 서버의 캐시값을 초기화 한 후에 클라이언트에서 질의해야 해당 구성의 목적에 맞게 정상적인 테스트 할 수 있습니다. (혹은 인바운드 엔드포인트 IP만 등록)&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;1390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rccp1/btsBYcYssp6/DDhQOIipfyUYyRtu2RIkn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rccp1/btsBYcYssp6/DDhQOIipfyUYyRtu2RIkn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rccp1/btsBYcYssp6/DDhQOIipfyUYyRtu2RIkn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frccp1%2FbtsBYcYssp6%2FDDhQOIipfyUYyRtu2RIkn0%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;2000&quot; height=&quot;1390&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결과&lt;/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;2000&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sJdhL/btsBYdJT1tn/5LkA8QeaMfIaaVIJMXdOzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sJdhL/btsBYdJT1tn/5LkA8QeaMfIaaVIJMXdOzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sJdhL/btsBYdJT1tn/5LkA8QeaMfIaaVIJMXdOzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsJdhL%2FbtsBYdJT1tn%2F5LkA8QeaMfIaaVIJMXdOzk%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;2000&quot; height=&quot;345&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;&quot;AWS-Azure VPN S2S(Site-to-Site) 연결과 DNS 서버 구성&quot;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;글의 확장으로 시작한 이번 포스팅을 마치겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다:)&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>aws</category>
      <category>Azure</category>
      <category>AzurePrivateResolver</category>
      <category>cloud</category>
      <category>dns</category>
      <category>MultiCloud</category>
      <category>private</category>
      <category>Resolver</category>
      <category>멀티클라우드</category>
      <category>클라우드</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/12</guid>
      <comments>https://with-cloud.tistory.com/12#entry12comment</comments>
      <pubDate>Fri, 15 Dec 2023 13:38:31 +0900</pubDate>
    </item>
    <item>
      <title>2부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성</title>
      <link>https://with-cloud.tistory.com/11</link>
      <description>&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&quot;2부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성&quot;&lt;/b&gt; 포스팅으로 돌아온&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅의 내용에서는 일부 일반적인 리소스 배포에 대한 내용은 생략되어 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, 필요한 구성에 대한 정보는 포함되어 있음을 알려드립니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1부 내용은 아래 링크를 참고해주세요:)&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1701669584895&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;1부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성&quot; data-og-description=&quot;안녕하세요. 새로운 포스팅으로 돌아온 TAK 입니다. 이번 주제는 &amp;quot;AWS-Azure VPN S2S 연결 및 DNS 서버 구성&amp;quot; 입니다. 이는 VPN S2S 연결을 통해 Multi Cloud 간 통신 그리고 Azure PaaS 리소스인 Azure Storage Account(&quot; data-og-host=&quot;with-cloud.tistory.com&quot; data-og-source-url=&quot;https://with-cloud.tistory.com/10&quot; data-og-url=&quot;https://with-cloud.tistory.com/10&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jbUL6/hyUIuRLYZI/pnmUMbAIm1ouFhZF0e8Z51/img.png?width=800&amp;amp;height=112&amp;amp;face=0_0_800_112,https://scrap.kakaocdn.net/dn/ySBob/hyUIA5wmJb/TP0cWKMRoMN61ZwaJNN7TK/img.png?width=800&amp;amp;height=112&amp;amp;face=0_0_800_112,https://scrap.kakaocdn.net/dn/bvGo54/hyUIENChFc/ITuExH1CWbUczhddzUoUKK/img.png?width=2000&amp;amp;height=890&amp;amp;face=0_0_2000_890&quot;&gt;&lt;a href=&quot;https://with-cloud.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://with-cloud.tistory.com/10&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jbUL6/hyUIuRLYZI/pnmUMbAIm1ouFhZF0e8Z51/img.png?width=800&amp;amp;height=112&amp;amp;face=0_0_800_112,https://scrap.kakaocdn.net/dn/ySBob/hyUIA5wmJb/TP0cWKMRoMN61ZwaJNN7TK/img.png?width=800&amp;amp;height=112&amp;amp;face=0_0_800_112,https://scrap.kakaocdn.net/dn/bvGo54/hyUIENChFc/ITuExH1CWbUczhddzUoUKK/img.png?width=2000&amp;amp;height=890&amp;amp;face=0_0_2000_890');&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;1부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 새로운 포스팅으로 돌아온 TAK 입니다. 이번 주제는 &quot;AWS-Azure VPN S2S 연결 및 DNS 서버 구성&quot; 입니다. 이는 VPN S2S 연결을 통해 Multi Cloud 간 통신 그리고 Azure PaaS 리소스인 Azure Storage Account(&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;with-cloud.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Contents&lt;/span&gt;&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. DNS 서버 구성&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4-1. Windows Server DNS 서버 설치&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AWS, Azure 모두 IaaS형 Windows Server에 대한 DNS 서버 설치 방법은 동일합니다.&lt;/span&gt;&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;span style=&quot;color: #000000;&quot;&gt;4-1-1. 서버 관리자 OR PowerShell을 통한 DNS 서버 설치&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(1) [서버 관리자] - [역할 및 기능 추가] - [DNS 서버] 선택을 후 설치&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;2000&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qPSPi/btsBirPI4Gw/eH61yWJfck63y1v8cakFU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qPSPi/btsBirPI4Gw/eH61yWJfck63y1v8cakFU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qPSPi/btsBirPI4Gw/eH61yWJfck63y1v8cakFU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqPSPi%2FbtsBirPI4Gw%2FeH61yWJfck63y1v8cakFU1%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;2000&quot; height=&quot;477&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OR&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(2) 관리자 권한으로 PowerShell 실행&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;2000&quot; data-origin-height=&quot;1242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cL2rJ3/btsBqe139NC/ak72hKFje22yWcPDQrySn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cL2rJ3/btsBqe139NC/ak72hKFje22yWcPDQrySn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cL2rJ3/btsBqe139NC/ak72hKFje22yWcPDQrySn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcL2rJ3%2FbtsBqe139NC%2Fak72hKFje22yWcPDQrySn0%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;2000&quot; height=&quot;1242&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1242&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DNS 역할 설치를 위한 명령어 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1701670136337&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Install-WindowsFeature -Name DNS&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설치 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v8qk5/btsBqtLFdSb/ZZjBuKYHOqnLCbjaTuSurK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v8qk5/btsBqtLFdSb/ZZjBuKYHOqnLCbjaTuSurK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v8qk5/btsBqtLFdSb/ZZjBuKYHOqnLCbjaTuSurK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv8qk5%2FbtsBqtLFdSb%2FZZjBuKYHOqnLCbjaTuSurK%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;2000&quot; height=&quot;373&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;373&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[서버 매니저]를 통해 반영 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biA3Em/btsBiXHvpXA/VnTOEjXjsVXluQUD2s2lP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biA3Em/btsBiXHvpXA/VnTOEjXjsVXluQUD2s2lP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biA3Em/btsBiXHvpXA/VnTOEjXjsVXluQUD2s2lP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiA3Em%2FbtsBiXHvpXA%2FVnTOEjXjsVXluQUD2s2lP0%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;2000&quot; height=&quot;1170&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4-2. DNS 서버 구성&lt;/span&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4-2-1. (AWS) DNS 조건부 전달자 구성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[서버 매니저] - [Tools] - [DNS]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pYZxf/btsBlcqunLH/bVOTNxY3ahjmgm03WC534K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pYZxf/btsBlcqunLH/bVOTNxY3ahjmgm03WC534K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pYZxf/btsBlcqunLH/bVOTNxY3ahjmgm03WC534K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpYZxf%2FbtsBlcqunLH%2FbVOTNxY3ahjmgm03WC534K%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;2000&quot; height=&quot;929&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;929&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;blob.core.windows.net / Azure DNS 서버 PIP&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트에서 FQDN 쿼리 시, DNS 서버를 통해 대상 리소스 IP 찾을 수 있도록 구성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조건부 전달자 이므로 조건에 맞는 DNS 쿼리 시, 동작&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;1224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7LNzz/btsBl7vNbJu/ybeFuZek8WkU7PaNjUNrUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7LNzz/btsBl7vNbJu/ybeFuZek8WkU7PaNjUNrUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7LNzz/btsBl7vNbJu/ybeFuZek8WkU7PaNjUNrUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7LNzz%2FbtsBl7vNbJu%2FybeFuZek8WkU7PaNjUNrUk%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;2000&quot; height=&quot;1224&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1224&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용될 Blob 도메인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1701677867526&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Storage Account Name&amp;gt;.blob.core.windows.net&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure DNS Server의 Private IP 입력&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1797&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DQ80W/btsBo7WyBya/N6lgqZLx5FpKh6n1pVdXTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DQ80W/btsBo7WyBya/N6lgqZLx5FpKh6n1pVdXTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DQ80W/btsBo7WyBya/N6lgqZLx5FpKh6n1pVdXTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDQ80W%2FbtsBo7WyBya%2FN6lgqZLx5FpKh6n1pVdXTk%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;2000&quot; height=&quot;1797&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1797&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;2000&quot; data-origin-height=&quot;1224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdvsxZ/btsBqtrtSAY/g2VoyNTNpyvUBklp1Nxtr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdvsxZ/btsBqtrtSAY/g2VoyNTNpyvUBklp1Nxtr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdvsxZ/btsBqtrtSAY/g2VoyNTNpyvUBklp1Nxtr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdvsxZ%2FbtsBqtrtSAY%2Fg2VoyNTNpyvUBklp1Nxtr1%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;2000&quot; height=&quot;1224&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1224&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4-2-2. (Azure) DNS Forwarders 구성&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure VM - NIC(Network Interface) 에 연결된 Private IP 정적으로 설정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본값 : 동적 &amp;rarr; 정적(Static) 변경&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;2455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cefYkL/btsBqr1xd1X/jUAhYs67VpkR3eubbtsNTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cefYkL/btsBqr1xd1X/jUAhYs67VpkR3eubbtsNTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cefYkL/btsBqr1xd1X/jUAhYs67VpkR3eubbtsNTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcefYkL%2FbtsBqr1xd1X%2FjUAhYs67VpkR3eubbtsNTK%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;2000&quot; height=&quot;2455&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2455&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure DNS 서버&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 DNS 서버의 Forwarders에서 &lt;b&gt;Azure DNS 가상 서버 IP(168.63.129.16)&lt;/b&gt; 를 바라보게 되는 구성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 Azure 플랫폼 리소스에 대한 통신 채널을 원할하게 설정하는 데 사용되는 가상 공용 IP 주소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, 내부 Azure 플랫폼만이 통신 간 메시지 원본을 제공할 수 있으므로, 안전함.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr; 즉, Forwarders 값으로 AWS DNS 서버로부터 수신되면, Azure DNS 로 전달되게끔 구성하는 과정입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bccdC4/btsBiWWmYXx/7kD0v9ZXcXRsjFAfw8jiNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bccdC4/btsBiWWmYXx/7kD0v9ZXcXRsjFAfw8jiNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bccdC4/btsBiWWmYXx/7kD0v9ZXcXRsjFAfw8jiNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbccdC4%2FbtsBiWWmYXx%2F7kD0v9ZXcXRsjFAfw8jiNK%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;2000&quot; height=&quot;1406&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1406&quot;/&gt;&lt;/span&gt;&lt;/figure&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/9ADMC/btsBqJASNco/qCxBriqmODrA6OUiofHCE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9ADMC/btsBqJASNco/qCxBriqmODrA6OUiofHCE1/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1803&quot; data-is-animation=&quot;false&quot; style=&quot;width: 57.5386%; margin-right: 10px;&quot; data-widthpercent=&quot;58.22&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9ADMC/btsBqJASNco/qCxBriqmODrA6OUiofHCE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9ADMC%2FbtsBqJASNco%2FqCxBriqmODrA6OUiofHCE1%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;2000&quot; height=&quot;1803&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KvMBv/btsBo882NWf/WsBMOIqPUyqqSwHsinlZz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KvMBv/btsBo882NWf/WsBMOIqPUyqqSwHsinlZz1/img.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2512&quot; data-is-animation=&quot;false&quot; style=&quot;width: 41.2986%;&quot; data-widthpercent=&quot;41.78&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KvMBv/btsBo882NWf/WsBMOIqPUyqqSwHsinlZz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKvMBv%2FbtsBo882NWf%2FWsBMOIqPUyqqSwHsinlZz1%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;2000&quot; height=&quot;2512&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4-3. AWS Client 구성&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DNS 정보를 AWS의 Default 값이 아닌, AWS에 구성한 DNS 서버를 바라보기 위한 설정&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 인스턴스에 적용되는 보안 규칙에서 대해서 AWS DNS 서버의 보안 규칙 중 인바운드에 대한 부분을 허용&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(DNS - 53, UDP + TCP)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;daemon 형식으로 실행중인 Amazon Linux의 DNS Resolve 구성 확인&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;systemd-resolved&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOGMMV/btsBjCwwnXL/RLtQFpEmLDj0vPgC4FvFE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOGMMV/btsBjCwwnXL/RLtQFpEmLDj0vPgC4FvFE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOGMMV/btsBjCwwnXL/RLtQFpEmLDj0vPgC4FvFE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOGMMV%2FbtsBjCwwnXL%2FRLtQFpEmLDj0vPgC4FvFE0%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;2000&quot; height=&quot;435&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;435&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;nslookup 명령어를 통해 구글 도메인(google.com) 조회하면, 도메인 정보 조회에서 0.200.0.2 서버(DNS)가 사용되었음을 알 수 있습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 EC2의 기본 DNS 정보이며, AWS에서 구성한 VPC의 대역(10.200.0.0/16) 내 포함되어 있는 내부 IP 입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RaT1p/btsBk9US8U9/cdrPdNiZ3VawGs36XmGL91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RaT1p/btsBk9US8U9/cdrPdNiZ3VawGs36XmGL91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RaT1p/btsBk9US8U9/cdrPdNiZ3VawGs36XmGL91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRaT1p%2FbtsBk9US8U9%2FcdrPdNiZ3VawGs36XmGL91%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;2000&quot; height=&quot;491&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr; &amp;nbsp;하지만, 현재 구성에서는 기존 DNS 값이 아닌, &lt;b&gt;다른 서브넷에 구성한 별도의 DNS 서버를 바라보아야 하며&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;특정 DNS가 포함된 FQDN 조회 시 정상적으로 결과값을 반환(조건부 전달자 구성 했기 때문)&lt;/b&gt;해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;**참고 사항&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;: AWS는 동일 네트워크 구성이더라도 보안 그룹의 인/아웃바운드에 대한 별도 설정 필요합니다. &lt;br /&gt;(Azure의 경우, 기본값으로 가상 네트워크 내 모든 통신 허용)&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;만약 별도의 구성 없이 *기본값(기본 DNS 정보이며, AWS에서 구성한 VPC의 대역(10.200.0.0/16) 내 포함되어 있는 내부 IP)으로 진행한다면, 아래와 같이 클라이언트 단에서 변경한 DNS의 정보값이 반영되지 않습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;telnet 명령어를 통해 DNS port 53 Open 여부 확인 &amp;rarr; 액세스 불가 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1w3FB/btsBklIKZUS/hfVBiRB2it6iv3zJPavSBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1w3FB/btsBklIKZUS/hfVBiRB2it6iv3zJPavSBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1w3FB/btsBklIKZUS/hfVBiRB2it6iv3zJPavSBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1w3FB%2FbtsBklIKZUS%2FhfVBiRB2it6iv3zJPavSBk%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;2000&quot; height=&quot;186&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;186&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;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;재부팅 중에 유지되는 고정 DNS 서버를 EC2 인스턴스에 할당&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;아래 경로에서 파일 내용 중 DNS 편집&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1701757170494&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /etc/systemd/resolved.conf&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;2000&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nRMnU/btsBuvI3ZqC/dKCEhhQV2z3G80wQxVWLd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nRMnU/btsBuvI3ZqC/dKCEhhQV2z3G80wQxVWLd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nRMnU/btsBuvI3ZqC/dKCEhhQV2z3G80wQxVWLd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnRMnU%2FbtsBuvI3ZqC%2FdKCEhhQV2z3G80wQxVWLd1%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;2000&quot; height=&quot;436&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;436&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;변경 사항 반영을 위한 서비스 재시작 및 상태 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1701757202413&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart systemd-resolved.service&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;2000&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0t5r2/btsBudWmPrn/UmKK5r7Ko0mKGSLouL9AV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0t5r2/btsBudWmPrn/UmKK5r7Ko0mKGSLouL9AV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0t5r2/btsBudWmPrn/UmKK5r7Ko0mKGSLouL9AV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0t5r2%2FbtsBudWmPrn%2FUmKK5r7Ko0mKGSLouL9AV1%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;2000&quot; height=&quot;530&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;530&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로컬 호스트 리졸버를 바라보며, nameserver 정보 반영 여부 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1701757243132&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /etc/resolv.conf&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;2000&quot; data-origin-height=&quot;1016&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QNexa/btsBugFprwY/1N8ogYhQrb6hKbrLNK1aU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QNexa/btsBugFprwY/1N8ogYhQrb6hKbrLNK1aU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QNexa/btsBugFprwY/1N8ogYhQrb6hKbrLNK1aU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQNexa%2FbtsBugFprwY%2F1N8ogYhQrb6hKbrLNK1aU1%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;2000&quot; height=&quot;1016&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1016&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본 DNS 정보 주석 처리&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kFBFo/btsBugrQXN2/xFnXkloaHAbu6zwQNJX5L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kFBFo/btsBugrQXN2/xFnXkloaHAbu6zwQNJX5L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kFBFo/btsBugrQXN2/xFnXkloaHAbu6zwQNJX5L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkFBFo%2FbtsBugrQXN2%2FxFnXkloaHAbu6zwQNJX5L0%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;2000&quot; height=&quot;327&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;327&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;733&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beNwJr/btsBugZNNEK/BTzHl2tfLLYE6sTkf41QVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beNwJr/btsBugZNNEK/BTzHl2tfLLYE6sTkf41QVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beNwJr/btsBugZNNEK/BTzHl2tfLLYE6sTkf41QVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeNwJr%2FbtsBugZNNEK%2FBTzHl2tfLLYE6sTkf41QVK%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;2000&quot; height=&quot;733&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;733&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr; DNS 질의 시, 기본 DNS 만 사용되며, 해당 값을 주석 처리하게 되면, 질의 불가(무응답) 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 이유는,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AWS에 배포된 DNS 서버의 보안그룹 규칙에서 상기 작업에 대한 인바운드 Rule 이 존재하지 않기 때문입니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, 다음과 같은 조치가 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AWS의 배포된 DNS 서버의 보안그룹 규칙에 DNS port 53 대해 인바운드 규칙을 추가합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DNS(UDR) 추가 &amp;rarr; 해당 VPN 대역&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;telnet 등 연결 확인을 위한 DNS(TCP) 추가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8pE6Y/btsBtIPMNxH/gNwFAqUYQZZ66iqpG9ybK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8pE6Y/btsBtIPMNxH/gNwFAqUYQZZ66iqpG9ybK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8pE6Y/btsBtIPMNxH/gNwFAqUYQZZ66iqpG9ybK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8pE6Y%2FbtsBtIPMNxH%2FgNwFAqUYQZZ66iqpG9ybK1%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;2000&quot; height=&quot;234&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;234&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설정 후, 재질의 시 수정된 DNS 정보가 반영되었음을 확인할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ecQ2Zu/btsBup3o5v5/mqWRwk7nlcUObsRDhUfqS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ecQ2Zu/btsBup3o5v5/mqWRwk7nlcUObsRDhUfqS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ecQ2Zu/btsBup3o5v5/mqWRwk7nlcUObsRDhUfqS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FecQ2Zu%2FbtsBup3o5v5%2FmqWRwk7nlcUObsRDhUfqS0%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;2000&quot; height=&quot;176&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;176&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;2000&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOctTM/btsBqJ2U70B/SkYppLuwlQpfQKqSKYt35K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOctTM/btsBqJ2U70B/SkYppLuwlQpfQKqSKYt35K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOctTM/btsBqJ2U70B/SkYppLuwlQpfQKqSKYt35K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOctTM%2FbtsBqJ2U70B%2FSkYppLuwlQpfQKqSKYt35K%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;2000&quot; height=&quot;469&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr; 이는 클라이언트에서 DNS 서버를 통해 Azure 인프라에 배포된 Storage 서비스에 대한 정보를 찾기 위한 과정으로, 클라이언트 단에서 AWS DNS 서버로 질의 하는 과정이 선행되어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;결과&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 모든 작업을 통해&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client는 AWS DNS 서버를 바라보고 있으며&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 Azure의 DNS 서버의 Forwarder를 통해 Azure DNS 서버(168.63.129.16&lt;b&gt;)&lt;/b&gt; 와 통신할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서, Azure 가상 네트워크에 연결된 PaaS 리소스인 Storage Account(Blob)에 할당된 Private IP 확인 가능합니다.&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS 내 Client 에서 질의&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbEtM1/btsBqukXL5R/GLQ8KnEuehaTAgbDrR13AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbEtM1/btsBqukXL5R/GLQ8KnEuehaTAgbDrR13AK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbEtM1/btsBqukXL5R/GLQ8KnEuehaTAgbDrR13AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbEtM1%2FbtsBqukXL5R%2FGLQ8KnEuehaTAgbDrR13AK%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;2000&quot; height=&quot;626&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;626&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;2000&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sjEx0/btsBuenTVZe/K0zhbT2WLDEwvPKuFICjB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sjEx0/btsBuenTVZe/K0zhbT2WLDEwvPKuFICjB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sjEx0/btsBuenTVZe/K0zhbT2WLDEwvPKuFICjB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsjEx0%2FbtsBuenTVZe%2FK0zhbT2WLDEwvPKuFICjB1%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;2000&quot; height=&quot;578&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이상으로&lt;b&gt; &quot;AWS-Azure VPN S2S 연결 및 DNS 서버 구성&quot; 포스팅을 마치겠습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관련하여 추가 포스팅으로 Azure의 PaaS 리소스인 &lt;b&gt;[Azure DNS Private Resolver]&lt;/b&gt;으로 찾아뵙겠습니다:)&lt;/span&gt;&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>aws</category>
      <category>Azure</category>
      <category>blob</category>
      <category>cloud</category>
      <category>dns</category>
      <category>DNS Server</category>
      <category>MutiCloud</category>
      <category>private</category>
      <category>멀티클라우드</category>
      <category>클라우드</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/11</guid>
      <comments>https://with-cloud.tistory.com/11#entry11comment</comments>
      <pubDate>Wed, 6 Dec 2023 11:03:20 +0900</pubDate>
    </item>
    <item>
      <title>1부 : AWS-Azure VPN S2S 연결 및 DNS 서버 구성</title>
      <link>https://with-cloud.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안녕하세요.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새로운 포스팅으로 돌아온 &lt;b&gt;&lt;span style=&quot;background-color: #006dd7; color: #ffffff;&quot;&gt;TAK&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; text-align: start;&quot;&gt;입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 주제는 &lt;b&gt;&quot;AWS-Azure VPN S2S 연결 및 DNS 서버 구성&quot;&lt;/b&gt; 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 VPN S2S 연결을 통해 Multi Cloud 간 통신 그리고 Azure PaaS 리소스인 Azure Storage Account(Blob) 액세스를 위한 DNS 서버 구성입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;최근 기업 간 여러 CSP의 인프라와 서비스를 사용하며 운영하는 Multi Cloud 수요가 증가함에 따라 주제를 선정하여 준비하게 되었습니다.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 포스팅의 내용에서는 일부 일반적인 리소스 배포에 대한 내용은 생략되어 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;다만, 필요한 구성에 대한 정보는 포함되어 있음을 알려드립니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;**&lt;a style=&quot;color: #000000;&quot; href=&quot;https://en.wikipedia.org/wiki/Multicloud&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Multi Cloud&lt;/a&gt; 란?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;정의의 개념은 비슷하지만, 세부적인 사항은 각 CSP 별로 다를 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;본격적인 내용에 앞서, &lt;b&gt;3가지 배경지식&lt;/b&gt;이 될 내용을 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;첫째, AWS와 Azure의 리소스 용어&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;General&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AWS&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;비고&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;Virtual Network&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VPC&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Virtaul Private&amp;nbsp; Cloud)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VNET&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Virtual Network)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Virtual Machine&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;EC2&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;Elastic Compute Cloud)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VM&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Virtual Machine)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Endpoint&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(In Cloud)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Virtual Private Gateway&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Virtual Network Gateway&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;For VPN Connection&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Gateway&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(On the other side) &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Customer Gateway&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Local Network Gateway&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; For VPN Connection &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Storage&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;S3&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Simple Storage Services)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Blob of Storage Account&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&amp;nbsp;&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;둘째, VPN S2S 연결&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;AWS와 Azure에서는 VPN S2S(Site to Site) 연결을 아래 그림과 같이 표현하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- AWS&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;500&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbW1Er/btsA2Y1fOBG/UJ2F0D7fxbb1kT43pfP96K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbW1Er/btsA2Y1fOBG/UJ2F0D7fxbb1kT43pfP96K/img.png&quot; data-alt=&quot;이미지 출처 :&amp;amp;amp;nbsp;https://docs.aws.amazon.com/ko_kr/vpn/latest/s2svpn/images/vpn-how-it-works-vgw.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbW1Er/btsA2Y1fOBG/UJ2F0D7fxbb1kT43pfP96K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbW1Er%2FbtsA2Y1fOBG%2FUJ2F0D7fxbb1kT43pfP96K%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;605&quot; height=&quot;259&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 출처 :&amp;amp;nbsp;https://docs.aws.amazon.com/ko_kr/vpn/latest/s2svpn/images/vpn-how-it-works-vgw.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qUnQw/btsA314tJos/yII1BJzkfywUw1MI5pack1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qUnQw/btsA314tJos/yII1BJzkfywUw1MI5pack1/img.png&quot; data-alt=&quot;이미지 출처 :&amp;amp;amp;nbsp;https://learn.microsoft.com/ko-kr/azure/vpn-gateway/media/tutorial-site-to-site-portal/diagram.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qUnQw/btsA314tJos/yII1BJzkfywUw1MI5pack1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqUnQw%2FbtsA314tJos%2FyII1BJzkfywUw1MI5pack1%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;619&quot; height=&quot;157&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 출처 :&amp;amp;nbsp;https://learn.microsoft.com/ko-kr/azure/vpn-gateway/media/tutorial-site-to-site-portal/diagram.png&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;표현의 방식이 다를 뿐, 서로 동일한 역할과 기능을 하는 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 구성에서는 일반적으로 S2S(Site to Site) 연결에서 사용되는 IPSec 방식을 사용하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쉽게 표현하면, Network to Network의 개념으로 사설망과 사설망을 연결하고자 할 때 IPSec 방식이 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 용어를 빌려 표현하자면, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이는 Multi 클라우드 간 보안 연결이며, 데이터가 Gateway 리소스로부터 전달되어 AWS - 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;span style=&quot;color: #000000;&quot;&gt;실제 아래 리소스들은 위 이미지와 같이 온-프레미스 즉, 각 클라우드 입장에서 반대편에서 S2S(Site to Site) 연결을 위해 설치된 물리적 디바이스 혹은 SW 애플리케이션의 정보를 담고,&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Gateway&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(On the other side)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Customer Gateway&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Local Network Gateway&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;For VPN Connection&lt;/span&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;암호화된 터널링을 통해, 각 Virtual Network의 Endpoint를 통해 연결 및 통신 가능함을 나타냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;관련하여 VPN 학습에서 큰 도움이 된 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://aws-hyoh.tistory.com/entry/VPN-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;블로그&lt;/a&gt;를 공유합니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1701236643167&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;VPN 쉽게 이해하기&quot; data-og-description=&quot;1960년대 미국과 소련이 한창 냉전으로 신경전을 벌이던 시절, 미국 국방부는 소련의 핵공격에 초토화되어도 작동하는 '통신이 가능한 군사용 네트워크' 개발에 착수했습니다. 국방부와 같은 정&quot; data-og-host=&quot;aws-hyoh.tistory.com&quot; data-og-source-url=&quot;https://aws-hyoh.tistory.com/entry/VPN-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://aws-hyoh.tistory.com/161&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Im2ww/hyUE2VB5Bk/ZQX6WKtYh2eEX3GU4OpdC0/img.gif?width=285&amp;amp;height=231&amp;amp;face=0_0_285_231,https://scrap.kakaocdn.net/dn/NEGke/hyUEZq4kAB/73VfAWSjyKYJeB22m8qSR1/img.gif?width=285&amp;amp;height=231&amp;amp;face=0_0_285_231,https://scrap.kakaocdn.net/dn/cd0Rg6/hyUE22nFjk/EodA6Spdw7mNJha3Qq0kp0/img.png?width=1128&amp;amp;height=461&amp;amp;face=0_0_1128_461&quot;&gt;&lt;a href=&quot;https://aws-hyoh.tistory.com/entry/VPN-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws-hyoh.tistory.com/entry/VPN-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Im2ww/hyUE2VB5Bk/ZQX6WKtYh2eEX3GU4OpdC0/img.gif?width=285&amp;amp;height=231&amp;amp;face=0_0_285_231,https://scrap.kakaocdn.net/dn/NEGke/hyUEZq4kAB/73VfAWSjyKYJeB22m8qSR1/img.gif?width=285&amp;amp;height=231&amp;amp;face=0_0_285_231,https://scrap.kakaocdn.net/dn/cd0Rg6/hyUE22nFjk/EodA6Spdw7mNJha3Qq0kp0/img.png?width=1128&amp;amp;height=461&amp;amp;face=0_0_1128_461');&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;VPN 쉽게 이해하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1960년대 미국과 소련이 한창 냉전으로 신경전을 벌이던 시절, 미국 국방부는 소련의 핵공격에 초토화되어도 작동하는 '통신이 가능한 군사용 네트워크' 개발에 착수했습니다. 국방부와 같은 정&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aws-hyoh.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;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;셋째, DNS 통신 방식&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pi1tT/btsA4PCZVtd/5saqOAShwTsRRiIb0bfZH0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pi1tT/btsA4PCZVtd/5saqOAShwTsRRiIb0bfZH0/img.jpg&quot; data-alt=&quot;이미지 출처 : https://www.wisewiredbooks.com/csbooks/ch3-network-internet/img/dns-recursive.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pi1tT/btsA4PCZVtd/5saqOAShwTsRRiIb0bfZH0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpi1tT%2FbtsA4PCZVtd%2F5saqOAShwTsRRiIb0bfZH0%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;542&quot; height=&quot;332&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 출처 : https://www.wisewiredbooks.com/csbooks/ch3-network-internet/img/dns-recursive.jpg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일반적으로 DNS의 기본 동작은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 그림과 관련된 설명은 아래 2가지를 가정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Cache가 남아 있지 않다는 가정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Local, Root, TLD DNS 에서 최초 질의한 FQDN을 알지 못한다는 가정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.웹 브라우저(클라이언트)에서 &lt;a style=&quot;color: #000000;&quot; href=&quot;http://www.google.com&quot;&gt;www.google.com&lt;/a&gt; 질의&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Computer는 우선 Local DNS 해당 Hostname에 대한 IP 주소를 질의&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; - Iterated query (반복적)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; - Recursive query (재귀적)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. Local DNS에 해당 정보가 없다면, Root DNS 질의&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; - 정보가 없다면, com DNS(TLD 네임 서버)의 IP 주소를 Local DNS에게 전달&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. TLD DNS에 질의&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; - 정보가 없다면, google.com DNS(google.com 네임 서버)의 IP주소를 Local DNS에게 전달&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. google.com의 네임 서버에 질의&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; - 해당 네임 서버에 등록된 ns에 따라서 질의한 FQDN의 주소를 응답&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6. 획득한 IP 주소를 Local DNS가 브라우저에게 전달&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만, 현재 AWS - Azure 클라우드 간 DNS 전달자를 사용하여 통신하는 구성은 Azure 클라우드의 리소스를 사용함으로써 보다 자세한 설명이 필요하기에 &lt;u&gt;&lt;b&gt;2부에서 자세히 다룰 예정&lt;/b&gt;&lt;/u&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(많관부~)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이로써 간략한 설명을 마치고, 본격적으로 실제 구성을 진행하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contents&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: none;&quot; data-ke-list-type=&quot;none&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Architecture&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYEmN6/btsARXfUY3A/6PNAwqXUVfkyKILvdnsDqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYEmN6/btsARXfUY3A/6PNAwqXUVfkyKILvdnsDqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYEmN6/btsARXfUY3A/6PNAwqXUVfkyKILvdnsDqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYEmN6%2FbtsARXfUY3A%2F6PNAwqXUVfkyKILvdnsDqK%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;860&quot; height=&quot;274&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;637&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Azure&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;VNet : 10.100.0.0/16&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;subnet01 : 10.000.0.0/24&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;subnet02 : 10.100.1.0/24&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;subnet-pe : 10.100.30.0/24&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GatewaySubnet : 10.100.255.0/24&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;AWS&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;VPC : 10.200.0.0/16&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tak-aws-subnet-public1-2a : 10.200.0.0/20&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tak-aws-subnet-private1-2a : 10.200.128.0/20&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tak-aws-subnet-public2-2b : 10.200.16.0/20&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tak-aws-subnet-private2-2b : 10.200.144.0/20&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Azure 인프라 - 네트워크&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1. 구성 목록&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Virtual Network(VNet)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상기 정보 기준으로 구성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure VM&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Windows (Windows Server 2019 Datacenter)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Standard B2s(2개 vcpu, 4GiB 메모리)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Virtual Network Gateway&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure의 VPN은 VNet 내 전용 Gateway Subnet 배포&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; &lt;/span&gt;구독 및 VNet Region(Korea Central)으로 한정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용량을 고려하여 적절한 SKU 선택하여 배포&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; &lt;/span&gt;현재 구성의 SKU : VpnGw2AZ&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Azure Storage Account&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PaaS 리소스로 그 중 Blob을 하위 리소스로 선택하여 Private Endpoint 연결. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해, 외부에 접근을 차단하고, 가상 네트워크 내에서만 액세스 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;rarr; Private Endpoint 할당되고, 배포된 서브넷 대역 기준으로 사설 IP 할당&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;890&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8UyOb/btsA9QUy8vZ/kytGZ6uQTeurPzjG5mdmkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8UyOb/btsA9QUy8vZ/kytGZ6uQTeurPzjG5mdmkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8UyOb/btsA9QUy8vZ/kytGZ6uQTeurPzjG5mdmkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8UyOb%2FbtsA9QUy8vZ%2FkytGZ6uQTeurPzjG5mdmkK%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;2000&quot; height=&quot;890&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;890&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;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. AWS 인프라 - 네트워크&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-1. VPC &amp;amp; EC2 생성&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;VPC&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;Auzre 대역과 중첩되지 않게 네트워크 구성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Client 서버 | DNS 서버 별도의 &lt;b&gt;보안 그룹&lt;/b&gt; 적용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;EC2&lt;/b&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;span style=&quot;color: #000000;&quot;&gt;Client 서버&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Amazon Linux 3 (t2.medium)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DNS 서버&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Windows Server 2019 Base (t3.medium)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2. VPN 연결을 위한 구성&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2-1. Custom GW 생성&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IP 주소 : 디바이스의 외부 인터페이스에 대한 인터넷 라우팅 가능 IP 주소&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 연결할 대상(Azure VPN)의 공용 IP&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PhfZ1/btsBaZEkRy4/9EFMBVaBbw3o4P4cQbHsKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PhfZ1/btsBaZEkRy4/9EFMBVaBbw3o4P4cQbHsKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PhfZ1/btsBaZEkRy4/9EFMBVaBbw3o4P4cQbHsKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPhfZ1%2FbtsBaZEkRy4%2F9EFMBVaBbw3o4P4cQbHsKK%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;2000&quot; height=&quot;1485&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1485&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2-2. Virtual Private GW 생성&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mhZdr/btsA7MThaCm/b03yxBA5ybcLjfKZwimSNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mhZdr/btsA7MThaCm/b03yxBA5ybcLjfKZwimSNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mhZdr/btsA7MThaCm/b03yxBA5ybcLjfKZwimSNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmhZdr%2FbtsA7MThaCm%2Fb03yxBA5ybcLjfKZwimSNk%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;2000&quot; height=&quot;1518&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2-3. VP GW - VPC 연결&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VP GW를 통해 연결할 대상 네트워크인 VPC 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;731&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7a3TZ/btsA7wCUC1n/cs7O1U19iefMRXkt3l7hk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7a3TZ/btsA7wCUC1n/cs7O1U19iefMRXkt3l7hk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7a3TZ/btsA7wCUC1n/cs7O1U19iefMRXkt3l7hk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7a3TZ%2FbtsA7wCUC1n%2Fcs7O1U19iefMRXkt3l7hk1%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;2000&quot; height=&quot;731&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;731&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용 가능한(대상) VPC 선택하여 연결&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;831&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TkWTB/btsA3ZePKd5/akcBasGS0kMoqnHjXHLdlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TkWTB/btsA3ZePKd5/akcBasGS0kMoqnHjXHLdlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TkWTB/btsA3ZePKd5/akcBasGS0kMoqnHjXHLdlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTkWTB%2FbtsA3ZePKd5%2FakcBasGS0kMoqnHjXHLdlk%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;2000&quot; height=&quot;831&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;831&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;2000&quot; data-origin-height=&quot;444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZkmfa/btsA7wv7zsg/h2GmgTWnwxy1xnn6M949g0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZkmfa/btsA7wv7zsg/h2GmgTWnwxy1xnn6M949g0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZkmfa/btsA7wv7zsg/h2GmgTWnwxy1xnn6M949g0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZkmfa%2FbtsA7wv7zsg%2Fh2GmgTWnwxy1xnn6M949g0%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;2000&quot; height=&quot;444&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;444&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2-2-4. 라우팅 테이블&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/71pne/btsA7stL4Ck/MB6wQCbeHS0ueM5KcddTyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/71pne/btsA7stL4Ck/MB6wQCbeHS0ueM5KcddTyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/71pne/btsA7stL4Ck/MB6wQCbeHS0ueM5KcddTyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F71pne%2FbtsA7stL4Ck%2FMB6wQCbeHS0ueM5KcddTyK%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;2000&quot; height=&quot;251&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;251&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 라우팅 전파 편집&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;621&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y1o9c/btsA6SGeyPS/ONKrq6jJn6kISk9u9Frmg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y1o9c/btsA6SGeyPS/ONKrq6jJn6kISk9u9Frmg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y1o9c/btsA6SGeyPS/ONKrq6jJn6kISk9u9Frmg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY1o9c%2FbtsA6SGeyPS%2FONKrq6jJn6kISk9u9Frmg1%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;2000&quot; height=&quot;621&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;621&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;2000&quot; data-origin-height=&quot;889&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAsccF/btsA8Nc4KRP/Ilqxnah1nh97D4emLB7j0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAsccF/btsA8Nc4KRP/Ilqxnah1nh97D4emLB7j0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAsccF/btsA8Nc4KRP/Ilqxnah1nh97D4emLB7j0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAsccF%2FbtsA8Nc4KRP%2FIlqxnah1nh97D4emLB7j0K%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;2000&quot; height=&quot;889&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;889&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;** EC2 배포된 서브넷과 연결된 라우팅 테이블 설정 필요&lt;/span&gt;&lt;/b&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;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. AWS - Azure VPN 연결&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3-1. (AWS) Site-to-Site VPN Connections&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CGW 이름 변경(tak-custom-gw-01 &amp;rarr; &lt;b&gt;tak-cgw-01&lt;/b&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Config&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;대상 게이트웨이 유형 : 가상 프라이빗 게이트웨이&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가상 프라이빗 게이트웨이 : 기존 생성한 VPGW&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;고객 게이트웨이 ID : 기존 생성한 CGW&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라우팅 옵션 : 정적&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연결할 대상(Azure Virtural Network)의 Private CIDR 형식 기입&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로컬 IPv4 네트워크 CIDR : 기본값(0.0.0.0/0)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PN 터널을 통해 통신할 수 있는 고객 게이트웨이(온프레미스) 측의 IPv4 CIDR 범위&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원격 IPv4 네트워크 CIDR : 기본값(0.0.0.0/0)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VPN 터널을 통해 통신할 수 있는 AWS 측의 IPv4 CIDR 범위&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;2340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEUyUg/btsA7QH6IY0/FkixyxDIIzmbguXmXBX3Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEUyUg/btsA7QH6IY0/FkixyxDIIzmbguXmXBX3Rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEUyUg/btsA7QH6IY0/FkixyxDIIzmbguXmXBX3Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEUyUg%2FbtsA7QH6IY0%2FFkixyxDIIzmbguXmXBX3Rk%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;2000&quot; height=&quot;2340&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2340&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;&lt;b&gt;**Pre-Shared Key for Tunnel 1&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS의 VPN 연결 생성 시, 기본적으로 2개의 터널이 생성됨.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;2개 중 1개를 선택하여, 연결할 대상(Azure Local Network Gateway)의 [IP 구성] 설정에 기입&lt;/li&gt;
&lt;li&gt;이는 VPN S2S 통신에서 사용되는 공용 IP 임&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kndo7/btsA9iqEaO0/yETuSbdhqxcmp0GXhh7cRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kndo7/btsA9iqEaO0/yETuSbdhqxcmp0GXhh7cRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kndo7/btsA9iqEaO0/yETuSbdhqxcmp0GXhh7cRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKndo7%2FbtsA9iqEaO0%2FyETuSbdhqxcmp0GXhh7cRk%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;2000&quot; height=&quot;146&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;146&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이때, 사전 공유 키의 별도 값을 입력하지 않는다면, Amazon에서 자동으로 생성됨.&lt;/li&gt;
&lt;li&gt;이는 기본 인증 옵션이며, 연결할 대상(Azure Local Network Gateway)에서 입력하여 디바이스 간 보안 연결을 설정&lt;/li&gt;
&lt;li&gt;대상 VPN 연결을 선택 후, [작업] - [VPN 터널 옵션 수정]&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;2000&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZqWMS/btsA9jwjR2W/bTKMIoSJmKjhbFD5ywb7a1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZqWMS/btsA9jwjR2W/bTKMIoSJmKjhbFD5ywb7a1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZqWMS/btsA9jwjR2W/bTKMIoSJmKjhbFD5ywb7a1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZqWMS%2FbtsA9jwjR2W%2FbTKMIoSJmKjhbFD5ywb7a1%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;2000&quot; height=&quot;509&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;509&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Tunnel 1 의 공용 IP주소를 선택하여, 사전 공유 키를 확인&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;2000&quot; data-origin-height=&quot;1194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Az1MO/btsA6Typdi6/ZNsKbg8cjmsuCrlO6qxnt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Az1MO/btsA6Typdi6/ZNsKbg8cjmsuCrlO6qxnt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Az1MO/btsA6Typdi6/ZNsKbg8cjmsuCrlO6qxnt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAz1MO%2FbtsA6Typdi6%2FZNsKbg8cjmsuCrlO6qxnt0%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;2000&quot; height=&quot;1194&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3-2. (Azure) Site-to-Site VPN Connections&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;생성된 Azure Local Network Gateway의 [구성] 설정&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의 Tunnel 1의 공용 IP&lt;/li&gt;
&lt;li&gt;AWS VPC의 네트워크 대역&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;2000&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2oVDG/btsA72BAQZo/huL3EpGnKkaw43axVI56sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2oVDG/btsA72BAQZo/huL3EpGnKkaw43axVI56sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2oVDG/btsA72BAQZo/huL3EpGnKkaw43axVI56sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2oVDG%2FbtsA72BAQZo%2FhuL3EpGnKkaw43axVI56sK%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;2000&quot; height=&quot;724&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;724&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Azure의 VPN 연결
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;연결 형식, GW 리소스 선택 등 연결을 추가&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czQ92k/btsBcY5JWdU/kpsMM1513H8NvjK5a7BSS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czQ92k/btsBcY5JWdU/kpsMM1513H8NvjK5a7BSS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czQ92k/btsBcY5JWdU/kpsMM1513H8NvjK5a7BSS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczQ92k%2FbtsBcY5JWdU%2FkpsMM1513H8NvjK5a7BSS0%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;2000&quot; height=&quot;547&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;547&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;생성한 해당 연결을 선택하여 [인증 유형]의 공유 키(PSK) 값에 앞서 확인한 AWS의 Tunnel 1의 Pre-Shared Key 값을 입력&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;2000&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8doS0/btsBaZxAOVk/8D2V50RErwrvtfzh8mMUe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8doS0/btsBaZxAOVk/8D2V50RErwrvtfzh8mMUe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8doS0/btsBaZxAOVk/8D2V50RErwrvtfzh8mMUe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8doS0%2FbtsBaZxAOVk%2F8D2V50RErwrvtfzh8mMUe1%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;2000&quot; height=&quot;568&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3-3. AWS - Azure 연결 확인&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS Tunnel 1 : UP&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;2000&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zOdZi/btsA7xPp6uI/S7k4pqVS63VYakJZpy47KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zOdZi/btsA7xPp6uI/S7k4pqVS63VYakJZpy47KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zOdZi/btsA7xPp6uI/S7k4pqVS63VYakJZpy47KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzOdZi%2FbtsA7xPp6uI%2FS7k4pqVS63VYakJZpy47KK%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;2000&quot; height=&quot;146&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Azure 연결 상태 : 연결됨&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;2000&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YCwFY/btsA9OJAhe6/QhVbiCxXLxuFQck4RWsCsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YCwFY/btsA9OJAhe6/QhVbiCxXLxuFQck4RWsCsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YCwFY/btsA9OJAhe6/QhVbiCxXLxuFQck4RWsCsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYCwFY%2FbtsA9OJAhe6%2FQhVbiCxXLxuFQck4RWsCsk%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;2000&quot; height=&quot;547&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;547&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS의 라우팅 테이블 설정 확인
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;AWS EC2 가 위치한 서브넷에 연결된 라우팅 테이블에&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; &lt;/span&gt;Azure의 네트워크 대역을 대상(Destination)&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;rarr; &lt;/span&gt;트래픽이 생성한 VPN을 통해서 라우팅될 수 있도록 대상(Target) 설정&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;855&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nrWes/btsBaWHB1eS/Mo1bgbDtlLiEknHJw95DeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nrWes/btsBaWHB1eS/Mo1bgbDtlLiEknHJw95DeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nrWes/btsBaWHB1eS/Mo1bgbDtlLiEknHJw95DeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnrWes%2FbtsBaWHB1eS%2FMo1bgbDtlLiEknHJw95DeK%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;2000&quot; height=&quot;855&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;855&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3-4. AWS - Azure 연결 테스트&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;AWS&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;공용 IP
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;실패, 이유는 Azure VM의 인바운드 설정에서 공용 IP 접근 시, ICMP 허용하지 않았기 때문&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F6fbU/btsA4WvoVDa/TjMO7E1jceIB4hZguHN4L1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F6fbU/btsA4WvoVDa/TjMO7E1jceIB4hZguHN4L1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F6fbU/btsA4WvoVDa/TjMO7E1jceIB4hZguHN4L1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF6fbU%2FbtsA4WvoVDa%2FTjMO7E1jceIB4hZguHN4L1%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;2000&quot; height=&quot;281&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사설 IP
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;성공, Azure의 기본 네트워크 보안 그룹 규칙에서는 가상 네트워크 내 모든 프로토콜을 허용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beom7Z/btsA7BRMMwD/o3TlkPFH5lvXbbMYKWlkaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beom7Z/btsA7BRMMwD/o3TlkPFH5lvXbbMYKWlkaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beom7Z/btsA7BRMMwD/o3TlkPFH5lvXbbMYKWlkaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbeom7Z%2FbtsA7BRMMwD%2Fo3TlkPFH5lvXbbMYKWlkaK%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;2000&quot; height=&quot;550&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;550&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;size18&quot;&gt;&lt;b&gt;Azure&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;공용 IP
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;실패, 소스 IP로 Azure의 사설 네트워크 대역으로 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCRc10/btsBcayABai/9aEbh8jtgx7807j0zIw700/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCRc10/btsBcayABai/9aEbh8jtgx7807j0zIw700/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCRc10/btsBcayABai/9aEbh8jtgx7807j0zIw700/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCRc10%2FbtsBcayABai%2F9aEbh8jtgx7807j0zIw700%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;2000&quot; height=&quot;320&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;320&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사설 IP
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;성공&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qlW0D/btsA7MsgKzm/vPyJUKOrVgjc7YYGWdtP41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qlW0D/btsA7MsgKzm/vPyJUKOrVgjc7YYGWdtP41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qlW0D/btsA7MsgKzm/vPyJUKOrVgjc7YYGWdtP41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqlW0D%2FbtsA7MsgKzm%2FvPyJUKOrVgjc7YYGWdtP41%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;2000&quot; height=&quot;633&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는 VPN S2S(Site to Site) 구성하는 과정까지를 담았습니다.&lt;/p&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부에서는 DNS 구성 관련한 포스팅으로 찾아오겠습니다!!!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 놓친 부분이 있다면, 자유롭게 댓글로 의견 남겨주세요:)&lt;/p&gt;</description>
      <category>TOPIC/Cloud</category>
      <category>aws</category>
      <category>Azure</category>
      <category>cloud</category>
      <category>dns</category>
      <category>MultiCloud</category>
      <category>S2S</category>
      <category>VPN</category>
      <category>멀티클라우드</category>
      <category>클라우드</category>
      <author>admin_cloud</author>
      <guid isPermaLink="true">https://with-cloud.tistory.com/10</guid>
      <comments>https://with-cloud.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 29 Nov 2023 21:08:54 +0900</pubDate>
    </item>
  </channel>
</rss>