<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>junse0 님의 블로그</title>
    <link>https://junse0.tistory.com/</link>
    <description>junse0 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Fri, 17 Jul 2026 05:30:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>junse0</managingEditor>
    <item>
      <title>NCP 인프라 기초</title>
      <link>https://junse0.tistory.com/34</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;0. 시작하며&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이번 방학에 프로젝트를 진행하게 되면서 INFRA 분야에 대해 더 폭넓은 이해를 가지기 위해 스터디를 시작하게 되었다. 기존 AWS가 아닌 NCP에 대하여도 알아보기 위해 네이버 비즈니스 스쿨 커리큘럼을 보며 인터넷 강의를 수강하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://bizschool.naver.com/online/course/65189/lecture/1461898?currentTab=curriculum&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bizschool.naver.com/online/course/65189/lecture/1461898?currentTab=curriculum&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1783668589342&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;Associate : 네이버클라우드 이해하기&quot; data-og-description=&quot;네이버 비즈니스 스쿨&quot; data-og-host=&quot;bizschool.naver.com&quot; data-og-source-url=&quot;https://bizschool.naver.com/online/course/65189/lecture/1461898?currentTab=curriculum&quot; data-og-url=&quot;https://bizschool.naver.com/online/course/65189/lecture/1461898?currentTab=curriculum&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bXB412/dJMb887kDYW/L0VPgN3z8isMkqxPkPpBXK/img.png?width=768&amp;amp;height=432&amp;amp;face=0_0_768_432,https://scrap.kakaocdn.net/dn/bWqdLx/dJMb9eT1h43/SqRlKD89VVxckcmI3Pxhvk/img.png?width=768&amp;amp;height=432&amp;amp;face=0_0_768_432&quot;&gt;&lt;a href=&quot;https://bizschool.naver.com/online/course/65189/lecture/1461898?currentTab=curriculum&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bizschool.naver.com/online/course/65189/lecture/1461898?currentTab=curriculum&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bXB412/dJMb887kDYW/L0VPgN3z8isMkqxPkPpBXK/img.png?width=768&amp;amp;height=432&amp;amp;face=0_0_768_432,https://scrap.kakaocdn.net/dn/bWqdLx/dJMb9eT1h43/SqRlKD89VVxckcmI3Pxhvk/img.png?width=768&amp;amp;height=432&amp;amp;face=0_0_768_432');&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;Associate : 네이버클라우드 이해하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;네이버 비즈니스 스쿨&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bizschool.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bizschool.naver.com/online/course/65148/lecture/1461736?currentTab=curriculum&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bizschool.naver.com/online/course/65148/lecture/1461736?currentTab=curriculum&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1783668590959&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;네이버클라우드 인프라 구축은 어떻게 하는 걸까요? _ 데이터센터와 서버&quot; data-og-description=&quot;네이버 비즈니스 스쿨&quot; data-og-host=&quot;bizschool.naver.com&quot; data-og-source-url=&quot;https://bizschool.naver.com/online/course/65148/lecture/1461736?currentTab=curriculum&quot; data-og-url=&quot;https://bizschool.naver.com/online/course/65148/lecture/1461736?currentTab=curriculum&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b2Yz2C/dJMb8SXJOXg/DMjb1YYHlEYeaIpANCGs81/img.png?width=768&amp;amp;height=432&amp;amp;face=0_0_768_432,https://scrap.kakaocdn.net/dn/bpzN2Y/dJMb9kUeHMW/ru3dZ0NttwpuzJyRcTm6Z1/img.png?width=768&amp;amp;height=432&amp;amp;face=0_0_768_432&quot;&gt;&lt;a href=&quot;https://bizschool.naver.com/online/course/65148/lecture/1461736?currentTab=curriculum&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bizschool.naver.com/online/course/65148/lecture/1461736?currentTab=curriculum&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b2Yz2C/dJMb8SXJOXg/DMjb1YYHlEYeaIpANCGs81/img.png?width=768&amp;amp;height=432&amp;amp;face=0_0_768_432,https://scrap.kakaocdn.net/dn/bpzN2Y/dJMb9kUeHMW/ru3dZ0NttwpuzJyRcTm6Z1/img.png?width=768&amp;amp;height=432&amp;amp;face=0_0_768_432');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;네이버클라우드 인프라 구축은 어떻게 하는 걸까요? _ 데이터센터와 서버&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;네이버 비즈니스 스쿨&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bizschool.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 가상화 기술&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;서버 가상화 - 하나의 물리 리소스 위에 여러 대의 VM이 독립적으로 구동됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Type 1(Native)&lt;/b&gt; - 하드웨어 위에 바로 하이퍼바이저가 올라가고, 그 위에 여러 개의 OS가 구동되는 구조. 대표적으로 젠이나, KVM이 해당된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;전가상화&lt;/b&gt; - 하드웨어를 모두 가상화함 =&amp;gt; 게스트 OS가 직접 CPU에 하드웨어 제어 명령 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;반가상화&lt;/b&gt; - 하드웨어를 완전히 가상화하지 않음 =&amp;gt; 게스트 OS가 하이퍼바이저에게 하드웨어 제어를 의뢰하는 구조.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Type 2(Hosted)&lt;/b&gt; - 하드웨어가 올라가고 그 위에 OS가 설치되고, 그 위에 하이퍼바이저가 구동되는 형태.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 클라우드를 사용하는 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1) 비용 절감&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;사용한 만큼만 지불하면 되므로, 기회 비용 최적화 등을 통해 비용 절감 가능&lt;/li&gt;
&lt;li&gt;&amp;nbsp;다양한 부가 상품 이용을 통해 개발 비용 절감&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2) 빠른 Deploy&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 Legacy 인프라에 비해 빠른 인프라 구성 시간&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3) 글로벌 진출 시 용이&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;글로벌 리전 활용을 통해 글로벌 진출 시 빠르고 손쉬운 인프라 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4) 보안&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인프라에 대한 보안은 클라우드 공급 엄체에 위임&lt;/li&gt;
&lt;li&gt;다양한 보안 상품을 이용하여 보안 강화&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 클라우드 구분&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;IaaS&lt;/b&gt; - 스토리지, 서버와 같은 인프라 리소스를 클라우드 형태로 제공 | Infra as a Service&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;PaaS&lt;/b&gt; - 플랫폼 형태로 제공, 그 위에 바로 개발 환경을 얹어서 사용할 수 있음 | Platfrom as a Service&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;SaaS&lt;/b&gt; - 완제품을 클라우드에서 사용할 수 있는 형태 | Software as a Service&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;967&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsfEZl/dJMcagGfL0v/mV8EQus2o9phRnkLF0SS8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsfEZl/dJMcagGfL0v/mV8EQus2o9phRnkLF0SS8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsfEZl/dJMcagGfL0v/mV8EQus2o9phRnkLF0SS8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsfEZl%2FdJMcagGfL0v%2FmV8EQus2o9phRnkLF0SS8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1584&quot; height=&quot;967&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;967&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;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Private Cloud&lt;/b&gt; - 기업 내부에 직접 클라우드를 구현하는 형태. 자체 데이터센터와 사내 인력을 대상으로 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Public Cloud&lt;/b&gt; - 누구나 사용할 수 있는 클라우드 형태. 클라우드 서비스를 제공하는 프로바이더에게 인프라가 존재하고, 프로바이더 엔지니어들이 담당하여 관리 =&amp;gt;&amp;nbsp;초기 구축 비용 및 인프라 환경 운영에 대한 부담을 줄일 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Hybrid Cloud&lt;/b&gt; - Private과 Public Cloud를 혼합하여 사용하는 형태&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 네이버 클라우드 플랫폼에서 제공하는 서비스&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1578&quot; data-origin-height=&quot;937&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPRs4j/dJMcafUQ2Ez/vjBcOx6HKItbKgNwIqBJ2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPRs4j/dJMcafUQ2Ez/vjBcOx6HKItbKgNwIqBJ2K/img.png&quot; data-alt=&quot;서버 및 클라우드 서비스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPRs4j/dJMcafUQ2Ez/vjBcOx6HKItbKgNwIqBJ2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPRs4j%2FdJMcafUQ2Ez%2FvjBcOx6HKItbKgNwIqBJ2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1578&quot; height=&quot;937&quot; data-origin-width=&quot;1578&quot; data-origin-height=&quot;937&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서버 및 클라우드 서비스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAcKoN/dJMcado5QRj/c8gsKCMLPTZdWkzYOTZAY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAcKoN/dJMcado5QRj/c8gsKCMLPTZdWkzYOTZAY0/img.png&quot; data-alt=&quot;AI 및 애플리케이션 서비스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAcKoN/dJMcado5QRj/c8gsKCMLPTZdWkzYOTZAY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAcKoN%2FdJMcado5QRj%2Fc8gsKCMLPTZdWkzYOTZAY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1570&quot; height=&quot;916&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;916&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AI 및 애플리케이션 서비스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;943&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAfOCO/dJMb99NLk0o/po1OcFiXQDL9yItEDYufFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAfOCO/dJMb99NLk0o/po1OcFiXQDL9yItEDYufFk/img.png&quot; data-alt=&quot;보안 및 관리 서비스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAfOCO/dJMb99NLk0o/po1OcFiXQDL9yItEDYufFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAfOCO%2FdJMb99NLk0o%2Fpo1OcFiXQDL9yItEDYufFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1594&quot; height=&quot;943&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;943&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;h4 data-ke-size=&quot;size20&quot;&gt;5. 상품 의존성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;리전(Region)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리전에 종속하는 리소스&lt;/li&gt;
&lt;li&gt;다른 존에 있는 상품들 간에도 서로를 공유할 수 있음&lt;/li&gt;
&lt;li&gt;VPC 상품&lt;/li&gt;
&lt;li&gt;Object Storage, Archive Storage 상품&lt;/li&gt;
&lt;li&gt;Init script 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;존(Zone)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Zone에 종속적인 리소스&lt;/li&gt;
&lt;li&gt;Server, NAS, Block Storage 같은 IaaS 상품&lt;/li&gt;
&lt;li&gt;Subnet 상품&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전 세계&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어느 리전에서나 동일하게 사용할 수 있는 리소스&lt;/li&gt;
&lt;li&gt;Sub Account 상품&lt;/li&gt;
&lt;li&gt;Global Traffic Manager 같은 리전 LB 상품&lt;/li&gt;
&lt;li&gt;Safter, Checker 등의 Security 상품&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;멀티 존&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Cloud DB 상품&lt;/li&gt;
&lt;li&gt;Load Balancer 상품&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;6.&amp;nbsp; IT 인프라 이해하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1) IT 인프라 구성 요소&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;하드웨어&lt;/b&gt; - 장비를 설치하기 위한 데이터센터 및 냉각시설, 서버, 스위치, 라우터 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;소프트웨어&lt;/b&gt; - Windows 및 Linux 같은 운영체제(OS)를 포함하여, 아파치 같은 웹서비스, 미들웨어 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;네트워크&lt;/b&gt; - 물리 단인 케이블, 스위치, 라우터, 네트워크 및 방화벽&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2) IT 인프라 유형&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;On-Premise&lt;/b&gt;: 기업이 자체 데이터센터를 보유하고, 그 안에 서버와 네트워크 장비 등을 구축하고 자체적으로 운영하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Public Cloud&lt;/b&gt;: 인프라를 Cloud Service Provide(CSP)에서 구축하고 운영 및 관리, 어느 기업이든 클라우드 이용을 원한다면 CSP에서 제공하는 콘솔을 통해 필요한 리소스를 바로 생성하고 이용할 수 있음 =&amp;gt; 운영하는 서비스에만 집중할 수 있음.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;949&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSpRsQ/dJMcagsD7ZA/vP0ArUAgjxlGnyNCvGmZY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSpRsQ/dJMcagsD7ZA/vP0ArUAgjxlGnyNCvGmZY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSpRsQ/dJMcagsD7ZA/vP0ArUAgjxlGnyNCvGmZY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSpRsQ%2FdJMcagsD7ZA%2FvP0ArUAgjxlGnyNCvGmZY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1584&quot; height=&quot;949&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;949&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;h4 data-ke-size=&quot;size20&quot;&gt;7. 인프라 구축&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;데이터 센터&lt;/b&gt; - 서버, 네트워크 회선 등을 제공하는 건물 또는 시설. 냉각시스템이 존재.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;서버&lt;/b&gt; - 네트워크를 통해 클라이언트에게 정보를 제공하는 컴퓨터 시스템. &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CPU, Disk, Network Interface Card가 중요 고려 요소.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CPU와 Memory 스펙은 서버 성능과 직결되는 중요 구성요소로, CPU에서는 클럭 속도와 core 개수를 보고, Memory는 처리할 데이터를 저장하는 공간으로 많을수록 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HDD - 자기 디스크 기반, 최근에 사용량 점점 떨어짐.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;SSD - 플래시 메모리 기반, HDD에 비해 성능 우월하지만 가격이 더 비싸고 수명이 짧음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;RAID&lt;/b&gt; - 저장 장치 여러 개를 묶어 사용하는 기술로, 가용성과 고성능을 위해 사용됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;네이버 클라우드 플랫폼 가상화 서버 제공 서비스&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1561&quot; data-origin-height=&quot;925&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb3Og2/dJMcahkRARk/Ta3qJwj49RI4H4hrjflk81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb3Og2/dJMcahkRARk/Ta3qJwj49RI4H4hrjflk81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb3Og2/dJMcahkRARk/Ta3qJwj49RI4H4hrjflk81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb3Og2%2FdJMcahkRARk%2FTa3qJwj49RI4H4hrjflk81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1561&quot; height=&quot;925&quot; data-origin-width=&quot;1561&quot; data-origin-height=&quot;925&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;h4 data-ke-size=&quot;size20&quot;&gt;8. 마무리하며&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이전에 AWS Cloud를 공부하며 클라우드에 대한 전반적인 공부를 한 경험이 있기에, 기초적인 인프라 내용에 대해서는 학습하는데에 어려움이 없었다. 아직 실습은 진행해보지 않았고, 이론만을 공부했기에 aws와의 차이점을 크게 느끼지 못했고, 플랫폼에서 제공하는 서비스의 형태나 사용 방법이 다른 것 같다. 실습을 통해서 네이버 클라우드 사용하는 방법과 제공하는 서비스에 대해 더 자세히 알아보고, 학습해보아야겠다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;다음 프로젝트를 진행할 때에는 AWS 대신 NCP를 이용해 배포해보는 경험을 해보아야겠다.&lt;/p&gt;</description>
      <category>[INFRA]</category>
      <author>junse0</author>
      <guid isPermaLink="true">https://junse0.tistory.com/34</guid>
      <comments>https://junse0.tistory.com/34#entry34comment</comments>
      <pubDate>Fri, 10 Jul 2026 17:15:02 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] Docker의 핵심 구조 이해하기</title>
      <link>https://junse0.tistory.com/33</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Docker를 사용하는 이유에 대하여 학습한 것에 이어 핵심 구조에 대하여 이해해보는 시간을 가졌다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Docker의 기본 아키텍처&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Docker는 클라이언트(Client) - 서버(Host)의 구조로 동작한다. 사용자가 명령어를 입력하면 Docker 데몬이 이 명령어를 해석하고 실행하는 방식으로 동작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● Docker Client: 사용자가 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;docker build&lt;/span&gt;, &lt;span style=&quot;background-color: #dddddd;&quot;&gt;docker run &lt;/span&gt;등의 명령어를 입력하면 REST API로 변환하여 데몬에게 전달. 로컬뿐만 아니라 원격에 있는 Docker 데몬도 제어할 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● Docker Host(Daemon): API 요청을 수신하여 실제로 컨테이너를 관리하고 이미지, 네트워크, 볼륨 등을 생성하는 핵심 엔진(dockerd).&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● Docker Registry: 이미지를 저장하고 공유하는 저장소 (ex. Docker Hub)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;1642&quot; data-origin-height=&quot;1075&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1ZFJc/dJMcad226ns/LQ3yyNc1cCVBTPNQ2260kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1ZFJc/dJMcad226ns/LQ3yyNc1cCVBTPNQ2260kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1ZFJc/dJMcad226ns/LQ3yyNc1cCVBTPNQ2260kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1ZFJc%2FdJMcad226ns%2FLQ3yyNc1cCVBTPNQ2260kK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1642&quot; height=&quot;1075&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;1075&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Docker의 3대 핵심 구성 요소&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Docker의 3대 요소로는 이미지(Image), 컨테이너(Container), 레지스트리(Registry)가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● 이미지(Image)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; - 여러 개의 Read-Only(읽기 전용) 레이어로 구성된다. Dockerfile의 각 명령어(FROM, RUN, COPY 등)는 새로운 레이어를 생성한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; - 서로 다른 이미지라도 베이스 이미지가 같다면 해당 레이어를 공유하여 용량을 절약한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● 컨테이너(Container)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; - 컨테이너를 실행하면 이미지 레이어 위에 아주 얇은 Container Layer(Read-Write)가 추가된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; - 모든 변경 사항(파일 수정, 로그 등)은 이 쓰기 층에만 기록된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; - 컨테이너가 삭제되면 이 레이어도 사라지기 때문에, 데이터를 영구 저장하기 위해서는 Volume이 필수적이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● 레지스트리(Registry)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; - 이미지(Image)를 보관하고 배포하는 장소이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; - 이미지를 push, pull 하는 등 공유한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;1051&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HwHCM/dJMcagFy40y/C5aouZfYTGFgBK5Kkf1dI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HwHCM/dJMcagFy40y/C5aouZfYTGFgBK5Kkf1dI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HwHCM/dJMcagFy40y/C5aouZfYTGFgBK5Kkf1dI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHwHCM%2FdJMcagFy40y%2FC5aouZfYTGFgBK5Kkf1dI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1582&quot; height=&quot;1051&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;1051&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp; ● 동작 흐름&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp;1. 소스 코드 작성: 애플리케이션 코드 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp;2. Dockerfile 정의: 코드를 실행할 환경(OS, 런타임, 환경변수)을 명시&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp;3. CI(Build &amp;amp; Push): Github Actions나 Jekins 같은 도구가 코드를 이미지로 빌드하고 레지스트리에 업로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; &amp;nbsp;4. CD(Pull &amp;amp; Run): 서버에서 최신 이미지를 내려받아 컨테이너 교체&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Docker가 경량인 이유&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Docker가 기존의 가상 머신(VM)보다 가벼운 이유는 커널을 공유하며 리눅스 자체의 기술을 사용하기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;1) 레이어 저장 방식(Union File System)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; Docker 이미지는 여러 개의 레이어(Layer)로 겹쳐져 있어 만약 이미지가 수정되어도 바뀐 부분만 새로운 레이어로 쌓이기 때문에 용량이 획기적으로 줄어들게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;2-1) 격리 기술(Namespaces)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; 각 컨테이너가 독립된 공간(IP, 파일 시스템, 프로세스 ID 등)을 가진 것처럼 속이는 기술이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;pid: 프로세스 번호 격리 (컨테이너 안의 1번 프로세스)&lt;/li&gt;
&lt;li&gt;net: 네트워크 인터페이스 격리(컨테이너만의 고유 IP)&lt;/li&gt;
&lt;li&gt;mnt: 파일 시스템 마운트 지점 격리&lt;/li&gt;
&lt;li&gt;uts: 호스트네임 격리&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp; 2-2) 격리기술(Control Groups)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; 컨테이너가 사용할 CPU, 메모리 등의 자원 할당량을 제한하는 기술로, 호스트의 모든 CPU나 메모리를 점유하여 다른 프로세스에 영향을 주는 것을 방지한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;1583&quot; data-origin-height=&quot;1038&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rmLYD/dJMcabjXoBZ/mjWkPpQCtGi6wI1ZFQQE3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rmLYD/dJMcabjXoBZ/mjWkPpQCtGi6wI1ZFQQE3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rmLYD/dJMcabjXoBZ/mjWkPpQCtGi6wI1ZFQQE3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrmLYD%2FdJMcabjXoBZ%2FmjWkPpQCtGi6wI1ZFQQE3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1583&quot; height=&quot;1038&quot; data-origin-width=&quot;1583&quot; data-origin-height=&quot;1038&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Docker의 네트워크와 볼륨 (데이터와 통신)&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;1) Docker Network&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Docker 네트워크는 격리된 컨테이너들이 서로 or 외부와 어떻게 연결되는지를 정의한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; ① 네트워크 드라이버 종류&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; Docker는 목적에 따라 여러 네트워크 모드를 제공한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Bridge(기본값): 동일한 Docker 호스트 내의 컨테이너들이 서로 통신할 때 사용하는데, &lt;span style=&quot;background-color: #dddddd;&quot;&gt;docker0&lt;/span&gt;라는 가상 브릿지를 통해 각 컨테이너에 사설 IP가 할당된다.&lt;/li&gt;
&lt;li&gt;Host: 컨테이너가 호스트의 네트워크 환경을 그대로 사용한다. 포트 포워딩 없이 호스트의 포트를 직접 점유하며, 네트워크 성능이 가장 빠르다.&lt;/li&gt;
&lt;li&gt;None: 네트워크 연결을 아예 차단한다. 로컬 작업만 필요한 보안용 컨테이너에 사용한다.&lt;/li&gt;
&lt;li&gt;Overlay: 여러 대의 Docker 호스트(Swarm 또는 클러스터)에 흩어져 있는 컨테이너들을 하나의 네트워크로 묶어준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; ② 포트 포워딩(Port Fowarding)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; 컨테이너 내부에서 도는 서비스(ex. 8080포트)를 외부 사용자가 접속할 수 있게 호스트의 포트와 연결하는 기술로, &lt;span style=&quot;background-color: #dddddd;&quot;&gt;-p 80:8080&lt;/span&gt;으로 호스트의 80포트로 접속하면 컨테이너의 8080포트로 전달하게 한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;2) Docker Volume &amp;amp; Mount&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;컨테이너의 파일 시스템은 컨테이너가 삭제되면 함께 사라지는데, 이를 방지하기 위해 호스트의 저장 공간을 컨테이너에 연결(Mount)하는 세 가지 방법이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; ① Volume(도커 관리형)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; Docker가 직접 호스트의 특정 영역(&lt;span style=&quot;background-color: #dddddd;&quot;&gt;/var/lib/docker/volumes&lt;/span&gt;)에 저장 공간을 만들어 관리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;● &lt;b&gt;특징&lt;/b&gt;: Docker의 명령어로 관리 가능하며, 호스트의 파일 시스템 구조에 의존하지 않아 가장 권장되는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;● &lt;b&gt;장점&lt;/b&gt;: 여러 컨테이너가 안전하게 데이터를 공유할 수 있고, 백업 및 이동이 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; ② Bind Mount(사용자 지정형)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; 사용자가 호스트의 특정 경로를 컨테이너 내부와 직접 연결한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;● &lt;b&gt;특징&lt;/b&gt;:&lt;span style=&quot;background-color: #dddddd;&quot;&gt; C:\Users\Project&lt;/span&gt; 같은 경로를 직접 지정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;● &lt;b&gt;장점&lt;/b&gt;: 개발 중인 소스 코드를 컨테이너에 실시간으로 동기화하여 바로 확인할 때 매우 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; ③ tmpfs Mount(임시 저장형)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; 데이터를 디스크가 아닌 호스트의 메모리(RAM)에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;● &lt;b&gt;특징&lt;/b&gt;: 컨테이너가 중단되면 데이터가 사라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;● &lt;b&gt;장점&lt;/b&gt;: 보안상 중요한 정보(비밀번호 등)를 저장하거나, 아주 빠른 입출력이 필요한 임시 작업에 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1595&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwJsLo/dJMcabxrfXl/3FpSgNN9kKk1gEJsKrjZd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwJsLo/dJMcabxrfXl/3FpSgNN9kKk1gEJsKrjZd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwJsLo/dJMcabxrfXl/3FpSgNN9kKk1gEJsKrjZd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwJsLo%2FdJMcabxrfXl%2F3FpSgNN9kKk1gEJsKrjZd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1595&quot; height=&quot;1068&quot; data-origin-width=&quot;1595&quot; data-origin-height=&quot;1068&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;5. 마무리하며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이번에 Docker에 대한 개념을 공부해보았으니, 다음에는 Spring Boot에서 Dockerfile을 작성하는 방법에 대해서 공부해보고 실제로 작성해보아야겠다. Dockerfile까지 작성할 수 있게 된다면 프로젝트를 배포하는데에 한 발자국 더 가까워졌다는게 실감날 것 같다.&lt;/p&gt;</description>
      <category>[INFRA]/[DOCKER]</category>
      <author>junse0</author>
      <guid isPermaLink="true">https://junse0.tistory.com/33</guid>
      <comments>https://junse0.tistory.com/33#entry33comment</comments>
      <pubDate>Sat, 16 May 2026 16:28:36 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] Docker를 사용하는 이유</title>
      <link>https://junse0.tistory.com/32</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Docker_Logo_Scale_660x400.png&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dn5lEx/dJMcaiwyjVB/xuV3Y2GZdEprkUy03INvc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dn5lEx/dJMcaiwyjVB/xuV3Y2GZdEprkUy03INvc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dn5lEx/dJMcaiwyjVB/xuV3Y2GZdEprkUy03INvc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdn5lEx%2FdJMcaiwyjVB%2FxuV3Y2GZdEprkUy03INvc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;400&quot; data-filename=&quot;Docker_Logo_Scale_660x400.png&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;1. 문제 상황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이번에 프로젝트에서 백엔드 개발을 하다 보니 로컬에서는 정상적으로 동작했지만, 서버에 배포하여 팀원들이 사용했을 때에 오류가 발생하는 일이 있었다. 이 문제점들은 단순히 코드의 문제가 아닌 실행 환경의 차이에서 생긴 오류였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Java의 버전이 다르거나, DB 설정, OS, 라이브러리 버전이 다르는 등의 여러 실행 환경에서의 차이점으로부터 생긴 문제들이었고, 이를 해결하기 위해 동일한 환경을 직접 세팅하여 프로그램을 실행하는 것은 너무나 번거로운 일이었다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;2. 기존 방식(VM웨어)의 한계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이러한 문제점을 해결하기 위해 VM(가상 머신)을 사용하는 기존의 방식이 있었다. 하나의 물리 서버 위에서 여러 개의 독립적인 OS를 실행할 수 있게 해주는 방식인데, 개발 환경과 동일한 OS를 만들고 그 위에 애플리케이션을 올려 프로그램을 실행할 수 있도록 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;하지만, OS 전체를 포함하기에 다음과 같은 문제점들이 존재한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VM 자체가 무겁다&lt;/li&gt;
&lt;li&gt;부팅 시간이 오래 걸린다&lt;/li&gt;
&lt;li&gt;메모리, CPU 사용량이 크다&lt;/li&gt;
&lt;li&gt;이로 인해 여러 개를 띄우기 부담스럽다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;따라서, VM으로는 환경을 일치시키는 것은 해결할 수 있지만, 효율성이 떨어지는 트레이드 오프가 발생한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;그렇지만, VM웨어를 사용하는 것의 장점도 존재한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;독립적인 실행 환경을 제공하여 서로 다른 OS 간의 충돌 방지&lt;/li&gt;
&lt;li&gt;여러 서버를 가상화하여 자원을 효율적으로 사용할 수 있음&lt;/li&gt;
&lt;li&gt;백업 및 복구 기능을 제공하여 데이터 손실 방지&lt;/li&gt;
&lt;li&gt;네트워크 가상화 및 보안 기능 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;그래서 무작정 VM웨어를 사용하는 대신 Docker를 사용하는 것보다 요구 사항에 따라 더 알맞는 기술을 선택하여 사용하는 것이 적합하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1616&quot; data-origin-height=&quot;1067&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deZybu/dJMcacpBpJO/fLLCqncQ5YHuzkOV5BAjOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deZybu/dJMcacpBpJO/fLLCqncQ5YHuzkOV5BAjOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deZybu/dJMcacpBpJO/fLLCqncQ5YHuzkOV5BAjOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeZybu%2FdJMcacpBpJO%2FfLLCqncQ5YHuzkOV5BAjOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;809&quot; height=&quot;534&quot; data-origin-width=&quot;1616&quot; data-origin-height=&quot;1067&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;3. Docker&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Docker는 위에서 언급한 문제들을 해결하기 위해 다른 방식으로 접근한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Docker는 개발 환경을 이미지화시키고 해당 이미지를 통해 개발 및 배포 환경을 쉽게 컨테이너화하여 구축할 수 있다. 해당 이미지를 실행한 인스턴스인 컨테이너를 활용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Dockerfile을 통해 설치할 언어, 프레임워크, 패키지 등을 미리 코드 형태로 명시하여 어느 컴퓨터에서든 쉽게 자동으로 설치할 수 있게 한다. 이를 통해 개발자와 운영자가 동일한 환경에서 작업을 할 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Docker는 CI/CD 파이프라인에서도 중요한 역할을 하는데, Jenkins와 같은 도구와 통합하여 자동화된 빌드 및 배포 프로세스를 구현할 수 있다.&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;1601&quot; data-origin-height=&quot;1087&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N1Lwj/dJMcafzRKE0/OPT1TvRtv18wa57LkYXK3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N1Lwj/dJMcafzRKE0/OPT1TvRtv18wa57LkYXK3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N1Lwj/dJMcafzRKE0/OPT1TvRtv18wa57LkYXK3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN1Lwj%2FdJMcafzRKE0%2FOPT1TvRtv18wa57LkYXK3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1601&quot; height=&quot;1087&quot; data-origin-width=&quot;1601&quot; data-origin-height=&quot;1087&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;4. 마무리하며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Docker에 대하여 간단하게 알아보았는데, 다음으로는 Docker의 핵심 구조에 대해서 이해해보는 시간을 가져야겠다. 빠르게 학습을 마치고 Docker를 이용하여 프로젝트를 EC2에 배포하는 것을 목표로 삼아야겠다.&lt;/p&gt;</description>
      <category>[INFRA]/[DOCKER]</category>
      <author>junse0</author>
      <guid isPermaLink="true">https://junse0.tistory.com/32</guid>
      <comments>https://junse0.tistory.com/32#entry32comment</comments>
      <pubDate>Fri, 15 May 2026 14:41:51 +0900</pubDate>
    </item>
    <item>
      <title>[AWS CLOUD] IAM</title>
      <link>https://junse0.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;AWS Cloud를 회원가입을 하고 로그인할 때 IAM user 로그인이 있어 조금 헷갈리기도 했고, 뭔지 잘 몰랐었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 IAM이 무엇인지에 대해 먼저 알아보기로 하였다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;1. IAM이란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;사용자의 접근 권한을 관리하는 서비스로, 조직 내부의 AWS를 사용하는 사람들에게 서비스들과 서비스에 생성된 자원 등에 대한 세분화된 권한을 지정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ex) 개발부서 그룹은 EC2와 S3 서비스에 대한 엑세스 권한을 주고, DB부서 그룹에겐 RDS 엑세스 권한을 주는 등.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;IAM은 엑세스 권한 설정 뿐만 아니라, 언제 어디서 누가 무엇을 어떻게 할 수 있는가를 상세히 설정할 수 있어 2~3시까지만 S3의 특정 버킷의 자료를 열람할 수 있도록 하는 것이 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이외에도 기능을 정리해보면 아래와 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 생성 / 관리 / 계정의 보안 - 사용자의 패스워드 정책 관리 (일정 시간마다 비밀번호 변경 등)&lt;/li&gt;
&lt;li&gt;AWS 계정에 대한 공유 엑세스: AWS 계정의 리소스 관리 및 권한을 부여 가능&lt;/li&gt;
&lt;li&gt;세분화된 권한: 리소스에 따라 여러 사람에게 다양한 권한 부여 가능&lt;br /&gt;- 일부 사용자에게는 EC2 전체 엑세스 권한, 일부에게는 S3 읽기전용의 권한, 일부에게는 회원 정보만 엑세스 할 수 있도록&amp;nbsp;&lt;/li&gt;
&lt;li&gt;EC2 애플리케이션 권한 자격 부여: 사용자 뿐만 아니라, EC2에 실행되는 애플리케이션에 IAM기능을 이용해 자격증명 제공 가능 - 어떤 EC2가 S3 버킷이나 RDB 테이블에 접근할 수 있는 액세스 권한을 지니도록 함.&lt;/li&gt;
&lt;li&gt;멀티 팩터 인증(MFA): 보안강화를 위해 암호나 액세스 키 뿐 아니라 특별히 구성된 디바이스 코드를 제공하는 인증 추가 가능&lt;/li&gt;
&lt;li&gt;자격증명 연동: 기업 네트워크, 인터넷 자격 증명 공급자같이 다른 곳에 이미 암호가 있는 사용자에게 AWS 계정에 대한 임시 액세스 권한 부여 가능&lt;/li&gt;
&lt;li&gt;계정에 별명 부여 가능&lt;/li&gt;
&lt;li&gt;글로벌 서비스&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;1065&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtkfvl/dJMcaiJ1lEi/OU2KbCtv0oE4XcqU7W8Gq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtkfvl/dJMcaiJ1lEi/OU2KbCtv0oE4XcqU7W8Gq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtkfvl/dJMcaiJ1lEi/OU2KbCtv0oE4XcqU7W8Gq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdtkfvl%2FdJMcaiJ1lEi%2FOU2KbCtv0oE4XcqU7W8Gq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1590&quot; height=&quot;1065&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;1065&quot;/&gt;&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;&amp;nbsp;2. IAM 구성 요소&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;크게 사용자(Users), 그룹(Groups), 역할(Roles), 정책(Policies) 으로 구성되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;1) IAM 사용자(Users)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;실제 AWS의 기능과 자원을 이용하는 사람 OR 애플리케이션을 의미하며 사용자(사람)가 AWS 서비스를 엑세스하는 것을 조정하고, 애플리케이션이 서비스에 엑세스하는 것을 관리한다.&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;1565&quot; data-origin-height=&quot;1029&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NQq8n/dJMcafmh3OH/kZj5cFm6dujF6nKFxsxHS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NQq8n/dJMcafmh3OH/kZj5cFm6dujF6nKFxsxHS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NQq8n/dJMcafmh3OH/kZj5cFm6dujF6nKFxsxHS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNQq8n%2FdJMcafmh3OH%2FkZj5cFm6dujF6nKFxsxHS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1565&quot; height=&quot;1029&quot; data-origin-width=&quot;1565&quot; data-origin-height=&quot;1029&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;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;2) IAM 그룹(Groups)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;사용자가 많아진 경우에 권한을 보다 편하게 관리하기 위해서 그룹이라는 개념을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하나의 그룹에 여러 명의 사용자를 지정해서 공통적으로 권한을 주어야 하는 상황일 때 사용하는 것이 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ex) Developers 그룹에 S3 ReadOnly 정책을 연결하면, 해당 그룹의 IAM 사용자들에게 이 정책이 적용되게됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;따라서, 동일한 권한을 가지는 사용자들에게 권한을 편리하게 설정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하나의 사용자는 최대 10개의 그룹에 속할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1577&quot; data-origin-height=&quot;1061&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xyktm/dJMcaipLLn5/Uube7hvUBmhkR3Mik9whrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xyktm/dJMcaipLLn5/Uube7hvUBmhkR3Mik9whrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xyktm/dJMcaipLLn5/Uube7hvUBmhkR3Mik9whrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXyktm%2FdJMcaipLLn5%2FUube7hvUBmhkR3Mik9whrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1577&quot; height=&quot;1061&quot; data-origin-width=&quot;1577&quot; data-origin-height=&quot;1061&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;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp; 3) IAM 정책(Policy)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;사용자와 그룹, 역할이 무엇을 할 수 있는지에 대한 permission 설정 모음 데이터 문서로, 하나 이상의 AWS 리소스에 대하여 어떠한 작업을 수행 가능한지에 대한 규칙을 JSON 형식으로 작성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 정책 문서를 IAM 사용자와 그룹, 역할에 연결한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;IAM 정책은 6가지의 타입으로 분류된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp; 4) IAM Policy Type&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자격 증명 기반 - AWS 관리형 정책, AWS 고객 관리형 정책, AWS 인라인 정책&lt;/li&gt;
&lt;li&gt;리소스 정책 기반&lt;/li&gt;
&lt;li&gt;권한 경계 기반 정책&lt;/li&gt;
&lt;li&gt;조직 SCP 기반 정책&lt;/li&gt;
&lt;li&gt;액세스 제어 리스트&lt;/li&gt;
&lt;li&gt;세션 정책&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; | 자격증명 기반 정책(Id-Based Policy) |&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;- AWS 관리형 정책 - AWS에서 생성 및 관리하는 독립적인 정책으로, AWS에서 기본으로 제공되는 정책이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;- AWS 고객 관리형 정책 - AWS 관리형 정책과 다르게, 사용자가 정책을 새로 생성하여 커스텀한 것으로, 만들어진 Acoount에서만 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;- AWS 인라인 정책 - 1 to 1 정책으로 명시적으로 할당되는 정책으로, 하나의 사용자에게 하나의 정책을 적용하는 개념이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;1566&quot; data-origin-height=&quot;1055&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CtL8g/dJMcahqSu9Z/g3KkImKFsIKYlTH2tZ9nbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CtL8g/dJMcahqSu9Z/g3KkImKFsIKYlTH2tZ9nbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CtL8g/dJMcahqSu9Z/g3KkImKFsIKYlTH2tZ9nbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCtL8g%2FdJMcahqSu9Z%2Fg3KkImKFsIKYlTH2tZ9nbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1566&quot; height=&quot;1055&quot; data-origin-width=&quot;1566&quot; data-origin-height=&quot;1055&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; | 리소스 기반 정책(Resource-Based Policy) |&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;사용자나 그룹에 적용하는 자격증명 기반 정책과 달리, AWS 서비스 리소스에 적용하는 정책으로, S3 버킷 정책이 여기에 속한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;5) IAM 역할(Role)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;그룹만으로도 권한이 다양해지면 복잡해지고 관리가 어려워지니 역할(Role)이라는 개념을 도입했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;IAM 역할은 리소스에 대한 엑세스 권한이 없는 사용자나 서비스에게 &lt;u&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;일시적으로 권한을 위임&lt;/span&gt;&lt;/u&gt;하는 개념이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ex) 아무 권한이 없는 IAM 사용자 / EC2 인스턴스가 S3 버킷에 접근하려면 직접 정책을 설정하여 사용후 회수하는 설정을 일일히 해야한다. 이보다 임시 자격 증명서를 부여함으로서 해당 역할에 연결된 권한을 사용할 수 있도록 한다. 원할 때마다 역할을 부여했다가 사용하고 회수함으로서 더 간편하게 관리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;IAM 역할(Role) 기능들에 대해 요약하면 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;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;/li&gt;
&lt;li&gt;그룹에 권한을 부여하는 대신, 역할을 만들고 역할을 그룹이나 사용자에게 주는 방식&lt;/li&gt;
&lt;li&gt;다른 사용자가 역할을 부여 받아 사용가능 - 임시적인 자격 증명을 얻어 해당 권한을 일시적으로 얻게됨&lt;/li&gt;
&lt;li&gt;AWS 사용자 뿐만 아니라, EC2 인스턴스, 다른 AWS 계정, Facebook, Google 계정 등 폭 넓게 접근 권한 설정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&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;1566&quot; data-origin-height=&quot;1029&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxPjFR/dJMcagyG3if/4McYrJDBxzrxSD8TiKBO6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxPjFR/dJMcagyG3if/4McYrJDBxzrxSD8TiKBO6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxPjFR/dJMcagyG3if/4McYrJDBxzrxSD8TiKBO6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxPjFR%2FdJMcagyG3if%2F4McYrJDBxzrxSD8TiKBO6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1566&quot; height=&quot;1029&quot; data-origin-width=&quot;1566&quot; data-origin-height=&quot;1029&quot;/&gt;&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;&amp;nbsp; 6) IAM 권한 검증 절차&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1585&quot; data-origin-height=&quot;1031&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VYYrN/dJMcai4i0SG/cBCNzlsYuWxAr7bbbWCfF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VYYrN/dJMcai4i0SG/cBCNzlsYuWxAr7bbbWCfF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VYYrN/dJMcai4i0SG/cBCNzlsYuWxAr7bbbWCfF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVYYrN%2FdJMcai4i0SG%2FcBCNzlsYuWxAr7bbbWCfF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1585&quot; height=&quot;1031&quot; data-origin-width=&quot;1585&quot; data-origin-height=&quot;1031&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp; 7) IAM 자격증명 보고서 다운&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;보고서에는 비밀번호부터 언제 IAM 계정에 로그인했는지 등 전반적인 관리자로서의 IAM 관리 정보들이 포함되어 있다. 4시간 주기로 갱신된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1251&quot; data-origin-height=&quot;955&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FvDnq/dJMcacwkZzU/yDPrlMgSPosTYOjUDheAzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FvDnq/dJMcacwkZzU/yDPrlMgSPosTYOjUDheAzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FvDnq/dJMcacwkZzU/yDPrlMgSPosTYOjUDheAzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFvDnq%2FdJMcacwkZzU%2FyDPrlMgSPosTYOjUDheAzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1251&quot; height=&quot;955&quot; data-origin-width=&quot;1251&quot; data-origin-height=&quot;955&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp; 3. 실습&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;1) IAM 사용자 만들기&lt;/h4&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;739&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0kXnt/dJMcafmib1V/59YWzgVQaUxAKUFQWikYqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0kXnt/dJMcafmib1V/59YWzgVQaUxAKUFQWikYqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0kXnt/dJMcafmib1V/59YWzgVQaUxAKUFQWikYqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0kXnt%2FdJMcafmib1V%2F59YWzgVQaUxAKUFQWikYqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;478&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;739&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;사용자 메뉴에서 사용자 생성 버튼을 눌러 새로운 IAM 사용자를 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;1237&quot; data-origin-height=&quot;772&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dC2wzy/dJMcaf0QFyG/okDiBerkeaca17oHhWEVE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dC2wzy/dJMcaf0QFyG/okDiBerkeaca17oHhWEVE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dC2wzy/dJMcaf0QFyG/okDiBerkeaca17oHhWEVE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdC2wzy%2FdJMcaf0QFyG%2FokDiBerkeaca17oHhWEVE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;524&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;772&quot;/&gt;&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;&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;1203&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KStot/dJMcacb0ROK/Q48qU1fWzlWPy7AeskCoo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KStot/dJMcacb0ROK/Q48qU1fWzlWPy7AeskCoo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KStot/dJMcacb0ROK/Q48qU1fWzlWPy7AeskCoo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKStot%2FdJMcacb0ROK%2FQ48qU1fWzlWPy7AeskCoo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1203&quot; height=&quot;936&quot; data-origin-width=&quot;1203&quot; data-origin-height=&quot;936&quot;/&gt;&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;&amp;nbsp; 2) IAM 그룹 만들기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; IAM 사용자 그룹 메뉴로 이동해서 새로운 사용자 그룹을 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1251&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJBJfw/dJMb99TSWfO/PtFhOkB0SOOp2Xpj1IXuE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJBJfw/dJMb99TSWfO/PtFhOkB0SOOp2Xpj1IXuE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJBJfw/dJMb99TSWfO/PtFhOkB0SOOp2Xpj1IXuE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJBJfw%2FdJMb99TSWfO%2FPtFhOkB0SOOp2Xpj1IXuE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1251&quot; height=&quot;594&quot; data-origin-width=&quot;1251&quot; data-origin-height=&quot;594&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;p data-ke-size=&quot;size18&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;2512&quot; data-origin-height=&quot;1201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qrXAs/dJMcabc4ohG/YUSkrtedbknFpIxxnXXpT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qrXAs/dJMcabc4ohG/YUSkrtedbknFpIxxnXXpT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qrXAs/dJMcabc4ohG/YUSkrtedbknFpIxxnXXpT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqrXAs%2FdJMcabc4ohG%2FYUSkrtedbknFpIxxnXXpT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2512&quot; height=&quot;1201&quot; data-origin-width=&quot;2512&quot; data-origin-height=&quot;1201&quot;/&gt;&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;&amp;nbsp;3) 그룹에 사용자 추가&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;만든 Group1에 생성한 User1을 선택하고 추가한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2487&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bksaNp/dJMcafNnWI0/5nkleMJ57Qc1Jcoto22DA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bksaNp/dJMcafNnWI0/5nkleMJ57Qc1Jcoto22DA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bksaNp/dJMcafNnWI0/5nkleMJ57Qc1Jcoto22DA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbksaNp%2FdJMcafNnWI0%2F5nkleMJ57Qc1Jcoto22DA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2487&quot; height=&quot;504&quot; data-origin-width=&quot;2487&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;4) IAM 사용자 정책 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;기존에 선택해둔 정책에 더해 추가적으로 정책을 추가하거나 기존의 정책을 삭제할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Administrator 접근 권한을 추가해주었다.&lt;/p&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;1020&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUwB22/dJMcaiJ1uDu/RY0HS7E180yodQPLgFAi3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUwB22/dJMcaiJ1uDu/RY0HS7E180yodQPLgFAi3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUwB22/dJMcaiJ1uDu/RY0HS7E180yodQPLgFAi3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUwB22%2FdJMcaiJ1uDu%2FRY0HS7E180yodQPLgFAi3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;772&quot; height=&quot;638&quot; data-origin-width=&quot;1235&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;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;5) IAM 사용자 계정 접속하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;사용자의 액세스 키를 생성하고 .csv 파일로 다운로드 받는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2064&quot; data-origin-height=&quot;852&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf0sbZ/dJMcacQBHgl/EBI7o1ySQUoriMrvZEjNKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf0sbZ/dJMcacQBHgl/EBI7o1ySQUoriMrvZEjNKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf0sbZ/dJMcacQBHgl/EBI7o1ySQUoriMrvZEjNKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf0sbZ%2FdJMcacQBHgl%2FEBI7o1ySQUoriMrvZEjNKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2064&quot; height=&quot;852&quot; data-origin-width=&quot;2064&quot; data-origin-height=&quot;852&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;만들어낸 액세스 키와 User 이름으로 IAM 사용자로 로그인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;암호는 다운한 csv파일에 있으며, ID는 메일로 온 url에 있는 숫자를 입력하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;1015&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mY9Ao/dJMcafs1Uap/j92xFAeW6K8K9MZFZ4Ey0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mY9Ao/dJMcafs1Uap/j92xFAeW6K8K9MZFZ4Ey0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mY9Ao/dJMcafs1Uap/j92xFAeW6K8K9MZFZ4Ey0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmY9Ao%2FdJMcafs1Uap%2Fj92xFAeW6K8K9MZFZ4Ey0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;568&quot; height=&quot;1015&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;1015&quot;/&gt;&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;&amp;nbsp;4. 마무리하며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이어서 AWS Cloud의 기초적인 내용에 대해서 공부해보았는데, 로그인할 때마다 헷갈렸던 IAM의 존재에 대해서 조금은 알 수 있었던 시간이었다. 추후로 S3 등을 더 공부해보고 실제로 AWS Cloud를 사용해 배포를 해보는 경험을 해봐야겠다. 이를 위해 추가적으로 docker 컨테이너에 대해서도 학습할 예정이다.&lt;/p&gt;</description>
      <category>[INFRA]/[AWS CLOUD]</category>
      <author>junse0</author>
      <guid isPermaLink="true">https://junse0.tistory.com/31</guid>
      <comments>https://junse0.tistory.com/31#entry31comment</comments>
      <pubDate>Tue, 12 May 2026 16:16:55 +0900</pubDate>
    </item>
    <item>
      <title>[AWS CLOUD] EC2</title>
      <link>https://junse0.tistory.com/30</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. EC2란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Amazon Elastic Compute Cloud의 줄임말로서 AWS에서 제공하는 클라우드 컴퓨팅이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;독립된 컴퓨터를 임대해주는 서비스로, 금액을 지불하고 aws에서 컴퓨터를 대여하여 사용하는 서비스이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;초기 구입비, 세팅비가 없고, 사용한만큼만 비용을 지불하면 되어 비용면에서 save할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한, 복잡한 공유기 세팅없이 인터넷으로 자유롭게 접속할 수 있고, &lt;b&gt;이미지(AMI)&lt;/b&gt; 기능도 사용 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*이미지(AMI): OS 상태 그대로 저장하는 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;원하는 만큼 가상 서버를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능하며, 신속하게 규모를 확장 및 축소할 수 있어 서버 트래픽 예측 필요성이 줄어들어 사용하는데에 간편하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. EC2 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;컴퓨터: 인스턴스&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;하드디스크: EBS&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;랜카드: ENI&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;1) 인스턴스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;AWS Cloud에서 사용하는 가상 컴퓨터로, CPU, 메모리, 그래픽카드 등 연산을 위한 하드웨어 부분을 담당한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;1607&quot; data-origin-height=&quot;1057&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mEmjo/dJMcadID7rw/8Q0VEXRNYOdPGyXKdDZApK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mEmjo/dJMcadID7rw/8Q0VEXRNYOdPGyXKdDZApK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mEmjo/dJMcadID7rw/8Q0VEXRNYOdPGyXKdDZApK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmEmjo%2FdJMcadID7rw%2F8Q0VEXRNYOdPGyXKdDZApK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;811&quot; height=&quot;533&quot; data-origin-width=&quot;1607&quot; data-origin-height=&quot;1057&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;&amp;nbsp;시리즈: 위의 그림처럼 다양한 시리즈가 있고, m은 범용타입이기에 aws 초심자가 가장 많이 사용하는 프리티어에서 쓰는 타입이므로 자주 접할 수 있는 타입이다. 이외에도 많은 시리즈의 타입들이 존재한다.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;세대: 6은 6세대를 의미하고, 앞으로 세대가 업그레이드되며 점점 증가할 것이다.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;추가 구분자: a는 AMD기반의 CPU 프로세서를 사용한다는 의미이고, 각각의 구분자마다 뜻이 다르다.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;사이즈: 사이즈의 표에서 볼 수 있듯 nano부터 아래로 내려갈수록 더 큰 크기를 지닌다. 사이즈가 클수록 CPU나 메모리의 성능이 증가한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;2) EBS&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Elastic Block Storage의 약자로, 데이터를 저장하는 역할을 하기에 클라우드에서 사용하는 HDD라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;EBS는 AWS Cloud의 EC2 인스턴스에 사용할 영구 블록 스토리지 볼륨을 제공하고, 사용량을 확장 또는 축소할 수 있으며 빌린 부분에 대해서만 비용을 지불 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;1045&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DPyiN/dJMcahK6s5B/fcBHzClcBTo7r48uTWLz2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DPyiN/dJMcahK6s5B/fcBHzClcBTo7r48uTWLz2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DPyiN/dJMcahK6s5B/fcBHzClcBTo7r48uTWLz2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDPyiN%2FdJMcahK6s5B%2FfcBHzClcBTo7r48uTWLz2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;827&quot; height=&quot;550&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;1045&quot;/&gt;&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;&amp;nbsp;EBS 볼륨 유형은 위의 표와 같은 타입들이 있고, 범용타입인 GP3를 보통 많이 선택하여 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;3) AMI&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Amazon Machine Image의 약자로, EC2 인스턴스를 실행하기 위한 정보를 모은 단위이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;EC2를 실행하기 위해서는 CPU 프로세서 타입, 저장공간 용량, 32 or 64비트인지, 윈도우 or 리눅스,... 등등의 정보가 많이 필요한데 이러한 세팅 정보를 저장한 단위라고 생각할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;ex) 윈도우가 깔린 EC2를 사용할 것이면 인스턴스를 생성하고 OS를 일일히 설치하는게 아닌 윈도우 환경 세팅이된 템플릿 AMI를 EC2에 적용시키는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;현재 상태의 EC2 세팅을 복제하여 다른 계정이나 다른 리전에 전달하는 것도 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 실습&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;1) EC2 인스턴스 시작&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;리전을 아시아 태평양(서울)로 선택하고 EC2로 들어가 인스턴스를 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;AMI는 프리 티어에서 사용 가능한 AMI를 사용하고, 맨 위에 있는 LINUX 2 AMI를 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2424&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKhrpe/dJMcaf0O9i4/xVkR0zccf7qPtnIaBaq4L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKhrpe/dJMcaf0O9i4/xVkR0zccf7qPtnIaBaq4L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKhrpe/dJMcaf0O9i4/xVkR0zccf7qPtnIaBaq4L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKhrpe%2FdJMcaf0O9i4%2FxVkR0zccf7qPtnIaBaq4L0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;327&quot; data-origin-width=&quot;2424&quot; data-origin-height=&quot;1068&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;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;2) 인스턴스 유형 선택&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;프리 티어에서 사용 가능하고, 범용적으로 많이 사용하는 t3 그룹에 micro유형 크기인 t3.micro 유형을 선택하여 사용한다. 인스턴스 유형에 대해서는 이전 VPC 글에서 다루었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1599&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EeLxq/dJMcaiiXAqT/CP73EkXeJEQ62kRMXtKikk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EeLxq/dJMcaiiXAqT/CP73EkXeJEQ62kRMXtKikk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EeLxq/dJMcaiiXAqT/CP73EkXeJEQ62kRMXtKikk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEeLxq%2FdJMcaiiXAqT%2FCP73EkXeJEQ62kRMXtKikk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;392&quot; data-origin-width=&quot;1599&quot; data-origin-height=&quot;846&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;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;3) EC2 인스턴스 세부 정보 구성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&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;1077&quot; data-origin-height=&quot;740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ET1az/dJMcaiJZWq1/Jbts8CGzBdvQvrzcB0vpr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ET1az/dJMcaiJZWq1/Jbts8CGzBdvQvrzcB0vpr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ET1az/dJMcaiJZWq1/Jbts8CGzBdvQvrzcB0vpr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FET1az%2FdJMcaiJZWq1%2FJbts8CGzBdvQvrzcB0vpr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;449&quot; data-origin-width=&quot;1077&quot; data-origin-height=&quot;740&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;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;4) EBS(가상 스토리지) 설정&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;크기(GiB): 메모리 GB단위&lt;/li&gt;
&lt;li&gt;볼륨 유형: EBS는 5가지 타입이 있다. 5가지 종류의 SSD가 있는데, 비용 발생을 피하기 위해 범용 SSD를 선택한다.&lt;/li&gt;
&lt;li&gt;종료 시 삭제: 인스턴스가 삭제될 때 EBS도 삭제할지 말지를 설정하는 옵션이다. 해당 옵션이 체크되면, 인스턴스를 종료할 때 컴퓨터와 저장장치가 모두 폐기된다. 체크하지 않으면, 컴퓨터만 폐기된다.&lt;/li&gt;
&lt;li&gt;암호화: EBS 자체를 암호화시키는 것으로, 해킹당해도 암호화가 되어 있기에 데이터가 안전하다는 뜻이다.&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;1615&quot; data-origin-height=&quot;609&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lM59l/dJMcadhFt5N/7TVBp7kh9BIA1hve6kveA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lM59l/dJMcadhFt5N/7TVBp7kh9BIA1hve6kveA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lM59l/dJMcadhFt5N/7TVBp7kh9BIA1hve6kveA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlM59l%2FdJMcadhFt5N%2F7TVBp7kh9BIA1hve6kveA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;265&quot; data-origin-width=&quot;1615&quot; data-origin-height=&quot;609&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;5) 태그 추가&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;태그는 어떤 인스턴스를 만들고, 어떤 용도, 누가 관리하는지 등의 메모기능이라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;인스턴스를 여러 개 사용할 경우 각 인스턴스를 알아보기 쉽게 별명으로 구분하는 기능이지만, 설정을 하지 않아도 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgCEiB/dJMcacwjr6x/sOKEBqwQ4kFHIW72QwkSRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgCEiB/dJMcacwjr6x/sOKEBqwQ4kFHIW72QwkSRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgCEiB/dJMcacwjr6x/sOKEBqwQ4kFHIW72QwkSRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgCEiB%2FdJMcacwjr6x%2FsOKEBqwQ4kFHIW72QwkSRk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1237&quot; height=&quot;209&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;209&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;6) 보안 그룹 구성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&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;1051&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8tKfg/dJMcajhQoxW/xxckIHUdyTvIuCb1bVXiVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8tKfg/dJMcajhQoxW/xxckIHUdyTvIuCb1bVXiVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8tKfg/dJMcajhQoxW/xxckIHUdyTvIuCb1bVXiVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8tKfg%2FdJMcajhQoxW%2FxxckIHUdyTvIuCb1bVXiVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;260&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본 값으로는 SSH 접속을 22번 포트를 사용하여 모든 IP의 사용자가 접속할 수 있도록 설정되어 있고, 웹에서 접속하게 하려면, 규칙을 추가해서 HTTP 80번 포트를 추가해 열어주면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이외에도 https나 추가저인 세팅도 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;7) 인스턴스 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Pair Key도 생성해주고, 인스턴스를 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1831&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vE5R5/dJMcagk8O03/Z10qaghcxgXPay50TZZKbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vE5R5/dJMcagk8O03/Z10qaghcxgXPay50TZZKbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vE5R5/dJMcagk8O03/Z10qaghcxgXPay50TZZKbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvE5R5%2FdJMcagk8O03%2FZ10qaghcxgXPay50TZZKbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;802&quot; height=&quot;138&quot; data-origin-width=&quot;1831&quot; data-origin-height=&quot;316&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;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;8) 인스턴스 삭제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&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;396&quot; data-origin-height=&quot;711&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btN0s9/dJMcacQAa73/TGDwFkUiNs4POlybKUgsy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btN0s9/dJMcacQAa73/TGDwFkUiNs4POlybKUgsy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btN0s9/dJMcacQAa73/TGDwFkUiNs4POlybKUgsy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtN0s9%2FdJMcacQAa73%2FTGDwFkUiNs4POlybKUgsy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;268&quot; height=&quot;481&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;711&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;삭제한 인스턴스는 상태가 '종료됨'으로 변경된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6QJtM/dJMcabjSQ0A/vCeGGIlySJlDYOkoO9MNc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6QJtM/dJMcabjSQ0A/vCeGGIlySJlDYOkoO9MNc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6QJtM/dJMcabjSQ0A/vCeGGIlySJlDYOkoO9MNc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6QJtM%2FdJMcabjSQ0A%2FvCeGGIlySJlDYOkoO9MNc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;228&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;9) EC2 인스턴스 웹서버 설치하고 접속&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&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;2470&quot; data-origin-height=&quot;1114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uqb3o/dJMcafNmfRY/peGX4ckKfl3nhIKrqP7qfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uqb3o/dJMcafNmfRY/peGX4ckKfl3nhIKrqP7qfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uqb3o/dJMcafNmfRY/peGX4ckKfl3nhIKrqP7qfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuqb3o%2FdJMcafNmfRY%2FpeGX4ckKfl3nhIKrqP7qfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2470&quot; height=&quot;1114&quot; data-origin-width=&quot;2470&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;따로 추가 설정 없이 연결을 해서 EC2 커넥트에 접속한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;1104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRKYKm/dJMcabc2TNw/eMW9GMSxhT0GPJBqM9hXv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRKYKm/dJMcabc2TNw/eMW9GMSxhT0GPJBqM9hXv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRKYKm/dJMcabc2TNw/eMW9GMSxhT0GPJBqM9hXv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRKYKm%2FdJMcabc2TNw%2FeMW9GMSxhT0GPJBqM9hXv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;730&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;1104&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; 이로써 웹에서 리눅스 터미널을 사용할 수 있게 된 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래의 사진은 ping을 쳐보고, 정상적으로 연결이 되었는지 확인해본 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mfeDD/dJMcab5dnrT/XIXdPV4mHeSrakWwPt4oi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mfeDD/dJMcab5dnrT/XIXdPV4mHeSrakWwPt4oi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mfeDD/dJMcab5dnrT/XIXdPV4mHeSrakWwPt4oi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmfeDD%2FdJMcab5dnrT%2FXIXdPV4mHeSrakWwPt4oi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;631&quot; height=&quot;322&quot; data-origin-width=&quot;998&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;p data-ke-size=&quot;size18&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;1747&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9blEK/dJMcacQAbnC/Hy52DNkyta5kU3R5pXr1ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9blEK/dJMcacQAbnC/Hy52DNkyta5kU3R5pXr1ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9blEK/dJMcacQAbnC/Hy52DNkyta5kU3R5pXr1ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9blEK%2FdJMcacQAbnC%2FHy52DNkyta5kU3R5pXr1ok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;733&quot; height=&quot;316&quot; data-origin-width=&quot;1747&quot; data-origin-height=&quot;753&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Public IPs로 브라우저에 접속해본다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WY7zs/dJMcaiceFzw/sLelFS5K5G669nNKwvYJq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WY7zs/dJMcaiceFzw/sLelFS5K5G669nNKwvYJq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WY7zs/dJMcaiceFzw/sLelFS5K5G669nNKwvYJq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWY7zs%2FdJMcaiceFzw%2FsLelFS5K5G669nNKwvYJq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;706&quot; height=&quot;199&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 마무리하며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;지난 시간에 VPC를 공부하고 실습해본 것에 이어 EC2에 대해서 공부해보고 실습을 진행해 보았는데, 아무래도 VPC보다 EC2를 먼저 학습을 하는게 더 좋은 순서인 듯 하다. AWS Cloud의 주요 서비스들을 하나씩 공부해보니 조금씩 이해가 되기 시작했다. 직접 배포도 곧 해보는 시간을 가지도록 해야겠다.&lt;/p&gt;</description>
      <category>[INFRA]/[AWS CLOUD]</category>
      <author>junse0</author>
      <guid isPermaLink="true">https://junse0.tistory.com/30</guid>
      <comments>https://junse0.tistory.com/30#entry30comment</comments>
      <pubDate>Sun, 10 May 2026 21:34:54 +0900</pubDate>
    </item>
    <item>
      <title>[AWS Cloud] VPC</title>
      <link>https://junse0.tistory.com/29</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. AWS의 리전 가용 영역&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;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;자연 재해가 발생할 경우 모든 서비스가 마비됨&lt;/li&gt;
&lt;li&gt;모든 자원이 북미에 있다면, 반대편인 아시아는 멀기 때문에 서비스가 느림&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&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;1013&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQv3nD/dJMcahK3Z2F/mA7nES0yI8pk9LKYe16WPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQv3nD/dJMcahK3Z2F/mA7nES0yI8pk9LKYe16WPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQv3nD/dJMcahK3Z2F/mA7nES0yI8pk9LKYe16WPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQv3nD%2FdJMcahK3Z2F%2FmA7nES0yI8pk9LKYe16WPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1013&quot; height=&quot;517&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;517&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;위의 그림에서 보이듯이 전세계 곳곳에 분산되어 있고, 대한민국에도 하나의 리전이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;가용영역은 리전을 한 번 더 분산하여 배치한 것이라고 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. VPC(Virtual Private Cloud)란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;우선 VPC를 공부하기 전에 서브네팅, 라우팅, IP 클래스 등의 대한 내용 선학습이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;컴퓨터네트워크 과목을 수강했었기에 바로 VPC 이해를 위한 공부를 시작했고, 기억이 안나는 것들은 그 때마다 아래의 블로그에서 찾아보며 공부하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://inpa.tistory.com/entry/WEB-IP-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%84%9C%EB%B8%8C%EB%84%B7-%EB%A7%88%EC%8A%A4%ED%81%AC-%EC%84%9C%EB%B8%8C%EB%84%B7%ED%8C%85-%EC%B4%9D%EC%A0%95%EB%A6%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://inpa.tistory.com/entry/WEB-IP-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%84%9C%EB%B8%8C%EB%84%B7-%EB%A7%88%EC%8A%A4%ED%81%AC-%EC%84%9C%EB%B8%8C%EB%84%B7%ED%8C%85-%EC%B4%9D%EC%A0%95%EB%A6%AC&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777786084785&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;  IP 클래스 &amp;middot; 서브넷 마스크 &amp;middot; 서브넷팅 계산법   총정리&quot; data-og-description=&quot;아이피(IP) 정리 IP(Internet Protocol) 란 인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소이다. 아이피(ip)는 일반적으&quot; data-og-host=&quot;inpa.tistory.com&quot; data-og-source-url=&quot;https://inpa.tistory.com/entry/WEB-IP-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%84%9C%EB%B8%8C%EB%84%B7-%EB%A7%88%EC%8A%A4%ED%81%AC-%EC%84%9C%EB%B8%8C%EB%84%B7%ED%8C%85-%EC%B4%9D%EC%A0%95%EB%A6%AC&quot; data-og-url=&quot;https://inpa.tistory.com/entry/WEB-IP-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%84%9C%EB%B8%8C%EB%84%B7-%EB%A7%88%EC%8A%A4%ED%81%AC-%EC%84%9C%EB%B8%8C%EB%84%B7%ED%8C%85-%EC%B4%9D%EC%A0%95%EB%A6%AC&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fXDsJ/dJMb8WMtde7/kr6Tc9jPgRHBI2psMdf4I1/img.jpg?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/cdNkNc/dJMb85WWXN9/RR0t6bqejL5uKmeMBFJ311/img.jpg?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/sVBfK/dJMb82MGHTw/mg22cr84yk2LanedP22NGK/img.png?width=1250&amp;amp;height=778&amp;amp;face=0_0_1250_778&quot;&gt;&lt;a href=&quot;https://inpa.tistory.com/entry/WEB-IP-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%84%9C%EB%B8%8C%EB%84%B7-%EB%A7%88%EC%8A%A4%ED%81%AC-%EC%84%9C%EB%B8%8C%EB%84%B7%ED%8C%85-%EC%B4%9D%EC%A0%95%EB%A6%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://inpa.tistory.com/entry/WEB-IP-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%84%9C%EB%B8%8C%EB%84%B7-%EB%A7%88%EC%8A%A4%ED%81%AC-%EC%84%9C%EB%B8%8C%EB%84%B7%ED%8C%85-%EC%B4%9D%EC%A0%95%EB%A6%AC&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fXDsJ/dJMb8WMtde7/kr6Tc9jPgRHBI2psMdf4I1/img.jpg?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/cdNkNc/dJMb85WWXN9/RR0t6bqejL5uKmeMBFJ311/img.jpg?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/sVBfK/dJMb82MGHTw/mg22cr84yk2LanedP22NGK/img.png?width=1250&amp;amp;height=778&amp;amp;face=0_0_1250_778');&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;  IP 클래스 &amp;middot; 서브넷 마스크 &amp;middot; 서브넷팅 계산법   총정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;아이피(IP) 정리 IP(Internet Protocol) 란 인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소이다. 아이피(ip)는 일반적으&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;inpa.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;size18&quot;&gt;&amp;nbsp;VPC는 AWS 클라우드 내에서 사용자에게 할당된 논리적으로 격리된 가상 네트워크 공간으로, 데이터 센터의 네트워크를 직접 구상하듯 IP 대역, 서브넷, 라우팅 테이블, 게이트웨이를 직접 제어할 수 있다. 또한, 다른 사용자의 네트워크와 분리되어 있으므로 보안성이 뛰어나다는 장점이 있다.&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;&amp;nbsp;AWS는 모든 서비스에 VPC를 적용하도록 강제하고 있으며, 대부분의 AWS 서비스가 VPC에 의존적이기 때문에 VPC에 대한 이해가 필수적으로 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;VPC는 가상의 네트워크 영역이기에 사설 아이피 주소를 가지게 되어, 사설 IP 대역에 맞추어 설계해야하며, 사용하는 사설 IP 대역은 아래와 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1777787821974&quot; class=&quot;angelscript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix) &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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;그리고, 하나의 리전 안에서 VPC를 여러 개 생성할 때 DNS IP를 잡지 못하는 에러가 발생하지 않도록 서로 아이피는 겹치면 안된다. 예를 들면 172.31.0.0/16으로 기본 VPC가 생성되어 있다면 172.31 네트워크 IP 주소를 피해서 생성해야한다. 또한, AWS에서는 /16~/28 비트의 서브넷 마스크만을 허용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;그리고 VPC에서 한 번 설정된 IP 대역은 수정할 수 없으며, 각각의 VPC는 독립적이기 때문에 서로 통신할 수 없다. 통신을 하려면 VPC 피어링(peering) 서비스를 통해 VPC 간 트래픽을 라우팅할 수 있도록 설정해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 서브넷 (Subnet)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;VPC가 논리적인 범위라면, 서브넷은 VPC의 IP 주소를 나누어 리소스가 배치되는 물리적인 주소 범위이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;서브넷은 VPC안에서 실제로 리소스가 생성될 수 있는 네트워크 영역으로, EC2, RDS와 같은 리소스를 생성할 수 있다. 하나의 가용영역 내부에서 여러 서브넷을 생성할 수 있지만, 여러 가용영역에 거쳐 서브넷을 생성할 순 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;아래의 5가지 IP는 AWS의 관리 IP로서 사용자가 사용할 수 없는 주소이다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 85px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.6977%; height: 17px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #373e48; text-align: left;&quot;&gt;10.0.0.0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 89.3023%; height: 17px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #373e48; text-align: left;&quot;&gt;네트워크 주소 (Network ID)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.6977%; height: 17px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #373e48; text-align: left;&quot;&gt;10.0.0.1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 89.3023%; height: 17px;&quot;&gt;AWS에서 VPC 라우터용으로 예약 (Default Gateway)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.6977%; height: 17px;&quot;&gt;10.0.0.2&lt;/td&gt;
&lt;td style=&quot;width: 89.3023%; height: 17px;&quot;&gt;DNS 서버 주소&lt;br /&gt;DNS 서버의 IP 주소는 기본 VPC 네트워크 범위에 2를 더한 주소.&lt;br /&gt;CIDR 블록이 여러 개인 VPC의 경우, DNS 서버의 IP 주소가 기본 CIDR에 위치하게 된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.6977%; height: 17px;&quot;&gt;10.0.0.3&lt;/td&gt;
&lt;td style=&quot;width: 89.3023%; height: 17px;&quot;&gt;AWS에서 앞으로 사용하려고 예약한 주소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.6977%; height: 17px;&quot;&gt;10.0.0.255&lt;/td&gt;
&lt;td style=&quot;width: 89.3023%; height: 17px;&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;size18&quot;&gt;&amp;nbsp;호스트 범위의 첫 번째 주소는 네트워크 주소이고, 마지막 주소는 브로드캐스트 주소로서 사용할 수 없는데, 이에 3개가 추가되어 총 5개의 IP를 사용할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이 서브넷은 다시 Public Subnet과 Private Subnet으로 나뉘어진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Public Subnet: 인터넷에 접근 가능한 Subnet으로, VPC 외부 / 내부와 통신&lt;/li&gt;
&lt;li&gt;Private Subnet: 인터넷에 접근 불가능한 Subnet으로, VPC 내부에서만 통신&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;따라서, Public Subnet에 존재하는 인스턴스는 인터넷에 연결되어 외부와 양방향 트래피을 주고 받을 수 있지만, Private Subnet은 외부에 노출도어 있지 않기에 접근할 수 없다. 그렇기에, Private Subnet에 주로 민감한 데이터 정보들을 저장해 보안을 강화하는 식으로 설계를 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;공용 아이피 주소는 공유기에만 할당이되고, 공유기에 연결한 디바이스들은 사설 아이피 대역을 받게 된다. 외부 인터넷은 공유기로 먼저 데이터를 보내고, 공유기는 포트를 통해 각 디바이스들을 구분하여 데이터를 보내주게 된다. 따라서, 외부 네트워크의 디바이스는 공유기를 거쳐 데이터를 보내야하는데, 공유기가 이상한 데이터를 버려준다면 보안성 측면에서 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;만약 데이터 업데이트에 인터넷 연결이 필수라면 NAT Gateway를 통해 Private Subnet 내부의 인스턴스들이 인터넷에 연결이 가능하도록 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A6iWX/dJMcabKSmke/kUn5rQDGFIkUPyTMe6WKa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A6iWX/dJMcabKSmke/kUn5rQDGFIkUPyTMe6WKa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A6iWX/dJMcabKSmke/kUn5rQDGFIkUPyTMe6WKa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA6iWX%2FdJMcabKSmke%2FkUn5rQDGFIkUPyTMe6WKa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;459&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;566&quot;/&gt;&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;4. 라우팅&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;각각의 Subnet은 서로 다른 네트워크 영역을 가지고 있기 때문에, 한 Subnet에서 다른 Subnet으로 가기 위해서는 Routing이 필요하다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;라우팅 테이블은 VPC 안에서 발생한 네트워크 요청을 처리하기 위해 어디로 트래픽을 전송해야하는지 알려주는 표지판 역할을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;각 서브넷들은 이러한 라우팅 테이블을 가지고 있으며, 요청 발생시 이 라우팅 테이블을 사용해 목적지를 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;VPC 내부에 대해서는 디폴트로 Routing이 자동으로 생성되어 있어 별도의 설정 없이 한 Subnet에서 다른 Subnet으로 통신이 가능하다.&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;891&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dG1PMB/dJMcajougjC/JQPGV4Mvsi3vOtHobLQVT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dG1PMB/dJMcajougjC/JQPGV4Mvsi3vOtHobLQVT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dG1PMB/dJMcajougjC/JQPGV4Mvsi3vOtHobLQVT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdG1PMB%2FdJMcajougjC%2FJQPGV4Mvsi3vOtHobLQVT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;587&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;808&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;p data-ke-size=&quot;size18&quot;&gt;자신이 속한 Subnet이 아닌 Subnet으로 향할 때 Router를 거치게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;2139&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCsDHW/dJMcah5m8rm/gM2mp9AP35kLitFuGmvhE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCsDHW/dJMcah5m8rm/gM2mp9AP35kLitFuGmvhE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCsDHW/dJMcah5m8rm/gM2mp9AP35kLitFuGmvhE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCsDHW%2FdJMcah5m8rm%2FgM2mp9AP35kLitFuGmvhE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2139&quot; height=&quot;792&quot; data-origin-width=&quot;2139&quot; data-origin-height=&quot;792&quot;/&gt;&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;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 인터넷 게이트웨이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;VPC는 기본적으로 격리된 네트워크 환경이므로, 인터넷과 VPC의 리소스와 통신을 활성화하기 위해서는 인터넷 게이트웨이가 필요하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wscgr/dJMcacXgryz/Fy1Hnug1dQk8bOxkl1elN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wscgr/dJMcacXgryz/Fy1Hnug1dQk8bOxkl1elN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wscgr/dJMcacXgryz/Fy1Hnug1dQk8bOxkl1elN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWscgr%2FdJMcacXgryz%2FFy1Hnug1dQk8bOxkl1elN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;616&quot; height=&quot;453&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;518&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;생성한 Public Subnet을 실제 Public용으로 만들기 위해서는 인터넷 게이트웨이를 라우팅 테이블에 설정하고 등록해주어야 한다. 인터넷 게이트웨이에 연결되면 Public Subnet이고, 연결되어 있지 않으면 Private Subnet이라고 볼 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 실습&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;1) VPC 실전 구성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;리전을 서울로 변경하고 VPC를 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1277&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Js0ol/dJMcajoue2t/ZzFqvRo2qtFnQVkxs405q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Js0ol/dJMcajoue2t/ZzFqvRo2qtFnQVkxs405q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Js0ol/dJMcajoue2t/ZzFqvRo2qtFnQVkxs405q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJs0ol%2FdJMcajoue2t%2FZzFqvRo2qtFnQVkxs405q1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1277&quot; height=&quot;1080&quot; data-origin-width=&quot;1277&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;추가적으로 설정에서 DNS 호스트 이름을 활성화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;2) Subnet 실전 구성&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.3333%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 35.1938%; text-align: center;&quot;&gt;ap-northeast-2a(AZ)&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%; text-align: center;&quot;&gt;ap-northeast-2c(AZ)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.3333%; text-align: center;&quot;&gt;Public Subnet&lt;/td&gt;
&lt;td style=&quot;width: 35.1938%; text-align: center;&quot;&gt;10.0.1.0/24&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%; text-align: center;&quot;&gt;10.0.2.0/24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.3333%; text-align: center;&quot;&gt;Private Subnet&lt;/td&gt;
&lt;td style=&quot;width: 35.1938%; text-align: center;&quot;&gt;10.0.3.0/25&lt;/td&gt;
&lt;td style=&quot;width: 41.4728%; text-align: center;&quot;&gt;10.0.4.0/25&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;size18&quot;&gt;&amp;nbsp;위의 표처럼 2개의 가용범위를 Public Subnet 2개, Private Subnet 2개로 구성해본다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMsyQR/dJMcabxhjSf/wjPJCIl0wBcrPUnpsEaRqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMsyQR/dJMcabxhjSf/wjPJCIl0wBcrPUnpsEaRqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMsyQR/dJMcabxhjSf/wjPJCIl0wBcrPUnpsEaRqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMsyQR%2FdJMcabxhjSf%2FwjPJCIl0wBcrPUnpsEaRqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;408&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;457&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위에서 만든 VPC를 선택한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;615&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7spq7/dJMcafNgWvx/yLtNUnknU0joayK0ifhsWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7spq7/dJMcafNgWvx/yLtNUnknU0joayK0ifhsWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7spq7/dJMcafNgWvx/yLtNUnknU0joayK0ifhsWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7spq7%2FdJMcafNgWvx%2FyLtNUnknU0joayK0ifhsWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;835&quot; height=&quot;615&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;615&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;616&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qI8j8/dJMcai4cvoj/e1mHw8I2vtxXGqnDkuWrt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qI8j8/dJMcai4cvoj/e1mHw8I2vtxXGqnDkuWrt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qI8j8/dJMcai4cvoj/e1mHw8I2vtxXGqnDkuWrt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqI8j8%2FdJMcai4cvoj%2Fe1mHw8I2vtxXGqnDkuWrt1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;831&quot; height=&quot;616&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;616&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C7RfD/dJMcacCZPEd/YPO3fPKebr2fEEoZEfbx71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C7RfD/dJMcacCZPEd/YPO3fPKebr2fEEoZEfbx71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C7RfD/dJMcacCZPEd/YPO3fPKebr2fEEoZEfbx71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC7RfD%2FdJMcacCZPEd%2FYPO3fPKebr2fEEoZEfbx71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;617&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;611&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwUS9k/dJMcajhK7ZA/1WQxu9KsINxrf1kpzxP0rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwUS9k/dJMcajhK7ZA/1WQxu9KsINxrf1kpzxP0rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwUS9k/dJMcajhK7ZA/1WQxu9KsINxrf1kpzxP0rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwUS9k%2FdJMcajhK7ZA%2F1WQxu9KsINxrf1kpzxP0rk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;824&quot; height=&quot;611&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;611&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위처럼 Public Subnet, Private Subnet을 각각 2개씩 만들었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2150&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4I4eZ/dJMcaf0J56p/CZkltAudyxVv3Veli49eJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4I4eZ/dJMcaf0J56p/CZkltAudyxVv3Veli49eJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4I4eZ/dJMcaf0J56p/CZkltAudyxVv3Veli49eJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4I4eZ%2FdJMcaf0J56p%2FCZkltAudyxVv3Veli49eJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2150&quot; height=&quot;467&quot; data-origin-width=&quot;2150&quot; data-origin-height=&quot;467&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;p data-ke-size=&quot;size18&quot;&gt;성공적으로 4개의 서브넷이 만들어졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;두 개의 Public Subnet에 주소 자동 할당 활성화를 체크한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) Subnet에 EC2 인스턴스 넣기&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1558&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYgDZ8/dJMcagMayU6/nXcrxUdHbukN7h7CCZkBtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYgDZ8/dJMcagMayU6/nXcrxUdHbukN7h7CCZkBtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYgDZ8/dJMcagMayU6/nXcrxUdHbukN7h7CCZkBtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYgDZ8%2FdJMcagMayU6%2FnXcrxUdHbukN7h7CCZkBtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1558&quot; height=&quot;820&quot; data-origin-width=&quot;1558&quot; data-origin-height=&quot;820&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;1546&quot; data-origin-height=&quot;809&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QTdod/dJMcacCZP4N/9L81zjDHjAs6dBw3bhL1rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QTdod/dJMcacCZP4N/9L81zjDHjAs6dBw3bhL1rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QTdod/dJMcacCZP4N/9L81zjDHjAs6dBw3bhL1rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQTdod%2FdJMcacCZP4N%2F9L81zjDHjAs6dBw3bhL1rk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1546&quot; height=&quot;809&quot; data-origin-width=&quot;1546&quot; data-origin-height=&quot;809&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;p data-ke-size=&quot;size18&quot;&gt;Private, Public Subnet에 각각 Instance를 1개씩 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;2122&quot; data-origin-height=&quot;297&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dv7i5I/dJMcac31hme/ng70s0ZdNXkABTokbuFEcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dv7i5I/dJMcac31hme/ng70s0ZdNXkABTokbuFEcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dv7i5I/dJMcac31hme/ng70s0ZdNXkABTokbuFEcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdv7i5I%2FdJMcac31hme%2Fng70s0ZdNXkABTokbuFEcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2122&quot; height=&quot;297&quot; data-origin-width=&quot;2122&quot; data-origin-height=&quot;297&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;2개의 인스턴스가 생성되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;4) 인터넷 게이트웨이 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&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;2128&quot; data-origin-height=&quot;695&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJwxPn/dJMcaarDQcZ/7h8WlSLR6ujcK282tPZ1kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJwxPn/dJMcaarDQcZ/7h8WlSLR6ujcK282tPZ1kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJwxPn/dJMcaarDQcZ/7h8WlSLR6ujcK282tPZ1kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJwxPn%2FdJMcaarDQcZ%2F7h8WlSLR6ujcK282tPZ1kK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;236&quot; data-origin-width=&quot;2128&quot; data-origin-height=&quot;695&quot;/&gt;&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;&amp;nbsp;아직 VPC에 연결하지 않았기에 상태는 Detached이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;2147&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yCzFN/dJMb997jZCI/pDzkziPLsgvfO1CrfwAVsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yCzFN/dJMb997jZCI/pDzkziPLsgvfO1CrfwAVsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yCzFN/dJMb997jZCI/pDzkziPLsgvfO1CrfwAVsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyCzFN%2FdJMb997jZCI%2FpDzkziPLsgvfO1CrfwAVsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2147&quot; height=&quot;268&quot; data-origin-width=&quot;2147&quot; data-origin-height=&quot;268&quot;/&gt;&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;&amp;nbsp;위에서 생성한 VPC에 이어서 연결해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;1874&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m3GRt/dJMcaaSInGJ/qRdHumhZXSeZynOGCB9LwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m3GRt/dJMcaaSInGJ/qRdHumhZXSeZynOGCB9LwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m3GRt/dJMcaaSInGJ/qRdHumhZXSeZynOGCB9LwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm3GRt%2FdJMcaaSInGJ%2FqRdHumhZXSeZynOGCB9LwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;258&quot; data-origin-width=&quot;1874&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;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;퍼블릭용 라우팅 테이블을 생성하여, 이전에 만든 public subnet들이 진짜 public용으로 설정되게 라우팅 설정을 완료한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2467&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uR5ok/dJMcafsU9B2/CzRZps9LGtHQRuhNf9BIqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uR5ok/dJMcafsU9B2/CzRZps9LGtHQRuhNf9BIqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uR5ok/dJMcafsU9B2/CzRZps9LGtHQRuhNf9BIqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuR5ok%2FdJMcafsU9B2%2FCzRZps9LGtHQRuhNf9BIqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2467&quot; height=&quot;816&quot; data-origin-width=&quot;2467&quot; data-origin-height=&quot;816&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;1941&quot; data-origin-height=&quot;315&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mLnWx/dJMcabRAPN2/FJUB6R9GBHB4P5ok6uW5kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mLnWx/dJMcabRAPN2/FJUB6R9GBHB4P5ok6uW5kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mLnWx/dJMcabRAPN2/FJUB6R9GBHB4P5ok6uW5kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmLnWx%2FdJMcabRAPN2%2FFJUB6R9GBHB4P5ok6uW5kK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1941&quot; height=&quot;315&quot; data-origin-width=&quot;1941&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;기본(예)로 생성된 서브넷들은 기본적으로 private-table을 사용해서 인터넷에 접근하지 못하는 보안성을 확보하고, 외부와 연결이 필요한 서브넷들은 public-table을 따로 추가로 만들어서 넣어주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이후에 public subnet 2개를 public routing table에 등록한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2484&quot; data-origin-height=&quot;729&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWyXK2/dJMcaakQSLK/5J8kn9nN9IdTcu92TzEmr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWyXK2/dJMcaakQSLK/5J8kn9nN9IdTcu92TzEmr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWyXK2/dJMcaakQSLK/5J8kn9nN9IdTcu92TzEmr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWyXK2%2FdJMcaakQSLK%2F5J8kn9nN9IdTcu92TzEmr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2484&quot; height=&quot;729&quot; data-origin-width=&quot;2484&quot; data-origin-height=&quot;729&quot;/&gt;&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;&amp;nbsp;발생하는 모든 트래픽에 대해 10.0.0.0/16은 로컬로 보내고 이를 제외한 모든 트래픽은 외부 인터넷과 연결하도록 public-table을 편집해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2502&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCLBxW/dJMcaiwoPaA/aNwG6lbD2oBzlyCAtRcjOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCLBxW/dJMcaiwoPaA/aNwG6lbD2oBzlyCAtRcjOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCLBxW/dJMcaiwoPaA/aNwG6lbD2oBzlyCAtRcjOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCLBxW%2FdJMcaiwoPaA%2FaNwG6lbD2oBzlyCAtRcjOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2502&quot; height=&quot;527&quot; data-origin-width=&quot;2502&quot; data-origin-height=&quot;527&quot;/&gt;&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;&amp;nbsp;라우팅 테이블 연결 설정을 마치면 정말로 public 서브넷과 prviate 서브넷을 완성시킨 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래 사진에서 보이듯 명시적으로 인터넷 게이트웨이를 연결한 라우팅 테이블에 등록함으로서 외부에 연결이 된 것이며,&amp;nbsp; public-subnet 2개는 외부로 연결이 되었고, private-subnet 2개는 외부로 연결이 되어 있지 않다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2151&quot; data-origin-height=&quot;1120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpUnQo/dJMcadaKxjP/PCks3SJbWBYnMMwkRcbI51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpUnQo/dJMcadaKxjP/PCks3SJbWBYnMMwkRcbI51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpUnQo/dJMcadaKxjP/PCks3SJbWBYnMMwkRcbI51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpUnQo%2FdJMcadaKxjP%2FPCks3SJbWBYnMMwkRcbI51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2151&quot; height=&quot;1120&quot; data-origin-width=&quot;2151&quot; data-origin-height=&quot;1120&quot;/&gt;&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;&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;722&quot; data-origin-height=&quot;751&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4z6PA/dJMcaarDQrY/MOVerLUcx6rhGTAQ1IYjek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4z6PA/dJMcaarDQrY/MOVerLUcx6rhGTAQ1IYjek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4z6PA/dJMcaarDQrY/MOVerLUcx6rhGTAQ1IYjek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4z6PA%2FdJMcaarDQrY%2FMOVerLUcx6rhGTAQ1IYjek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;649&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;751&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. 마무리하며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이번에 처음으로 AWS Cloud를 사용해서 VPC와 서브네팅, 마지막으로 인터넷 게이트웨이까지 연결을 해보았는데, 이론적으로 공부하여 새로운 사실들을 알긴 했는데, 이를 어떻게 배포에 실제로 사용할지는 아직 잘 모르겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;그래도 첫 시작을 했으니 더욱 공부해봐서 실제로 배포하고 운영해보며 실무적인 경험을 해보아야겠다. 그래도 생각보다 꽤 재밌어서 시간이 날 때마다 틈틈히 더 공부해보아야겠다.&lt;/p&gt;</description>
      <category>[INFRA]/[AWS CLOUD]</category>
      <author>junse0</author>
      <guid isPermaLink="true">https://junse0.tistory.com/29</guid>
      <comments>https://junse0.tistory.com/29#entry29comment</comments>
      <pubDate>Sun, 3 May 2026 22:17:18 +0900</pubDate>
    </item>
    <item>
      <title>BOJ 10828 - 스택 C++</title>
      <link>https://junse0.tistory.com/28</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 번호&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fbfdfc; color: #212529; text-align: start;&quot;&gt;백준 10828 - 스택 (실버IV)&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;1126&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNs0xC/dJMcagryrMc/P1NY9UxMKN8Px6pbzCUq1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNs0xC/dJMcagryrMc/P1NY9UxMKN8Px6pbzCUq1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNs0xC/dJMcagryrMc/P1NY9UxMKN8Px6pbzCUq1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNs0xC%2FdJMcagryrMc%2FP1NY9UxMKN8Px6pbzCUq1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1126&quot; height=&quot;643&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;643&quot;/&gt;&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;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이&amp;nbsp;문제는&amp;nbsp;자료구조&amp;nbsp;중에서&amp;nbsp;스택을&amp;nbsp;구현하여&amp;nbsp;문제에서&amp;nbsp;제공하는&amp;nbsp;아래의&amp;nbsp;5개의&amp;nbsp;명령어를&amp;nbsp;수행하도록&amp;nbsp;작성하는&amp;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;push X: 정수 X를 스택에 넣음.&lt;/li&gt;
&lt;li&gt;pop: 스택에서 가장 위에 있는 정수를 빼고 그 수를 출력. (비어있으면 -1)&lt;/li&gt;
&lt;li&gt;&amp;nbsp;size: 스택에 들어있는 정수의 개수를 출력.&lt;/li&gt;
&lt;li&gt;empty: 스택이 비어있으면 1, 아니면 0을 출력.&lt;/li&gt;
&lt;li&gt;top: 스택의 가장 위에 있는 정수를 출력. (비어있으면 -1)&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;/h4&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;C++에서&amp;nbsp;제공하는&amp;nbsp;stack&amp;nbsp;라이브러리를&amp;nbsp;사용하면&amp;nbsp;그대로&amp;nbsp;바로&amp;nbsp;풀&amp;nbsp;수&amp;nbsp;있겠지만,&amp;nbsp;vector&amp;nbsp;라이브러리를&amp;nbsp;사용해서&amp;nbsp;풀이해보았다.&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;트러블&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;top함수를&amp;nbsp;구현하는데에서&amp;nbsp;스택이&amp;nbsp;비어있는&amp;nbsp;상태에서&amp;nbsp;empty()체크를&amp;nbsp;하기&amp;nbsp;이전에&amp;nbsp;back()으로&amp;nbsp;값을&amp;nbsp;먼저&amp;nbsp;참조하려고&amp;nbsp;했기에&amp;nbsp;비어있는&amp;nbsp;vector를&amp;nbsp;참조하려&amp;nbsp;하는&amp;nbsp;오류가&amp;nbsp;발생했었다. &lt;br /&gt;-&amp;gt;&amp;nbsp;empty()체크를&amp;nbsp;참조&amp;nbsp;이전에&amp;nbsp;시행하여&amp;nbsp;해결했다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;최종 코드&lt;/h4&gt;
&lt;pre id=&quot;code_1775724245802&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

// push
void push(vector&amp;lt;int&amp;gt;&amp;amp; arr, int num) {
    arr.push_back(num);
}

// pop
void pop(vector&amp;lt;int&amp;gt;&amp;amp; arr) {
    // 스택이 빈 경우
    if (arr.empty()) {
        cout &amp;lt;&amp;lt; &quot;-1\n&quot;;
    }
    else {
        int k = arr.back();
        cout &amp;lt;&amp;lt; k &amp;lt;&amp;lt; &quot;\n&quot;;
        arr.pop_back();
    }
}

// size
void size(vector&amp;lt;int&amp;gt;&amp;amp; arr) {
    // 스택이 안 비어있는 경우
    if (!arr.empty()) {
        cout &amp;lt;&amp;lt; arr.size() &amp;lt;&amp;lt; &quot;\n&quot;;
    }
    else {
        cout &amp;lt;&amp;lt; &quot;0\n&quot;;
    }
}

// empty
void empty(vector&amp;lt;int&amp;gt;&amp;amp; arr) {
    if (arr.empty()) {
        cout &amp;lt;&amp;lt; &quot;1\n&quot;;
    }
    else {
        cout &amp;lt;&amp;lt; &quot;0\n&quot;;
    }
}

//top
void top(vector&amp;lt;int&amp;gt;&amp;amp; arr) {
    if (arr.empty()) {
        cout &amp;lt;&amp;lt; &quot;-1\n&quot;;
    }
    else {
        cout &amp;lt;&amp;lt; arr.back() &amp;lt;&amp;lt; &quot;\n&quot;;
    }
}

int main() {
    vector&amp;lt;int&amp;gt; arr;
    int n, num;
    string str;

    cin &amp;gt;&amp;gt; n;

    for (int i = 0; i &amp;lt; n; i++) {
        cin &amp;gt;&amp;gt; str;  // 명령어 입력
        if (str == &quot;push&quot;) {
            cin &amp;gt;&amp;gt; num;
            push(arr, num);
        }
        else if (str == &quot;pop&quot;) {
            pop(arr);
        }
        else if (str == &quot;size&quot;) {
            size(arr);
        }
        else if (str == &quot;empty&quot;) {
            empty(arr);
        }
        else if (str == &quot;top&quot;) {
            top(arr);
        }
        else {
            cout &amp;lt;&amp;lt; &quot;잘못된 명령어.&quot;;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;분석&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시간&amp;nbsp;복잡도:&amp;nbsp;모든&amp;nbsp;명령어가&amp;nbsp;인덱스&amp;nbsp;접근&amp;nbsp;및&amp;nbsp;수정만&amp;nbsp;하므로&amp;nbsp;O(1)의&amp;nbsp;시간복잡도를&amp;nbsp;가지고,&amp;nbsp;명령의&amp;nbsp;수&amp;nbsp;N에&amp;nbsp;따라&amp;nbsp;총&amp;nbsp;시간&amp;nbsp;복잡도는&amp;nbsp;O(N)이&amp;nbsp;된다.&lt;/li&gt;
&lt;li&gt;공간 복잡도: vector 자료형은 들어오는 데이터의 양에 맞게 메모리를 추가 할당받는다. vector의 capacity가 가득 찼을 때에 데이터가 추가되면 기존 N의 2배인 2N만큼의 메모리를 추가적으로 점유한다. 최종적으로는 O(N)의 공간 복잡도를 가지게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp; vector 자료형으로 문제를 해결했지만, stack을 처음 다룬다면 배열로 직접 stack 자료형을 구현해보는 것도 좋을 것 같다고 생각했다. 자료구조를 처음 배우거나 아직 미숙한 경우에는 직접 구현해보는 편이 좋은 것 같다.&lt;/p&gt;</description>
      <category>[알고리즘 문제 풀이]</category>
      <author>junse0</author>
      <guid isPermaLink="true">https://junse0.tistory.com/28</guid>
      <comments>https://junse0.tistory.com/28#entry28comment</comments>
      <pubDate>Thu, 9 Apr 2026 17:45:44 +0900</pubDate>
    </item>
    <item>
      <title>ADsP, SQLD 후기</title>
      <link>https://junse0.tistory.com/27</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;우선&amp;nbsp;필자는&amp;nbsp;컴퓨터공학을&amp;nbsp;전공하고&amp;nbsp;있고&amp;nbsp;백엔드&amp;nbsp;개발자&amp;nbsp;취업을&amp;nbsp;희망하는&amp;nbsp;대학생이다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;2025년도에&amp;nbsp;복학을&amp;nbsp;하고,&amp;nbsp;본격적인&amp;nbsp;진로에&amp;nbsp;대한&amp;nbsp;고민이&amp;nbsp;깊어갔다. &lt;br /&gt;예전부터&amp;nbsp;막연하게&amp;nbsp;금융권&amp;nbsp;IT&amp;nbsp;개발자로&amp;nbsp;취업하고&amp;nbsp;싶다는&amp;nbsp;생각이&amp;nbsp;있었지만,&amp;nbsp;이를&amp;nbsp;이루기&amp;nbsp;위해&amp;nbsp;구체적으로&amp;nbsp;관련&amp;nbsp;스펙을&amp;nbsp;쌓은&amp;nbsp;경험이&amp;nbsp;없었다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;2학년까지는&amp;nbsp;그저&amp;nbsp;학점관리와&amp;nbsp;강의에서&amp;nbsp;배우는&amp;nbsp;cs&amp;nbsp;지식들에&amp;nbsp;대한&amp;nbsp;공부에만&amp;nbsp;집중하였는데,&amp;nbsp;그러다&amp;nbsp;보니&amp;nbsp;프로젝트&amp;nbsp;경험과&amp;nbsp;실무에&amp;nbsp;큰&amp;nbsp;도움이&amp;nbsp;될법한&amp;nbsp;경험이&amp;nbsp;없다고&amp;nbsp;느껴졌다. &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;이제&amp;nbsp;3학년이&amp;nbsp;되는데&amp;nbsp;뭐라도&amp;nbsp;해야겠다는&amp;nbsp;생각이&amp;nbsp;들어&amp;nbsp;데이터&amp;nbsp;구조와&amp;nbsp;분석에&amp;nbsp;도움이&amp;nbsp;되는&amp;nbsp;ADsP와&amp;nbsp;SQLD&amp;nbsp;자격증을&amp;nbsp;취득하기&amp;nbsp;위한&amp;nbsp;공부를&amp;nbsp;하기로&amp;nbsp;했다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. ADsP 취득 과정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;컴퓨터공학을&amp;nbsp;전공했지만,&amp;nbsp;데이터&amp;nbsp;분야에서는&amp;nbsp;다루어본&amp;nbsp;적이&amp;nbsp;없어&amp;nbsp;노베이스라고&amp;nbsp;생각하고&amp;nbsp;넉넉하게&amp;nbsp;2주&amp;nbsp;정도를&amp;nbsp;공부기간으로&amp;nbsp;잡았다.&amp;nbsp; &lt;br /&gt;하루에&amp;nbsp;오래&amp;nbsp;공부하는걸&amp;nbsp;선호하지도&amp;nbsp;않기에&amp;nbsp;기간을&amp;nbsp;길게&amp;nbsp;잡고&amp;nbsp;하루에&amp;nbsp;1시간에서&amp;nbsp;많게는&amp;nbsp;3시간까지&amp;nbsp;꾸준히&amp;nbsp;공부하도록&amp;nbsp;계획했다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;제&amp;nbsp;48회&amp;nbsp;시험을&amp;nbsp;신청하였고,&amp;nbsp;시험일은&amp;nbsp;2026-02-07이었다.&amp;nbsp;시험&amp;nbsp;신청은&amp;nbsp;시험일로부터&amp;nbsp;약&amp;nbsp;1달&amp;nbsp;전쯤에&amp;nbsp;하기에&amp;nbsp;미리&amp;nbsp;일정을&amp;nbsp;확인하고&amp;nbsp;신청하는&amp;nbsp;것이&amp;nbsp;좋을&amp;nbsp;것&amp;nbsp;같다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;1) 교재&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;우선&amp;nbsp;책은&amp;nbsp;유명한&amp;nbsp;민트책을&amp;nbsp;구매하여&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;457&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dphrQ9/dJMcabKALgH/Co5n50Sr4Qn523JVTUZJW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dphrQ9/dJMcabKALgH/Co5n50Sr4Qn523JVTUZJW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dphrQ9/dJMcabKALgH/Co5n50Sr4Qn523JVTUZJW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdphrQ9%2FdJMcabKALgH%2FCo5n50Sr4Qn523JVTUZJW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;369&quot; height=&quot;451&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;558&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;a title=&quot;[데이터에듀]&quot; href=&quot;https://www.dataedu.kr/product/adsp-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D-%EC%A4%80%EC%A0%84%EB%AC%B8%EA%B0%80-2026/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.dataedu.kr/product/adsp-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D-%EC%A4%80%EC%A0%84%EB%AC%B8%EA%B0%80-2026/&lt;/a&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&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;같았다. &lt;br /&gt;&amp;nbsp;기본적으로 민트책은 책 자체에서 약 한 달로 계획을 짜두었는데, 이 커리큘럼은 굉장히 널널하게 짜여져있어 이 계획표는 무시하고 진행하였다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;2) 개념 강의&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;우선&amp;nbsp;첫&amp;nbsp;10일&amp;nbsp;동안에&amp;nbsp;데이터에듀&amp;nbsp;강의를&amp;nbsp;배속하여&amp;nbsp;1회독을&amp;nbsp;하였고,&amp;nbsp;완강을&amp;nbsp;한&amp;nbsp;후에는&amp;nbsp;유튜브에서&amp;nbsp;요약본&amp;nbsp;영상을&amp;nbsp;보며&amp;nbsp;헷갈리는&amp;nbsp;개념들을&amp;nbsp;따로&amp;nbsp;정리하여&amp;nbsp;암기하는&amp;nbsp;과정을&amp;nbsp;가졌다.&amp;nbsp;아래&amp;nbsp;링크의&amp;nbsp;동영상은&amp;nbsp;유튜브&amp;nbsp;요약본인데&amp;nbsp;도움이&amp;nbsp;많이&amp;nbsp;되었어서&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;1143&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqfxtK/dJMcacQekZi/55idxwrVCvrMjkDNV3iRPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqfxtK/dJMcacQekZi/55idxwrVCvrMjkDNV3iRPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqfxtK/dJMcacQekZi/55idxwrVCvrMjkDNV3iRPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqfxtK%2FdJMcacQekZi%2F55idxwrVCvrMjkDNV3iRPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;802&quot; height=&quot;332&quot; data-origin-width=&quot;1143&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;a title=&quot;[아답터-ADsP 완벽 요약강의]&quot; href=&quot;https://www.youtube.com/watch?v=rClfO1GdmFM&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/watch?v=rClfO1GdmFM&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;1, 2과목만 요약강의를 시청했는데, 큰 도움이 되었다. 3과목도 있으니 찾아서 들으시면 도움이 될 듯 하지만 개인적으로 3과목은 문제를 많이 풀어보는 것이 도움이 된다고 느꼈다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;3) 데이터에듀 어플&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;729&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/10cIZ/dJMcabcGX4l/h21cNQCGVEZTq0fXItlWAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/10cIZ/dJMcabcGX4l/h21cNQCGVEZTq0fXItlWAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/10cIZ/dJMcabcGX4l/h21cNQCGVEZTq0fXItlWAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F10cIZ%2FdJMcabcGX4l%2Fh21cNQCGVEZTq0fXItlWAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;354&quot; height=&quot;565&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;729&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&amp;nbsp;최근&amp;nbsp;10회차를&amp;nbsp;풀이했는데,&amp;nbsp;초반에는&amp;nbsp;60점&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;70~80점대가&amp;nbsp;나왔고,&amp;nbsp;실제&amp;nbsp;시험을&amp;nbsp;본&amp;nbsp;48회차&amp;nbsp;시험도&amp;nbsp;난이도가&amp;nbsp;크게&amp;nbsp;다르진&amp;nbsp;않았다. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;다만,&amp;nbsp;문제에&amp;nbsp;어휘나&amp;nbsp;유형이&amp;nbsp;이전과는&amp;nbsp;살짝&amp;nbsp;달라서&amp;nbsp;헷갈린&amp;nbsp;부분이&amp;nbsp;있었다. &lt;br /&gt;ex)&amp;nbsp;정형데이터&amp;nbsp;-&amp;gt;&amp;nbsp;정량데이터 &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;시험&amp;nbsp;당일에&amp;nbsp;데이터에듀&amp;nbsp;유튜브에서&amp;nbsp;복원&amp;nbsp;문제를&amp;nbsp;풀이하며&amp;nbsp;답을&amp;nbsp;확인하는&amp;nbsp;라이브를&amp;nbsp;진행하는데,&amp;nbsp;저녁즈음에&amp;nbsp;해당&amp;nbsp;라이브가&amp;nbsp;유튜브에&amp;nbsp;올라오기에&amp;nbsp;답부분만&amp;nbsp;넘기면서&amp;nbsp;확인해&amp;nbsp;대충&amp;nbsp;점수를&amp;nbsp;예상해보았다. &lt;br /&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;78점으로&amp;nbsp;합격할&amp;nbsp;수&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;1083&quot; data-origin-height=&quot;596&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehH0Um/dJMcagLSXqK/DODgHxCrOOZscIwc2T44ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehH0Um/dJMcagLSXqK/DODgHxCrOOZscIwc2T44ak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehH0Um/dJMcagLSXqK/DODgHxCrOOZscIwc2T44ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FehH0Um%2FdJMcagLSXqK%2FDODgHxCrOOZscIwc2T44ak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;331&quot; data-origin-width=&quot;1083&quot; data-origin-height=&quot;596&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;4) 마무리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;민트책은&amp;nbsp;확실히&amp;nbsp;비전공자를&amp;nbsp;위해서는&amp;nbsp;좋은&amp;nbsp;것&amp;nbsp;같다.&amp;nbsp;다른&amp;nbsp;책들을&amp;nbsp;본&amp;nbsp;적이&amp;nbsp;없긴&amp;nbsp;하지만&amp;nbsp;데이터에듀&amp;nbsp;앱에서&amp;nbsp;공부할&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;점이&amp;nbsp;너무&amp;nbsp;큰&amp;nbsp;장점이라&amp;nbsp;생각해&amp;nbsp;추천드린다. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;지하철이나&amp;nbsp;이동시간에&amp;nbsp;휴대폰으로&amp;nbsp;개념문제나&amp;nbsp;기출문제를&amp;nbsp;풀고&amp;nbsp;공부할&amp;nbsp;수&amp;nbsp;있기에&amp;nbsp;이런&amp;nbsp;부분에&amp;nbsp;장점을&amp;nbsp;느끼시는&amp;nbsp;분들은&amp;nbsp;개인적으로&amp;nbsp;민트책을&amp;nbsp;추천드린다. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;간혹&amp;nbsp;1,&amp;nbsp;2과목에서&amp;nbsp;개념&amp;nbsp;부분에&amp;nbsp;내용이&amp;nbsp;너무&amp;nbsp;많다고&amp;nbsp;느껴지는데&amp;nbsp;그런&amp;nbsp;파트들은&amp;nbsp;그냥&amp;nbsp;한&amp;nbsp;번&amp;nbsp;읽어보고&amp;nbsp;문제를&amp;nbsp;위주로&amp;nbsp;풀이하며&amp;nbsp;외우는&amp;nbsp;것을&amp;nbsp;추천한다. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;데이터에듀&amp;nbsp;어플에서&amp;nbsp;R언어도&amp;nbsp;실습해볼&amp;nbsp;수&amp;nbsp;있는데,&amp;nbsp;실습하며&amp;nbsp;공부하면&amp;nbsp;도움이&amp;nbsp;되긴&amp;nbsp;하겠지만&amp;nbsp;저는&amp;nbsp;시간이&amp;nbsp;아까워서&amp;nbsp;그&amp;nbsp;시간에&amp;nbsp;기출&amp;nbsp;문제를&amp;nbsp;한&amp;nbsp;번&amp;nbsp;더&amp;nbsp;푼다는&amp;nbsp;생각으로&amp;nbsp;안하고&amp;nbsp;문제를&amp;nbsp;풀며&amp;nbsp;R언어&amp;nbsp;문제들을&amp;nbsp;익혔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;2. SQLD 취득 과정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ADsP를&amp;nbsp;취득한&amp;nbsp;후에&amp;nbsp;바로&amp;nbsp;SQLD&amp;nbsp;시험을&amp;nbsp;신청하였다. &lt;br /&gt;SQLD는&amp;nbsp;컴퓨터공학과&amp;nbsp;학생들은&amp;nbsp;거의&amp;nbsp;모두&amp;nbsp;다&amp;nbsp;취득한다고&amp;nbsp;하는&amp;nbsp;자격증이라고들&amp;nbsp;하길래&amp;nbsp;미리&amp;nbsp;취득해두려는&amp;nbsp;생각이었다. &lt;br /&gt;개강하면&amp;nbsp;데이터베이스&amp;nbsp;과목을&amp;nbsp;수강할&amp;nbsp;예정이기도&amp;nbsp;했기에&amp;nbsp;비록&amp;nbsp;자격증을&amp;nbsp;취득하지&amp;nbsp;못해도&amp;nbsp;수업을&amp;nbsp;예습했다고&amp;nbsp;생각하기로&amp;nbsp;하고&amp;nbsp;준비하기&amp;nbsp;시작했다. &lt;br /&gt;&lt;br /&gt;제&amp;nbsp;60회&amp;nbsp;시험을&amp;nbsp;신청하였고,&amp;nbsp;ADsP&amp;nbsp;때와&amp;nbsp;마찬가지로&amp;nbsp;2주&amp;nbsp;정도&amp;nbsp;기간을&amp;nbsp;잡고&amp;nbsp;공부를&amp;nbsp;시작하였다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 교재&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ADsP를&amp;nbsp;취득했지만&amp;nbsp;SQL은&amp;nbsp;다루어본&amp;nbsp;적이&amp;nbsp;없어&amp;nbsp;비전공자에게&amp;nbsp;좋다는&amp;nbsp;이기적의&amp;nbsp;기본서를&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;461&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRhdAm/dJMcaflTstL/cT0sDyA199E5U7xlzrfWb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRhdAm/dJMcaflTstL/cT0sDyA199E5U7xlzrfWb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRhdAm/dJMcaflTstL/cT0sDyA199E5U7xlzrfWb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRhdAm%2FdJMcaflTstL%2FcT0sDyA199E5U7xlzrfWb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;347&quot; height=&quot;449&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;a title=&quot;[영진닷컴 온라인서점]&quot; href=&quot;https://shop.youngjin.com/goods/view?no=1207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://shop.youngjin.com/goods/view?no=1207&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&amp;nbsp;유튜브 무료 강의도 제공해주기에 추천드립니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) 개념 강의&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&amp;nbsp;ADsP&amp;nbsp;때와&amp;nbsp;마찬가지로&amp;nbsp;첫&amp;nbsp;10일동안은&amp;nbsp;우선&amp;nbsp;이기적&amp;nbsp;유튜브에서&amp;nbsp;제공해주는&amp;nbsp;강의들을&amp;nbsp;배속으로&amp;nbsp;1회독을&amp;nbsp;했고,&amp;nbsp;이후에는&amp;nbsp;요약&amp;nbsp;강의본을&amp;nbsp;보며&amp;nbsp;똑같이&amp;nbsp;헷갈리는&amp;nbsp;개념들에&amp;nbsp;대해&amp;nbsp;정리하며&amp;nbsp;공부하였다. &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;아래&amp;nbsp;강의는&amp;nbsp;ADsP&amp;nbsp;때&amp;nbsp;들은&amp;nbsp;요약강의와&amp;nbsp;동일한&amp;nbsp;유튜버&amp;nbsp;분의&amp;nbsp;요약강의인데&amp;nbsp;둘&amp;nbsp;다&amp;nbsp;도움이&amp;nbsp;많이&amp;nbsp;되었기에&amp;nbsp;추천한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IhqhT/dJMcahqt0Il/AxcnwLrQLFkC2aa6wCDFp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IhqhT/dJMcahqt0Il/AxcnwLrQLFkC2aa6wCDFp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IhqhT/dJMcahqt0Il/AxcnwLrQLFkC2aa6wCDFp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIhqhT%2FdJMcahqt0Il%2FAxcnwLrQLFkC2aa6wCDFp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;752&quot; height=&quot;319&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;488&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a title=&quot;[아답터-SQLD 요약강의]&quot; href=&quot;https://www.youtube.com/watch?v=e_AIZkWJNqA&amp;amp;t=2124s&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/watch?v=e_AIZkWJNqA&amp;amp;t=2124s&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;해당&amp;nbsp;강의들을&amp;nbsp;모두&amp;nbsp;듣고&amp;nbsp;이기적&amp;nbsp;교재&amp;nbsp;뒷편에&amp;nbsp;있는&amp;nbsp;모의고사를&amp;nbsp;풀이하였다. &lt;br /&gt;생각보다&amp;nbsp;문제들이&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;58,&amp;nbsp;59회차가&amp;nbsp;굉장히&amp;nbsp;높은&amp;nbsp;난이도로&amp;nbsp;나왔다는&amp;nbsp;소식을&amp;nbsp;듣고&amp;nbsp;복원된&amp;nbsp;문제를&amp;nbsp;찾아&amp;nbsp;몇&amp;nbsp;문제&amp;nbsp;보았는데&amp;nbsp;지금껏&amp;nbsp;이기적&amp;nbsp;교재에서&amp;nbsp;푼&amp;nbsp;문제들과&amp;nbsp;난이도가&amp;nbsp;차원이&amp;nbsp;달라&amp;nbsp;급하게&amp;nbsp;노랭이&amp;nbsp;책을&amp;nbsp;구매하여&amp;nbsp;풀이하게&amp;nbsp;되었다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp; 3) 노랭이&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;639&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh8GE7/dJMcabRjmVg/bOjfKQbKlK9M9I8bqZ5Xz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh8GE7/dJMcabRjmVg/bOjfKQbKlK9M9I8bqZ5Xz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh8GE7/dJMcabRjmVg/bOjfKQbKlK9M9I8bqZ5Xz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh8GE7%2FdJMcabRjmVg%2FbOjfKQbKlK9M9I8bqZ5Xz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;382&quot; height=&quot;515&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;639&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a title=&quot;[교보문구-노랭이책]&quot; href=&quot;https://product.kyobobook.co.kr/detail/S000212021705&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://product.kyobobook.co.kr/detail/S000212021705&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;문제들로만&amp;nbsp;이루어져&amp;nbsp;있어&amp;nbsp;이기적&amp;nbsp;교재로&amp;nbsp;개념까지&amp;nbsp;공부할거라&amp;nbsp;구입하지&amp;nbsp;않으려&amp;nbsp;했는데&amp;nbsp;실제&amp;nbsp;시험이&amp;nbsp;노랭이&amp;nbsp;교재와&amp;nbsp;비슷한&amp;nbsp;난이도로&amp;nbsp;나온다는&amp;nbsp;이야기에&amp;nbsp;구매하여&amp;nbsp;풀이했다. &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;Part1, 2만 풀이하였고, 문제 양도 많고 꽤나 어려워서 짧은 시간에 모두 풀이하지는 못하였다. 확실히 이기적 교재의 문제들보단 어려웠고, 한 문제 한 문제 푸는데에 꽤 시간이 걸렸다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4) 실제 시험&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&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;br /&gt;&amp;nbsp;&amp;nbsp;ADsP&amp;nbsp;때에는&amp;nbsp;헷갈리는&amp;nbsp;문제들을&amp;nbsp;제외하고&amp;nbsp;모두&amp;nbsp;풀이하는데에&amp;nbsp;30분이면&amp;nbsp;충분하였지만,&amp;nbsp;SQLD는&amp;nbsp;정말&amp;nbsp;시간을&amp;nbsp;모두&amp;nbsp;사용하여&amp;nbsp;풀이를&amp;nbsp;진행했다. &lt;br /&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;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;그래도&amp;nbsp;다행히&amp;nbsp;ADsP때와&amp;nbsp;같은&amp;nbsp;점수인&amp;nbsp;78점으로&amp;nbsp;합격할&amp;nbsp;수&amp;nbsp;있었다. &lt;br /&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;1155&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IWXSS/dJMcadatn3k/szzWeKWC4vUVlu0sQzhKyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IWXSS/dJMcadatn3k/szzWeKWC4vUVlu0sQzhKyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IWXSS/dJMcadatn3k/szzWeKWC4vUVlu0sQzhKyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIWXSS%2FdJMcadatn3k%2FszzWeKWC4vUVlu0sQzhKyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;382&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;5) 마무리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&amp;nbsp;컴퓨터공학을&amp;nbsp;전공하여&amp;nbsp;SQL을&amp;nbsp;다루어본&amp;nbsp;경험이&amp;nbsp;있다면&amp;nbsp;개념서&amp;nbsp;말고&amp;nbsp;노랭이&amp;nbsp;책이나&amp;nbsp;기출문제들만&amp;nbsp;풀이해보아도&amp;nbsp;충분히&amp;nbsp;합격할&amp;nbsp;수&amp;nbsp;있을&amp;nbsp;것이라&amp;nbsp;생각한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;하지만,&amp;nbsp;나처럼&amp;nbsp;SQL을&amp;nbsp;접해보지&amp;nbsp;못하였고&amp;nbsp;비전공자라면&amp;nbsp;개념서를&amp;nbsp;구매하여&amp;nbsp;개념&amp;nbsp;공부를&amp;nbsp;하고&amp;nbsp;여유가&amp;nbsp;된다면&amp;nbsp;노랭이책도&amp;nbsp;구매하여&amp;nbsp;한&amp;nbsp;번&amp;nbsp;풀어보는&amp;nbsp;걸&amp;nbsp;추천한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;최근에&amp;nbsp;SQLD&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;5만원이기에&amp;nbsp;교재&amp;nbsp;살&amp;nbsp;돈&amp;nbsp;아끼다가&amp;nbsp;괜히&amp;nbsp;시험을&amp;nbsp;한&amp;nbsp;번&amp;nbsp;더&amp;nbsp;보는&amp;nbsp;것보다&amp;nbsp;처음할&amp;nbsp;때&amp;nbsp;확실하게&amp;nbsp;준비하는&amp;nbsp;것이&amp;nbsp;좋을&amp;nbsp;것&amp;nbsp;같다. &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;SQL&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;1과목이&amp;nbsp;개인적으로&amp;nbsp;더&amp;nbsp;어려웠다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;3. 앞으로의 계획&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&amp;nbsp;이제 자격증은 4학년에 정보처리기사를 취득하는 것을 계획으로 해야겠다.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;학교&amp;nbsp;강의에서&amp;nbsp;Java언어를&amp;nbsp;배웠으니&amp;nbsp;이를&amp;nbsp;바탕으로&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;공부와&amp;nbsp;자격증&amp;nbsp;공부를&amp;nbsp;하며&amp;nbsp;배운&amp;nbsp;지식들과&amp;nbsp;데이터베이스&amp;nbsp;수업에서&amp;nbsp;배운&amp;nbsp;내용을&amp;nbsp;토대로&amp;nbsp;직접&amp;nbsp;데이터베이스를&amp;nbsp;설계해보며&amp;nbsp;데이터를&amp;nbsp;다루는&amp;nbsp;경험도&amp;nbsp;쌓아야겠다. &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;틈틈히&amp;nbsp;경제와&amp;nbsp;it뉴스를&amp;nbsp;보며&amp;nbsp;관련&amp;nbsp;분야의&amp;nbsp;흐름을&amp;nbsp;파악하는데에도&amp;nbsp;소홀해지지&amp;nbsp;않아야겠다.&lt;/p&gt;</description>
      <category>[자격증]</category>
      <author>junse0</author>
      <guid isPermaLink="true">https://junse0.tistory.com/27</guid>
      <comments>https://junse0.tistory.com/27#entry27comment</comments>
      <pubDate>Thu, 9 Apr 2026 17:14:11 +0900</pubDate>
    </item>
    <item>
      <title>웹 보안 및 인증 프로토콜 (JWT &amp;amp; OAuth)</title>
      <link>https://junse0.tistory.com/26</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 세션과 JWT의 차이점&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;세션은 유저가 로그인하면 서버가 그 정보를 자신의 메모리나 DB에 저장하고, 유저에게는 그 정보의 주소인 '세션ID'만 건네주는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● 동작 원리: 유저는 '세션ID'가 담킨 쿠키를 들고 다니고, 서버는 요청이 올 때마다 서버의 메모리에 해당 ID가 있는지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;장점: 서버가 유저의 상태를 완전히 통제할 수 있어 보안이 의심되는 유저를 서버에서 즉시 강제 로그아웃시켜 통제할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;단점: 유저가 많아져서 서버를 여러 대로 늘리면, 1번 서버에 로그인한 유저 정보가 2번 서버에는 없어 로그인이 풀리는 현상이 발생한다. 이를 해결하기 위해서는 별도의 공유 저장소(Redis 등)가 필요해 인프라 복잡도가 상승하는 단점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;JWT는 유저 정보를 암호화해서 유저에게 직접 들려보내는 방식으로, 서버가 따로 정보를 저장하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;동작 원리: 유저가 로그인하면 서버는 유저 정보를 담은 '토큰'을 발급하고, 유저는 매 요청마다 이 토큰을 제출한다. 서버는 이 토큰이 서버의 열쇠로 서명된 것이 맞는지 검증만 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;장점: 서버가 정보를 저장하지 않으므로 서버를 수백 대 늘려도 상관없다. 모든 서버가 같은 검증 로직만 가지면 되기 때문이다. -&amp;gt; 이 장점으로 인해 금융권 및 차세대/MSA 환경에서 이 방식을 선호한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;단점: 한 번 발급된 토큰은 만료될 때까지 서버가 제어하기 어려워 해커가 토큰을 훔쳐가면 서버 측에서 즉시 무효화하기가 매우 까다롭다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.124%; text-align: center;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 40.5426%; text-align: center;&quot;&gt;세션( Session )&lt;/td&gt;
&lt;td style=&quot;width: 43.3333%; text-align: center;&quot;&gt;JWT( JSON Web Token )&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.124%; text-align: center;&quot;&gt;저장 위치&lt;/td&gt;
&lt;td style=&quot;width: 40.5426%; text-align: center;&quot;&gt;서버( Memory, DB, Redis 등 )&lt;/td&gt;
&lt;td style=&quot;width: 43.3333%; text-align: center;&quot;&gt;클라이언트 ( Local Storage, Cookie 등 )&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.124%; text-align: center;&quot;&gt;인증 매개체&lt;/td&gt;
&lt;td style=&quot;width: 40.5426%; text-align: center;&quot;&gt;세션ID( 단순 문자열 )&lt;/td&gt;
&lt;td style=&quot;width: 43.3333%; text-align: center;&quot;&gt;토큰 ( 유저 정보가 담긴 암호화된 문자 )&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.124%; text-align: center;&quot;&gt;상태 유지&lt;/td&gt;
&lt;td style=&quot;width: 40.5426%; text-align: center;&quot;&gt;Stateful( 서버가 유저 상태를 기억함 )&lt;/td&gt;
&lt;td style=&quot;width: 43.3333%; text-align: center;&quot;&gt;Stateless ( 서버가 유저 상태를 기억 안함 )&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.124%; text-align: center;&quot;&gt;확장성&lt;/td&gt;
&lt;td style=&quot;width: 40.5426%; text-align: center;&quot;&gt;상대적으로 낮음 ( 서버간 공유 필수 )&lt;/td&gt;
&lt;td style=&quot;width: 43.3333%; text-align: center;&quot;&gt;매우 높음 ( 서버 확장시 매우 유리 )&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.124%; text-align: center;&quot;&gt;보안 제어&lt;/td&gt;
&lt;td style=&quot;width: 40.5426%; text-align: center;&quot;&gt;서버에서 즉시 로그아웃 제어 가능&lt;/td&gt;
&lt;td style=&quot;width: 43.3333%; text-align: center;&quot;&gt;토큰 탈취 시 만료 전까지 제어 어려&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;2. JWT (JSON Web Token) 특징&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;1) 자가 수용적 (Self - Contained)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;토큰 자체가 정보를 담고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;내용: 사용자 식별 정보, 토큰의 발행 일시, 만료 일시, 권한 범위(Scope) 등을 Payload에 담을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;장점: 서버는 DB를 매번 조회하지 않고도 토큰을 해독하는 것만으로 &quot;이 유저가 누구인지&quot;, &quot;이 요청을 할 권한이 있는지&quot; 바로 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;활용: 여러 마이크로서비스 ( ex. 계좌 조회 서비스, 이체 서비스 )가 흩어져 있을 때, 각 서비스가 공통 DB에 접근할 필요 없이 토큰만으로 인증을 처리할 수 있어 성능상 매우 유리하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;2) 무상태성 (Stateless)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;서버가 유저의 인증 상태를 유지하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;내용: 세션은 서버 메모리에 '로그인 상태'를 저장하지만, JWT는 서버에 아무것도 저장하지 않고 토큰의 유효성만 검사한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;장점: 어떤 서버로 요청이 들어와도 동일한 비밀키만 있다면 인증이 가능하기에 서버를 수평적으로 확장하기 매우 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;3) 무결성 보장 (Integrity via Signature)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;JWT는 데이터의 보안(비밀 유지)보다는 데이터가 변조되지 않았음을 보장하는데 특화되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;내용: Signature(서명) 부분이 핵심이다. 서버는 Header + Payload + Secret Key를 조합해 해시값을 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;특징: 만약 해커가 Payload에 있는 유저 ID를 내 계정에서 다른 사람 계정으로 바꾸면 서버에서 다시 계산한 서명값과 토큰에 적힌 서명값이 달라지므로 즉시 거부된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;주의사항: 하지만 Payload 자체는 암호화된 것이 아니라 Base64로 인코딩만 된 것이므로 누구나 디콩하여 내용을 볼 수 있다. 따라서 개인정보나 주요 비밀번호 등을 Payload에 넣는 것은 피해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;4) 확장성 (Extensibility)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;토큰을 표준화된 방식으로 주고받기 때문에 다양한 환경에서 사용 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;내용: HTTP 헤더의 Authorization: Bearer &amp;lt;token&amp;gt; 형식을 통해 전달되므로, 웹 브라우저뿐만 아니라 모바일 앱(iOS/Android), IoT 기기, 서버 간 통신(M2M) 등 어디서나 인증 체계를 통합할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;5) 만료 시간의 명시 (Expiration)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;JWT는 생성될 때부터 수명을 가지고 태어난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;내용: Payload의 exp 클레임을 통해 토큰의 유효 기간을 초 단위로 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;사용 전략: 보안을 위해 보통 Access Token의 수명은 매우 짧게 (15~60분)으로 설정한다. 만약 토큰이 탈취되더라도 해커가 사용할 수 있는 시간을 최소화하기 위함이다. 대신 사용자가 계속 로그인 상태를 유지할 수 있도록 Refresh Token을 함께 사용하는 전략을 취한다.&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;&amp;nbsp;3. JWT 서명(Signature)의 수학적 원리: HMAC과 SHA-256&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;JWT의 서명은 서버가 해당 토큰을 만든 것이 맞다고 인증하는 인감도장과 같은 역할이다. HMAC SHA-256 알고리즘이 가장 많이 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;원리: 서버는 Base64(Header) + &quot;.&quot; + Base64(Payload)라는 문자열을 만들고, 여기에 서버만 아는 비밀키(Secret Key)를 더한 뒤, SHA-256 알고리즘으로 암호화(해싱)한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;안전한 이유: 해시 함수는 입력값이 단 1비트만 바뀌어도 결과값이 완전히 달라지기에 해커가 Payload의 유저 ID를 조금만 바꿔도, 서버가 다시 계산한 결과인 서명과 토큰에 적힌 결과값이 일치하지 않기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;실무: 서버의 Secret Key가 털리면 모든 보안이 무너지기에 이 키를 코드에 직접 적지 않고, AWS Secrets Manager나 Valut 같은 별도의 관리 도구를 사용해 엄격하게 관리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;4. 토큰 저장소에 대한 고민: 어디에 저장할 것인지&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;1) 로컬 스토리지 (Local Storage)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;방식: 브라우저의 저장 공간에 텍스트 형태로 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;장점: 구현이 매우 쉽고, 새로고침해도 로그인이 유지된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● &amp;nbsp;단점: 매우 치명적인 단점으로 자바스크립트로 접근이 가능해, 해커가 악성 스크립트를 심으면(XSS), localSotrage.getItem() 한 줄로 사용자의 토큰을 바로 훔쳐갈 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;2) 쿠키 (Cookie + httpOnly/Secure)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● 방식: HTTP 헤더를 통해 브라우저에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● 보안 설정:&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;httpOnly: 자바스크립트로 쿠키를 읽을 수 없게 막는다. (XSS 방어)&lt;/li&gt;
&lt;li&gt;Secure: HTTPS 통신일 때만 쿠키를 전송한다.&lt;/li&gt;
&lt;li&gt;SameSite 타 사이트에서의 요청을 제한하여 CSRF(사이트 간 요청 위조)공격을 방어한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● 단점: CSRF 공격에 대한 추가 방어 로직이 필요하며, 모바일 앱과의 통신 시 설정이 번거로울 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. Spring Boot + JWT 구현 코드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;1) 설정 정보 분리&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Secret Key를 코드에 직접 하드코딩하지 않고 환경 변수로 관리하는 습관을 가진다.&lt;/p&gt;
&lt;pre id=&quot;code_1775640965061&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;jwt:
  # 실무에서는 환경 변수나 보안 저장소를 통해 주입받는다.
  secret: ${JWT_SECRET_KEY:vmfhaltmskdlfnbmsdfglkjbnm4352t6345b3456b3456b3456}
  access-token-expiration: 3600000 # 1시간 (ms 단위)
  refresh-token-expiration: 1209600000 # 14일&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;size18&quot;&gt;&amp;nbsp;2) JWT 토큰 생성 및 검증 유틸리티 (JwtTokenProvider.java)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;가장 핵심이 되는 클래스로, 자바의 jjwt 라이브러리를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1775641043031&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Component
public class JwtTokenProvider {

    @Value(&quot;${jwt.secret}&quot;)
    private String secretKey;

    @Value(&quot;${jwt.access-token-expiration}&quot;)
    private long expireTime;

    private Key key;

    // 객체 초기화 시 Secret Key를 알고리즘에 맞는 Key 객체로 변환
    @PostConstruct
    protected void init() {
        byte[] keyBytes = Decoders.BASE64.decode(secretKey);
        this.key = Keys.hmacShaKeyFor(keyBytes);
    }

    // 1. JWT 토큰 생성
    public String createToken(String userUid, List&amp;lt;String&amp;gt; roles) {
        Claims claims = Jwts.claims().setSubject(userUid); // Payload에 유저 식별 정보 저장
        claims.put(&quot;roles&quot;, roles); // 권한 정보 추가

        Date now = new Date();

        return Jwts.builder()
                .setClaims(claims)
                .setIssuedAt(now)
                .setExpiration(new Date(now.getTime() + expireTime))
                .signWith(key, SignatureAlgorithm.HS256) // HMAC SHA-256 서명
                .compact();
    }

    // 2. 토큰 유효성 및 만료 기간 검증
    public boolean validateToken(String token) {
        try {
            Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token);
            return true;
        } catch (SecurityException | MalformedJwtException e) {
            log.info(&quot;잘못된 JWT 서명입니다.&quot;);
        } catch (ExpiredJwtException e) {
            log.info(&quot;만료된 JWT 토큰입니다.&quot;);
        } catch (UnsupportedJwtException e) {
            log.info(&quot;지원되지 않는 JWT 토큰입니다.&quot;);
        } catch (IllegalArgumentException e) {
            log.info(&quot;JWT 토큰이 잘못되었습니다.&quot;);
        }
        return false;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;3) Spring Security 필터 연동 (JwtAuthenticationFilter.java)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;모든 요청에서 토큰을 검사하여 인증된 사용자인지 확인하는 필터이다.&lt;/p&gt;
&lt;pre id=&quot;code_1775641084734&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class JwtAuthenticationFilter extends OncePerRequestFilter {

    private final JwtTokenProvider jwtTokenProvider;

    @Override
    protected void doFilterInternal(HttpServletRequest request, 
                                    HttpServletResponse response, 
                                    FilterChain filterChain) throws ServletException, IOException {
        
        // 1. 헤더에서 토큰 추출
        String token = resolveToken(request);

        // 2. 토큰 유효성 검사 후 SecurityContext에 인증 정보 저장
        if (token != null &amp;amp;&amp;amp; jwtTokenProvider.validateToken(token)) {
            Authentication authentication = jwtTokenProvider.getAuthentication(token);
            SecurityContextHolder.getContext().setAuthentication(authentication);
        }

        filterChain.doFilter(request, response);
    }

    private String resolveToken(HttpServletRequest request) {
        String bearerToken = request.getHeader(&quot;Authorization&quot;);
        if (StringUtils.hasText(bearerToken) &amp;amp;&amp;amp; bearerToken.startsWith(&quot;Bearer &quot;)) {
            return bearerToken.substring(7);
        }
        return null;
    }
}&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;size18&quot;&gt;&amp;nbsp;4) 추가 사항&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;실제 서비스라면 validateToken 과정에서 발생하는 에러 메시지를 사용자에게 자세히 보여주지 않도록 커스텀 예외 처리를 구현하는 편이 좋을 것 같다.&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;&amp;nbsp;6. Refresh Token 관리&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;1) DB or Redis에 저장해야하는 이유&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;JWT는 무상태가 장점이지만, Refresh Token만큼은 서버가 상태를 기록해야하므로 따로 저장이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● 강제 로그아웃: 사용자의 기기를 분실하거나 보안 사고가 의심될 때, 서버에서 저장된 Refresh Token을 삭제하여 해커가 더 이상 Access Token을 재발급할 수 없도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● 중복 로그인 방지: 특정 계정으로 새로운 기기에서 로그인할 때 기존 토큰을 무효화할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;● 탈취 감지: 누군가 Refresh Token을 훔쳐 사용했을 때, 서버가 이를 감지하고 해당 계정의 모든 토큰을 폐기하기 위함이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;2) DB 설계&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;가장 기본적인 형태의 Refresh Token 엔티티이다.&lt;/p&gt;
&lt;pre id=&quot;code_1775641405785&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Entity
@Getter
@NoArgsConstructor
public class RefreshToken {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String userId; // 유저 식별자

    @Column(nullable = false)
    private String token; // Refresh Token 값

    @Column(nullable = false)
    private LocalDateTime expiryDate; // 만료일시

    public RefreshToken(String userId, String token, LocalDateTime expiryDate) {
        this.userId = userId;
        this.token = token;
        this.expiryDate = expiryDate;
    }

    public void updateToken(String newToken, LocalDateTime newExpiryDate) {
        this.token = newToken;
        this.expiryDate = newExpiryDate;
    }
}&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;size18&quot;&gt;&amp;nbsp;3) 로그인 시 저장 로직 (AuthService.java)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;사용자가 로그인에 성공하면 Access Token은 클라이언트에게 주고, Refresh Token은 DB에 저장 or 업데이트한다.&lt;/p&gt;
&lt;pre id=&quot;code_1775641423224&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
@RequiredArgsConstructor
public class AuthService {

    private final RefreshTokenRepository refreshTokenRepository;
    private final JwtTokenProvider jwtTokenProvider;

    @Transactional
    public TokenResponse login(LoginRequest request) {
        // 1. 유저 인증 로직 (생략)
        
        // 2. 토큰 생성
        String accessToken = jwtTokenProvider.createAccessToken(request.getUserId());
        String refreshToken = jwtTokenProvider.createRefreshToken(request.getUserId());

        // 3. Refresh Token DB 저장 (기존 토큰이 있다면 업데이트, 없다면 새로 저장)
        refreshTokenRepository.findByUserId(request.getUserId())
            .ifPresentOrElse(
                token -&amp;gt; token.updateToken(refreshToken, LocalDateTime.now().plusDays(14)),
                () -&amp;gt; refreshTokenRepository.save(new RefreshToken(request.getUserId(), refreshToken, LocalDateTime.now().plusDays(14)))
            );

        return new TokenResponse(accessToken, refreshToken);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;4) 토큰 재발급 로직 (Access Token 만료시)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;클라이언트가 만료된 Access Token 대신 Refresh Token을 보냈을 때 처리하는 과정이다.&lt;/p&gt;
&lt;pre id=&quot;code_1775641523306&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Transactional
public String refreshAccessToken(String refreshToken) {
    // 1. Refresh Token 유효성 검증
    if (!jwtTokenProvider.validateToken(refreshToken)) {
        throw new RuntimeException(&quot;Refresh Token이 유효하지 않습니다.&quot;);
    }

    // 2. DB에 저장된 토큰인지 확인
    RefreshToken savedToken = refreshTokenRepository.findByToken(refreshToken)
            .orElseThrow(() -&amp;gt; new RuntimeException(&quot;등록되지 않은 토큰입니다.&quot;));

    // 3. 만료 여부 추가 확인
    if (savedToken.getExpiryDate().isBefore(LocalDateTime.now())) {
        refreshTokenRepository.delete(savedToken);
        throw new RuntimeException(&quot;만료된 토큰입니다. 다시 로그인하세요.&quot;);
    }

    // 4. 새로운 Access Token 발급
    return jwtTokenProvider.createAccessToken(savedToken.getUserId());
}&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;size18&quot;&gt;&amp;nbsp;5) 추가 사항&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;현재 짠 코드는 RDB에 저장하는 코드이지만, 실제 서비스처럼 사용자가 많아지면 매번 재발급할 때마다 DB 조회가 발생하는 것이 부담이 될 수 있다. 따라서 TTL(Time To Live) 기능을 지원하는 Redis를 사용하는 것이 성능과 관리 측면에서 유리할 것이라 생각된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Access Token을 재발급할 때마다 Refresh Token도 매번 새로 발급하여 DB를 업데이트하면 더 안전하게 관리할 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. OAuth 2.0&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;OAuth 2.0은 내 서비스가 사용자를 대신해 다른 서비스(카카오, 구글, 은행 등)의 데이터에 접근할 수 있는 권한을 얻는 표준이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;1) 주요 용어&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;●&lt;span&gt; Resource Owner(사용자): 내 앱을 사용하는 고객&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;● Client(내 앱): 권한을 부여받아 데이터를 사용하려는 앱&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;●&lt;span&gt; Authroization Server(인증 서버): 권한을 승인하고 '인가 코드'와 '토큰'을 주는 곳 (카카오, 구글, 금융결제원 등)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;●&lt;span&gt; Resource Server(자원 서버): 실제 데이터(프로필, 계좌 내역 등)가 있는 서버&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;2) Authorization Code Grant(인가 코드 승인 방식)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;금융권과 대부분의 상용 서비스에서 표준으로 사용하는 가장 안전한 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;●&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &amp;nbsp;'인가 코드'를 먼저 받는 이유: 브라우저(Front-End)를 통해 바로 토큰을 받으면 탈취 위험이 크기에 브라우저를 통해 '인가 코드'만 받고, 실제 열쇠인 Access Token은 백엔드 서버끼리 보이지 않는 곳에서 안전하게 주고받기 위함이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;●&lt;span&gt;&amp;nbsp; 전체 흐름 (Flow)&lt;/span&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;권한 요청: 사용자가 앱에서 &quot;카카오로 로그인&quot;을 누르면, 앱이 카카오 인증 페이지로 사용자를 보낸다.&lt;/li&gt;
&lt;li&gt;로그인 및 동의: 사용자가 카카오에 로그인하고 정보 제공에 동의한다.&lt;/li&gt;
&lt;li&gt;인가 코드 발급: 카카오가 Redirect URI를 통해 앱의 백엔드로 '인가 코드'를 보낸다.&lt;/li&gt;
&lt;li&gt;액세스 토큰 교환: 백엔드 서버가 '인가 코드 + Client Secret'을 들고 카카오 서버에 가서 진짜 Access Token과 바꾼다.&lt;/li&gt;
&lt;li&gt;데이터 조회: 이제 이 토큰을 사용해 사용자의 프로필이나 금융 정보를 가져온다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;8. OAuth 2.0 Spring Boot 실전 구현 (구조 설계)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;1) application.yml 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;실무에서는 각 플랫폼(카카오, 네이버 등)의 ID와 Secret을 아래와 같이 관리한다.&lt;/p&gt;
&lt;pre id=&quot;code_1775642498799&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring:
  security:
    oauth2:
      client:
        registration:
          kakao:
            client-id: ${KAKAO_CLIENT_ID}
            client-secret: ${KAKAO_CLIENT_SECRET}
            authorization-grant-type: authorization_code
            redirect-uri: &quot;{baseUrl}/login/oauth2/code/kakao&quot;
            client-authentication-method: client_secret_post&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;2) 사용자 정보 처리 (OAuth2UserService.java)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;카카오나 구글로부터 받은 유저 정보를 우리 서비스의 DB에 저장하거나 로그인 처리하는 로직이다.&lt;/p&gt;
&lt;pre id=&quot;code_1775642540303&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
@RequiredArgsConstructor
public class CustomOAuth2UserService extends DefaultOAuth2UserService {

    private final UserRepository userRepository;

    @Override
    public org.springframework.security.oauth2.core.user.OAuth2User loadUser(OAuth2UserRequest userRequest) {
        OAuth2User oAuth2User = super.loadUser(userRequest);

        // 1. 어느 플랫폼인지 확인 (kakao, google 등)
        String registrationId = userRequest.getClientRegistration().getRegistrationId();
        
        // 2. 플랫폼별 유저 정보 파싱 (데이터 추출)
        OAuthAttributes attributes = OAuthAttributes.of(registrationId, oAuth2User.getAttributes());

        // 3. 우리 DB에 저장하거나 업데이트
        User user = saveOrUpdate(attributes);

        return new DefaultOAuth2User(
            Collections.singleton(new SimpleGrantedAuthority(user.getRoleKey())),
            attributes.getAttributes(),
            attributes.getNameAttributeKey()
        );
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;3) 추가적으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;한국의 마이데이터 서비스는 OAuth 2.0 기반의 표준 API를 사용하여 사용자가 여러 은행의 정보를 한 앱에서 안전하게 조회할 수 있게 한다. 이 때 보안을 위해 일반 OAuth보다 강화된 MTLS(상호 인증) 등을 결합하기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;9. 마무리하며&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이번에 처음으로 보안에 관련된 내용들을 알아보았다. 기존에 백엔드 개발을 시도했을 때에는 보안에 관해 생각해보지 못하였는데, 이번 학습을 통해 보안에 신경을 써서 개발을 해야겠다고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;현재 진행중인 프로젝트에서 당장 JWT의 Acess Token과 Refresh Token을 도입시켜 조금이라도 더 보안을 향상시켜보는 방향으로 우선 도입을 해보아야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;이외에도 실생활에서도 PASS어플이나 카카오 인증하기로 인증을 하는 절차에서 궁금증이 있었는데 OAuth 2.0에 대해 알아보며 이 궁금증도 해결하게 되어 뜻깊은 시간이었던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;한층 더 보안에 관심이 생기고 알게 되어 좋았고, 앞으로는 실제 적용시켜 보며 생기는 어려움에 대해서 기록을 남겨보아야겠다.&lt;/p&gt;</description>
      <category>기술 블로그</category>
      <author>junse0</author>
      <guid isPermaLink="true">https://junse0.tistory.com/26</guid>
      <comments>https://junse0.tistory.com/26#entry26comment</comments>
      <pubDate>Wed, 8 Apr 2026 19:07:43 +0900</pubDate>
    </item>
    <item>
      <title>로그인과 JWT 토큰</title>
      <link>https://junse0.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;0. DB 연결&lt;/p&gt;
&lt;pre id=&quot;code_1756289737410&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose up -d --build&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;도커 DB에 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1756290178620&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;3개의 컨테이너가 모두 연결이 완료되었는지 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;673&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAiEm2/btsQa5Jq2Aj/GtFxOXAtKZuDuBPD1n6Fkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAiEm2/btsQa5Jq2Aj/GtFxOXAtKZuDuBPD1n6Fkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAiEm2/btsQa5Jq2Aj/GtFxOXAtKZuDuBPD1n6Fkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAiEm2%2FbtsQa5Jq2Aj%2FGtFxOXAtKZuDuBPD1n6Fkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;673&quot; data-origin-width=&quot;1431&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;docker에서 이렇게 실행중인 container가 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 회원가입&lt;/p&gt;
&lt;pre id=&quot;code_1756290247307&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Invoke-WebRequest -Uri 'http://localhost:8080/v1/auth/signup' -Method POST -Headers @{&quot;Content-Type&quot;=&quot;application/json&quot;} -Body '{&quot;email&quot;:&quot;test@example.com&quot;,&quot;password&quot;:&quot;password123&quot;,&quot;name&quot;:&quot;테스트 유저&quot;}'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;테스트 유저를 회원가입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1151&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9Q99R/btsP812D9W7/cyKwIs4w6VH52NnIu4w4S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9Q99R/btsP812D9W7/cyKwIs4w6VH52NnIu4w4S0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9Q99R/btsP812D9W7/cyKwIs4w6VH52NnIu4w4S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9Q99R%2FbtsP812D9W7%2FcyKwIs4w6VH52NnIu4w4S0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1151&quot; height=&quot;682&quot; data-origin-width=&quot;1151&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;성공적으로 회원가입 완료.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중복된 유저로 회원가입시 500 코드 응답이 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 로그인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 회원가입한 아이디로 로그인&lt;/p&gt;
&lt;pre id=&quot;code_1756290360349&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Invoke-WebRequest -Uri 'http://localhost:8080/v1/auth/login' -Method POST -Headers @{&quot;Content-Type&quot;=&quot;application/json&quot;} -Body '{&quot;email&quot;:&quot;test@example.com&quot;,&quot;password&quot;:&quot;password123&quot;}'&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;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebCmJJ/btsP8w2RliP/zcut0jp4codMPZAwmVSSA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebCmJJ/btsP8w2RliP/zcut0jp4codMPZAwmVSSA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebCmJJ/btsP8w2RliP/zcut0jp4codMPZAwmVSSA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FebCmJJ%2FbtsP8w2RliP%2Fzcut0jp4codMPZAwmVSSA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;706&quot; data-origin-width=&quot;1189&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;p data-ke-size=&quot;size16&quot;&gt;토큰의 값을 제대로 확인하려면 아래의 코드로 로그인 해주어야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1756290610103&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Invoke-WebRequest -Uri 'http://localhost:8080/v1/auth/login' -Method POST -Headers @{&quot;Content-Type&quot;=&quot;application/json&quot;} -Body '{&quot;email&quot;:&quot;test@example.com&quot;,&quot;password&quot;:&quot;password123&quot;}' -UseBasicParsing | Select-Object -ExpandProperty Content&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;2418&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNdAsR/btsP95pWZp6/XAcWN2kQvH5UBI0Q5e6aMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNdAsR/btsP95pWZp6/XAcWN2kQvH5UBI0Q5e6aMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNdAsR/btsP95pWZp6/XAcWN2kQvH5UBI0Q5e6aMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNdAsR%2FbtsP95pWZp6%2FXAcWN2kQvH5UBI0Q5e6aMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2418&quot; height=&quot;98&quot; data-origin-width=&quot;2418&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;액세스 토큰의 유효기간은 15분, 리프레시 토큰은 14일이다.&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;3. 리프레시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;액세스 토큰은 유효기간이 15분이므로, 재발급을 받아주어야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그아웃할 때 액세스 토큰과 리프레시 토큰이 모두 유효하여야하므로 액세스 토큰이 만료되었다면, 리프레시 토큰을 이용하여 액세스 토큰을 재발급 받는다.&lt;/p&gt;
&lt;pre id=&quot;code_1756292065182&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$refreshToken = &quot;여기에_새로_발급받은_리프레시_토큰_값을_붙여넣으세요&quot;

Invoke-WebRequest -Uri 'http://localhost:8080/v1/auth/refresh' -Method POST -Headers @{&quot;Content-Type&quot;=&quot;application/json&quot;} -Body '{ &quot;refreshToken&quot;: &quot;' + $refreshToken + '&quot; }'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 로그아웃&lt;/p&gt;
&lt;pre id=&quot;code_1756290470091&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Invoke-WebRequest -Uri 'http://localhost:8080/v1/auth/logout' -Method POST -Headers @{&quot;Authorization&quot;=&quot;Bearer &amp;lt;여기에_accessToken_값을_넣으세요&amp;gt;&quot;; &quot;Content-Type&quot;=&quot;application/json&quot;} -Body '{&quot;refreshToken&quot;:&quot;&amp;lt;여기에_refreshToken_값을_넣으세요&amp;gt;&quot;}'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인시에 받았던 액세스 토큰과 리프레시 토큰의 값을 복사하여 해당 부분에 넣어주어야한다.&lt;/p&gt;</description>
      <category>[WEB]</category>
      <author>junse0</author>
      <guid isPermaLink="true">https://junse0.tistory.com/25</guid>
      <comments>https://junse0.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 27 Aug 2025 20:45:47 +0900</pubDate>
    </item>
  </channel>
</rss>