<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>민주의네모들</title>
    <link>https://minjoos.tistory.com/</link>
    <description>파이썬 머신러닝 보안 어쩌구</description>
    <language>ko</language>
    <pubDate>Thu, 9 Jul 2026 16:00:01 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>mjoooo</managingEditor>
    <image>
      <title>민주의네모들</title>
      <url>https://tistory1.daumcdn.net/tistory/3577059/attach/ebc1fc8ca8404f68aab0a9c38ba81c3d</url>
      <link>https://minjoos.tistory.com</link>
    </image>
    <item>
      <title>[AWS] AWS Network Firewall이란? - (2.3) 결합형 배포모델</title>
      <link>https://minjoos.tistory.com/13</link>
      <description>&lt;p&gt;AWS Network Firewall의 세가지 배포모델 중,&amp;nbsp;&lt;br /&gt;1) 분산형 2) 중앙 집중형 에 이어서 오늘은 &lt;b&gt;3) 결합형 배포모델&lt;/b&gt;에 대해 알아보겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(이전 배포 모델을 안보셨다면 보고 오시길 추천. 분산형과 중앙집중형을 모르고선 결합형을 이해할 수 없음.)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://minjoos.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;minjoos.tistory.com/10&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1613379322319&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[AWS] AWS Network Firewall이란? - (2.1) 분산형 배포모델&quot; data-og-description=&quot;지난번에는 AWS Network Firewall의 개념에 대해 알아보았다. 지난번 포스팅을 안보았다면 or 개념을 잘 모르겠다면 이해를 위해 보고오자! https://minjoos.tistory.com/9 [AWS] AWS Network Firewall이란? - (1)..&quot; data-og-host=&quot;minjoos.tistory.com&quot; data-og-source-url=&quot;https://minjoos.tistory.com/10&quot; data-og-url=&quot;https://minjoos.tistory.com/10&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/de7lkP/hyJgk16ws3/JCxulTlURLtXM467hd5fok/img.png?width=800&amp;amp;height=379&amp;amp;face=0_0_800_379,https://scrap.kakaocdn.net/dn/jSYQl/hyJguKrU3j/4hKxIidOe5NvOjJFe27SUk/img.png?width=800&amp;amp;height=379&amp;amp;face=0_0_800_379,https://scrap.kakaocdn.net/dn/ciZkLM/hyJgnLjlJC/0pm7ARay9s4FQM54HQTveK/img.png?width=911&amp;amp;height=727&amp;amp;face=0_0_911_727&quot;&gt;&lt;a href=&quot;https://minjoos.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minjoos.tistory.com/10&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/de7lkP/hyJgk16ws3/JCxulTlURLtXM467hd5fok/img.png?width=800&amp;amp;height=379&amp;amp;face=0_0_800_379,https://scrap.kakaocdn.net/dn/jSYQl/hyJguKrU3j/4hKxIidOe5NvOjJFe27SUk/img.png?width=800&amp;amp;height=379&amp;amp;face=0_0_800_379,https://scrap.kakaocdn.net/dn/ciZkLM/hyJgnLjlJC/0pm7ARay9s4FQM54HQTveK/img.png?width=911&amp;amp;height=727&amp;amp;face=0_0_911_727');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[AWS] AWS Network Firewall이란? - (2.1) 분산형 배포모델&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;지난번에는 AWS Network Firewall의 개념에 대해 알아보았다. 지난번 포스팅을 안보았다면 or 개념을 잘 모르겠다면 이해를 위해 보고오자! https://minjoos.tistory.com/9 [AWS] AWS Network Firewall이란? - (1)..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;minjoos.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://minjoos.tistory.com/12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;minjoos.tistory.com/12&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1613379333144&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[AWS] AWS Network Firewall이란? - (2.2) 중앙집중형 배포모델&quot; data-og-description=&quot;오늘은 AWS Network Firewall의 개념, 분산형 배포모델에 이어서 중앙집중형 배포모델에 대해 정리해보겠다. 이전 포스팅을 안보셨다면 먼저 보고오기 고고 minjoos.tistory.com/9 [AWS] AWS Network Firewall이란..&quot; data-og-host=&quot;minjoos.tistory.com&quot; data-og-source-url=&quot;https://minjoos.tistory.com/12&quot; data-og-url=&quot;https://minjoos.tistory.com/12&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bzxkip/hyJgpbg4uG/ktWit6OqYN0EfXLBEoYjdK/img.png?width=800&amp;amp;height=616&amp;amp;face=0_0_800_616,https://scrap.kakaocdn.net/dn/e2hf9/hyJgseOOeD/LM1y88KF7f2w7NQbkdtZO0/img.png?width=800&amp;amp;height=616&amp;amp;face=0_0_800_616,https://scrap.kakaocdn.net/dn/cfUiAk/hyJgqVAjfq/El4gdKt2akdHGN25yKur1K/img.png?width=909&amp;amp;height=701&amp;amp;face=0_0_909_701&quot;&gt;&lt;a href=&quot;https://minjoos.tistory.com/12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minjoos.tistory.com/12&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bzxkip/hyJgpbg4uG/ktWit6OqYN0EfXLBEoYjdK/img.png?width=800&amp;amp;height=616&amp;amp;face=0_0_800_616,https://scrap.kakaocdn.net/dn/e2hf9/hyJgseOOeD/LM1y88KF7f2w7NQbkdtZO0/img.png?width=800&amp;amp;height=616&amp;amp;face=0_0_800_616,https://scrap.kakaocdn.net/dn/cfUiAk/hyJgqVAjfq/El4gdKt2akdHGN25yKur1K/img.png?width=909&amp;amp;height=701&amp;amp;face=0_0_909_701');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[AWS] AWS Network Firewall이란? - (2.2) 중앙집중형 배포모델&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;오늘은 AWS Network Firewall의 개념, 분산형 배포모델에 이어서 중앙집중형 배포모델에 대해 정리해보겠다. 이전 포스팅을 안보셨다면 먼저 보고오기 고고 minjoos.tistory.com/9 [AWS] AWS Network Firewall이란..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;minjoos.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결합형은 이름에서 유추할 수 있듯이 분산형과 중앙집중형을 적절히 섞은 모델이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기억을 더듬어보자.&lt;/p&gt;
&lt;p&gt;분산형은 필요한 각 VPC에 네트워크 방화벽을 배포한 구조였고&lt;/p&gt;
&lt;p&gt;중앙집중형은 중앙의 Inspection VPC에 네트워크 방화벽을 배포한 구조였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;즉 이 두 모델을 적절히 섞었다는 말은 &lt;br /&gt;&lt;b&gt;중앙 Inspection VPC도 존재하고, 필요한 각 VPC에도 방화벽을 배포할 수 있다&lt;/b&gt;는 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 두가지 유형을 살펴보며 더 자세히 이해해보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0vg3o/btqW8HdaOcS/zXByeGNyYiqkVyPuduTGE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0vg3o/btqW8HdaOcS/zXByeGNyYiqkVyPuduTGE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0vg3o/btqW8HdaOcS/zXByeGNyYiqkVyPuduTGE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0vg3o%2FbtqW8HdaOcS%2FzXByeGNyYiqkVyPuduTGE0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 그림을 보면 우측 상단에 &lt;b&gt;Inspection VPC&lt;/b&gt;가 있고, Spoke VPC B에는 &lt;b&gt;자체적인 Firewall endpoint&lt;/b&gt;가 존재한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자체적인 VPC가 없는 경우(중앙집중형, 위 그림에서는 Spoke VPC A의 경우)에는&lt;/p&gt;
&lt;p&gt;외부 인터넷과 송수신하기 위해서는 Inspection VPC를 거쳐야했다.&lt;/p&gt;
&lt;p&gt;하지만 Spoke VPC B의 경우에는 자체적인 인터넷 게이트웨이와 Firewall endpoint가 존재하기 때문에&lt;/p&gt;
&lt;p&gt;트래픽은 추가적인 구성 없이도 바로 &lt;span style=&quot;color: #333333;&quot;&gt;내부 인스턴스로 들어올 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UWtj8/btqW4gGYgR2/gK89EpjOpoefZqtvKs6ZBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UWtj8/btqW4gGYgR2/gK89EpjOpoefZqtvKs6ZBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UWtj8/btqW4gGYgR2/gK89EpjOpoefZqtvKs6ZBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUWtj8%2FbtqW4gGYgR2%2FgK89EpjOpoefZqtvKs6ZBK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;1번 그림에서 무엇인가 추가되었다.&lt;/p&gt;
&lt;p&gt;추가된 것은 무엇일까? &lt;s&gt;(틀린그림 찾기 수준)&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;바로 Central Egress VPC에 자체적인 Firewall endpoint가 배포된 것이다.&lt;/p&gt;
&lt;p&gt;장점이 무엇인가?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;원래 vpc와 인터넷 사이의 송수신을 하기 위해서는 Inspection VPC의 네트워크 방화벽을 거치는 별도의 트래픽이 필요했다. 하지만 Central Egress VPC에 전용 Firewall endpoint를 구성함으로써&lt;/p&gt;
&lt;p&gt;트래픽이 Inspection VPC를 거치지 않고 Spoke VPC A에서 Central Egress VPC로 직접 이동하므로&lt;/p&gt;
&lt;p&gt;데이터 처리 비용을 절감할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결합형은 이렇듯&amp;nbsp;&lt;/p&gt;
&lt;p&gt;중앙집중형의 Inspection VPC와각각의 VPC에 필요시 네트워크 방화벽을 배포할 수 있는 분산형의 성질을 모두 갖고있는 모델이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서는 두 개의 유형밖에 살펴보지 않았지만,&lt;/p&gt;
&lt;p&gt;어느 VPC에 얼마만큼의 방화벽 엔드포인트를 배포하느냐에 따라 그 종류는 무궁무진할 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 여기서 배포 모델 설명은 마치겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음엔 실제로 방화벽 환경 구성 + 필터링 테스트로 돌아옵니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;안뇽&lt;/p&gt;</description>
      <category>AWS</category>
      <category>AWS</category>
      <category>Network firewall</category>
      <category>VPC</category>
      <category>네트워크</category>
      <category>네트워크 방화벽</category>
      <category>네트워크 보안</category>
      <category>방화벽</category>
      <category>보안</category>
      <category>클라우드</category>
      <category>클라우드 보안</category>
      <author>mjoooo</author>
      <guid isPermaLink="true">https://minjoos.tistory.com/13</guid>
      <comments>https://minjoos.tistory.com/13#entry13comment</comments>
      <pubDate>Mon, 15 Feb 2021 18:14:15 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] AWS Network Firewall이란? - (2.2) 중앙집중형 배포모델</title>
      <link>https://minjoos.tistory.com/12</link>
      <description>&lt;p&gt;오늘은 AWS Network Firewall의 개념, 분산형 배포모델에 이어서&lt;br /&gt;중앙집중형 배포모델에 대해 정리해보겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이전 포스팅을 안보셨다면 먼저 보고오기 고고&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://minjoos.tistory.com/9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;minjoos.tistory.com/9&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1611207079422&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[AWS] AWS Network Firewall이란? - (1) 개념&quot; data-og-description=&quot;2020년 11월, AWS Network Firewall 서비스가 출시되었다. 아직 출시된지 얼마 되지 않은 서비스라, 사용할 수 있는 리전은 몇 되지 않지만 (미국 동부(버지니아 북부), 미국 서부(오레곤) 및 유럽(아일랜&quot; data-og-host=&quot;minjoos.tistory.com&quot; data-og-source-url=&quot;https://minjoos.tistory.com/9&quot; data-og-url=&quot;https://minjoos.tistory.com/9&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bLX2Dh/hyIZWN6Gsx/cKGOYE35BjcnI7Pa8drub1/img.png?width=488&amp;amp;height=524&amp;amp;face=0_0_488_524,https://scrap.kakaocdn.net/dn/vvS0m/hyI1fyuNMU/PzoV8fmnGqapfpLxgNfNiK/img.png?width=488&amp;amp;height=524&amp;amp;face=0_0_488_524,https://scrap.kakaocdn.net/dn/qaV2O/hyI1rsapFZ/lgVkAY0Eg9ismcGqUNVy5k/img.png?width=600&amp;amp;height=481&amp;amp;face=0_0_600_481&quot;&gt;&lt;a href=&quot;https://minjoos.tistory.com/9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minjoos.tistory.com/9&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bLX2Dh/hyIZWN6Gsx/cKGOYE35BjcnI7Pa8drub1/img.png?width=488&amp;amp;height=524&amp;amp;face=0_0_488_524,https://scrap.kakaocdn.net/dn/vvS0m/hyI1fyuNMU/PzoV8fmnGqapfpLxgNfNiK/img.png?width=488&amp;amp;height=524&amp;amp;face=0_0_488_524,https://scrap.kakaocdn.net/dn/qaV2O/hyI1rsapFZ/lgVkAY0Eg9ismcGqUNVy5k/img.png?width=600&amp;amp;height=481&amp;amp;face=0_0_600_481');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[AWS] AWS Network Firewall이란? - (1) 개념&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;2020년 11월, AWS Network Firewall 서비스가 출시되었다. 아직 출시된지 얼마 되지 않은 서비스라, 사용할 수 있는 리전은 몇 되지 않지만 (미국 동부(버지니아 북부), 미국 서부(오레곤) 및 유럽(아일랜&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;minjoos.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://minjoos.tistory.com/10?category=1179252&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;minjoos.tistory.com/10&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1611207101325&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[AWS] AWS Network Firewall이란? - (2.1) 분산형 배포모델&quot; data-og-description=&quot;지난번에는 AWS Network Firewall의 개념에 대해 알아보았다. 지난번 포스팅을 안보았다면 or 개념을 잘 모르겠다면 이해를 위해 보고오자! https://minjoos.tistory.com/9 [AWS] AWS Network Firewall이란? - (1)..&quot; data-og-host=&quot;minjoos.tistory.com&quot; data-og-source-url=&quot;https://minjoos.tistory.com/10?category=1179252&quot; data-og-url=&quot;https://minjoos.tistory.com/10&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/HPclF/hyI1rlo0UH/A8G6lD0ssB2eMAOy95Er11/img.png?width=911&amp;amp;height=727&amp;amp;face=0_0_911_727&quot;&gt;&lt;a href=&quot;https://minjoos.tistory.com/10?category=1179252&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minjoos.tistory.com/10?category=1179252&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HPclF/hyI1rlo0UH/A8G6lD0ssB2eMAOy95Er11/img.png?width=911&amp;amp;height=727&amp;amp;face=0_0_911_727');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[AWS] AWS Network Firewall이란? - (2.1) 분산형 배포모델&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;지난번에는 AWS Network Firewall의 개념에 대해 알아보았다. 지난번 포스팅을 안보았다면 or 개념을 잘 모르겠다면 이해를 위해 보고오자! https://minjoos.tistory.com/9 [AWS] AWS Network Firewall이란? - (1)..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;minjoos.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;b&gt;Network Firewall의 배포 모델&lt;/b&gt;은 크게 세 가지로 나눌 수 있다.&lt;/p&gt;
&lt;p&gt;1) 분산형&lt;/p&gt;
&lt;p&gt;2) 중앙 집중형&lt;/p&gt;
&lt;p&gt;3) 결합형&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 이 중에 2) 중앙집중형!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2) 중앙집중형&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;중앙집중형 배포 모델은 말 그대로 &lt;u&gt;&lt;b&gt;검사를 수행하는 firewall이 한 곳(중앙)에 있다&lt;/b&gt;&lt;/u&gt;는 의미라고 생각하면 된다.&lt;/p&gt;
&lt;p&gt;따라서 검사를 수행하기 위한 검사 전용 VPC가 따로 존재한다.&lt;/p&gt;
&lt;p&gt;그 VPC를&amp;nbsp;&lt;u&gt;&lt;b&gt;Inspection VPC&lt;/b&gt;&lt;/u&gt;라고 부른다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Inspection VPC&lt;/b&gt;&lt;/span&gt;는 &lt;u&gt;&lt;b&gt;Firewall endpoint가 있는 검사 전용 VPC&lt;/b&gt;&lt;/u&gt;이다.&lt;/p&gt;
&lt;p&gt;Inpection VPC는 Transit Gateway Subnet과 Firewall Subnet으로 구성되는데,&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Transit Gateway&lt;/b&gt;&lt;/span&gt; Subnet은 외부에서 Inpection VPC로 들어오는 트래픽을 Firewall endpoint로 연결해주는 역할을 한다.&lt;/p&gt;
&lt;p&gt;또한 Firewall에서 검사를 받고 나가는 트래픽이 Transit Gateway로 다시 전송되어 외부와 연결된다.&lt;/p&gt;
&lt;p&gt;즉 Transit Gateway는 &lt;u&gt;&lt;b&gt;네트워크 허브 역할&lt;/b&gt;&lt;/u&gt;을 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;573&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dauaLc/btqT8I7i3Fh/A7FGMh4Qphzx4RWH220ULk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dauaLc/btqT8I7i3Fh/A7FGMh4Qphzx4RWH220ULk/img.png&quot; data-alt=&quot;중앙집중형 배포 모델의 Inspection VPC&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dauaLc/btqT8I7i3Fh/A7FGMh4Qphzx4RWH220ULk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdauaLc%2FbtqT8I7i3Fh%2FA7FGMh4Qphzx4RWH220ULk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;573&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;중앙집중형 배포 모델의 Inspection VPC&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 그림의 트래픽 흐름을 살펴보자.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;1. Transit Gateway로 트래픽이 들어옴&lt;/span&gt;&lt;br /&gt;&lt;span&gt;2. Transit Gateway ENI(Elastic Network Interface)가 Firewall endpoint에 트래픽 전송&lt;/span&gt;&lt;br /&gt;&lt;span&gt;3. Firewall endpoint는 AWS Network Firewall에 트래픽 전송&lt;/span&gt;&lt;br /&gt;&lt;span&gt;4. AWS Network Firewall에서 필터링 된 트래픽을 다시 Firewall Endpoint로 전송&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;5. Firewall Endpoint에서 Transit Gateway로 트래픽 전송&lt;/span&gt;&lt;br /&gt;&lt;span&gt;6. 외부로 전송&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;즉, &lt;u&gt;&lt;b&gt;모든 트래픽은 Inspection VPC를 거치며, Inspection VPC로 들어와 검사를 받고 나가는 흐름&lt;/b&gt;&lt;/u&gt;을 가지고 있으며,&lt;br /&gt;Transit Gateway는 그 흐름을 연결해주는 네트워크 허브 역할을 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 중앙집중형 배포 모델을 통해 어떠한 종류의 트래픽을 보호할 수 있는지,&lt;/p&gt;
&lt;p&gt;그 유형을 살펴보겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. East-West Traffic Inspection Model (VPC에서 VPC로의 트래픽)&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVqf8L/btqUcA13GHl/4Rkl2A90cKxaFM1X7rqAOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVqf8L/btqUcA13GHl/4Rkl2A90cKxaFM1X7rqAOK/img.png&quot; data-alt=&quot;Spoke VPC A에서 Spoke VPC B로 가는 트래픽 흐름&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVqf8L/btqUcA13GHl/4Rkl2A90cKxaFM1X7rqAOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVqf8L%2FbtqUcA13GHl%2F4Rkl2A90cKxaFM1X7rqAOK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Spoke VPC A에서 Spoke VPC B로 가는 트래픽 흐름&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 그림은 Spoke VPC A에서 Spoke VPC B로 가는 트래픽이 어떠한 순서로 네트워크 방화벽을 거치는지를 나타낸 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1. Spoke VPC A에서 나온 트래픽은&amp;nbsp;AWS Traffic Gateway의 Spoke Inspection Route Table을 통해 Inspection VPC로 전송된다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;2. Inspection VPC의 Transit Gateway ENI가 트래픽을 Firewall endpoint로 전송한다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;3. Network Firewall의 필터링을 거친 트래픽은 AWS Traffic Gateway의 또다른 라우팅 테이블인 Firewall Route Table로 전송된다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;4. Firewall Route Table을 통해 Spoke VPC B로 전송한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;따라서 이러한 형태의 중앙집중형 모델을 통해,&lt;br /&gt;동일하거나 다른 AWS 계정의 &lt;u&gt;&lt;b&gt;VPC에서 VPC로의 트래픽&lt;/b&gt;&lt;/u&gt;을 보호할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;2. North-South: 중앙 집중식 온프레미스 송신 및 수신&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cia9wt/btqUf1kcUYD/cDtFPkeaLasPfpjKDapak1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cia9wt/btqUf1kcUYD/cDtFPkeaLasPfpjKDapak1/img.png&quot; data-alt=&quot;Spoke VPC A에서 온프레미스로 가는 트래픽 흐름&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cia9wt/btqUf1kcUYD/cDtFPkeaLasPfpjKDapak1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcia9wt%2FbtqUf1kcUYD%2FcDtFPkeaLasPfpjKDapak1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Spoke VPC A에서 온프레미스로 가는 트래픽 흐름&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 그림은 Spoke VPC A에서 온프레미스 네트워크로 가는 트래픽이 어떠한 순서로 네트워크 방화벽을 거치는지를 나타낸 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;1. Spoke VPC A로부터 나온 트래픽이 AWS Transit Gateway의 Spoke Inspection Route Table로 전송된다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;2. Spoke Inspection Route Table을 통해 Inspection VPC로 전송된 트래픽은 Transit Gateway ENI를 통해 Firewall endpoint로 전송된다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;3. Firewall endpoint에서 Network Firewall을 통해 필터링 된 트래픽은 다시 AWS Transit Gateway로 전송된다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;4. 트래픽은 AWS Direct Connect 또는 AWS Site-to-Site VPN을 통해 온프레미스로 전송된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(AWS Transit Gateway는 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Direct Connect 또는 Site-to-Site VPN을 통해 온프레미스에 연결할 수 있다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;따라서 이러한 구조의 모델을 사용하면 &lt;u&gt;&lt;b&gt;VPC에서 온프레미스로 전송되는 트래픽&lt;/b&gt;&lt;/u&gt;도&lt;br /&gt;네트워크 방화벽을 통해 보호할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3. North-South: 중앙 집중식 인터넷 송신&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7YW7N/btqUkZlTADd/8aQtTKzzkTMBsQQ0RsQP81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7YW7N/btqUkZlTADd/8aQtTKzzkTMBsQQ0RsQP81/img.png&quot; data-alt=&quot;Spoke VPC A에서 Internet으로 송신되는 트래픽 흐름&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7YW7N/btqUkZlTADd/8aQtTKzzkTMBsQQ0RsQP81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7YW7N%2FbtqUkZlTADd%2F8aQtTKzzkTMBsQQ0RsQP81%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Spoke VPC A에서 Internet으로 송신되는 트래픽 흐름&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;아. 그림이 한층 복잡해졌다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;하지만 자세히 살펴보면 이전 그림에서 우측 하단의 Central Egress VPC하나가 추가로 생긴 것 뿐이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Private 영역에서 Public 영역과 통신하려면 NAT 게이트웨이가 필요하다.&lt;/p&gt;
&lt;p&gt;NAT 게이트웨이를 사용하면 Private Subnet의 워크로드를 활성화하여 Public IP 공간의 인터넷 또는 AWS 서비스에 연결할 수 있게 된다.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Central Egress VPC&lt;/b&gt;&lt;/u&gt;&lt;span style=&quot;color: #333333;&quot;&gt;는 Transit Gateway Subnet과 Public Subnet(인스턴스, NAT 게이트웨이 존재)로 이루어져 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;따라서 &lt;u&gt;&lt;b&gt;인터넷으로 송신위해 필요한 구성 요소를 포함한 VPC&lt;/b&gt;&lt;/u&gt;인 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 그림의 트래픽 흐름을 살펴보자.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1. Spoke VPC A에서 AWS Transit Gateway로 트래픽이 전송됨.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;2. 처리를 위해 Inspection VPC로 전달된 트래픽은 Transit Gateway ENI를 통해 Firewall endpoint로 전송됨.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;3. Firewall endpoint에서 Network Firewall을 통해 필터링된 트래픽은 다시 AWS Transit Gateway로 전송됨.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;4. Transit Gateway의 Firewall Route Table을 통해 Central Egress VPC로 전송되고, 인터넷 게이트웨이에 액세스할 수 있게 됨.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;즉, 이러한 구조의 배포 모델을 사용하면&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;VPC에서 인터넷으로의 트래픽&lt;/b&gt;&lt;/u&gt;도 보호할 수 있다는 점을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. North-South: 중앙 집중식 인터넷 수신&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZL0gt/btqUmaAJQEZ/4QKvrCShLIMrWckZQGbSBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZL0gt/btqUmaAJQEZ/4QKvrCShLIMrWckZQGbSBk/img.png&quot; data-alt=&quot;인터넷에서 Spoke VPC A로의 트래픽 흐름&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZL0gt/btqUmaAJQEZ/4QKvrCShLIMrWckZQGbSBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZL0gt%2FbtqUmaAJQEZ%2F4QKvrCShLIMrWckZQGbSBk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인터넷에서 Spoke VPC A로의 트래픽 흐름&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자, 이번엔 반대로 Public 인터넷에서 private한 Spoke VPC A로의 트래픽이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이번에 새로 추가된 것은 중앙 하단의 Central Ingress VPC이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;u&gt;&lt;b&gt;Central Ingress VPC&lt;/b&gt;&lt;/u&gt;는 외부 인터넷에서 들어오는 트래픽을 ALB(Applicatio Load Balancer)로 적절히 분배하고,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Transit Gateway로 트래픽을 보내는 역할을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;따라서 Central Egress VPC가 인터넷으로 송신하기 위한 VPC였다면,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Central Ingress VPC는 &lt;u&gt;&lt;b&gt;인터넷에서 수신되는 트래픽을 위한 VPC&lt;/b&gt;&lt;/u&gt;인 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;1. 외부의 인터넷으로부터 Central Ingress VPC의 Internet Gateway로 트래픽이 생성됨.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;2. 들어온 트래픽은 ALB(Application Load Balancer)로 전달됨.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;3. Transit Gateway ENI를 거쳐 AWS Transit Gateway로 전송됨.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;4. AWS Transit Gateway는 검사를 위해 Inspection VPC로 전송됨.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;5. Firewall endpoint에서 네트워크 방화벽을 통해 필터링된 트래픽은 다시 AWS Transit Gateway로 전송됨.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;6. 라우팅 테이블을 통해 트래픽이 목적지 워크로드에 전달됨.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;따라서 &lt;u&gt;&lt;b&gt;인터넷에서 워크로드 VPC로 수신되는 트래픽&lt;/b&gt;&lt;/u&gt;도 보호할 수 있다는 점을 알 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것저것 유형도 많고 복잡한 그림도 많았다.&lt;/p&gt;
&lt;p&gt;하지만 결론은 이거다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;1. 중앙집중형 모델은 검사 전용 Inspection VPC가 있는 모델이다. 모든 트래픽이 Inpsection VPC에 있는 Network Firewall을 거치면서 검사된다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;2. 중앙집중형 모델을 어떻게 구성하느냐에 따라 검사할 수 있는 트래픽의 종류가 다양하다. (VPC-VPC, VPC-온프레미스, VPC-인터넷, 인터넷-VPC ...)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음에는 분산형 모델과 중앙집중형 모델이 합쳐진&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;결합형 배포 모델&lt;/u&gt;&lt;/b&gt;에 대해 포스팅하겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;끝!&lt;/p&gt;</description>
      <category>AWS</category>
      <category>acl</category>
      <category>AWS</category>
      <category>Firewall</category>
      <category>Network firewall</category>
      <category>VPC</category>
      <category>네트워크 방화벽</category>
      <category>방화벽</category>
      <category>보안</category>
      <category>온프레미스</category>
      <category>트래픽</category>
      <author>mjoooo</author>
      <guid isPermaLink="true">https://minjoos.tistory.com/12</guid>
      <comments>https://minjoos.tistory.com/12#entry12comment</comments>
      <pubDate>Thu, 21 Jan 2021 15:25:01 +0900</pubDate>
    </item>
    <item>
      <title>[TrendMicro] Apex One 백신 리뷰</title>
      <link>https://minjoos.tistory.com/11</link>
      <description>&lt;p&gt;백신은 개인용 백신만 써보고(ex. V3 ..)&lt;/p&gt;
&lt;p&gt;백신을 써보더라도 그냥 노트북에 깔아놓고 평소에는 신경도 안썼다가&lt;/p&gt;
&lt;p&gt;이번에 기업용 백신을 리뷰해볼 기회가 있어서 이렇게 블로그에 정리해보려고 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에 리뷰할 기업용 백신은 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;u&gt;&lt;b&gt;트렌드마이크로 사의 Apex one&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;무료 SaaS 평가판은 아래 링크에서 다운받을 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.trendmicro.com/ko_kr/business/products/user-protection/sps/endpoint.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.trendmicro.com/ko_kr/business/products/user-protection/sps/endpoint.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1611035124527&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apex One Endpoint Security Solution (OfficeScan, Redefined) | Trend Micro&quot; data-og-description=&quot;하이파이 (high fidelity) 머신러닝 및 최신 랜섬웨어 보호 기능 등 광범위한 성능으로 엔드포인트를 보호합니다.&quot; data-og-host=&quot;www.trendmicro.com&quot; data-og-source-url=&quot;https://www.trendmicro.com/ko_kr/business/products/user-protection/sps/endpoint.html&quot; data-og-url=&quot;https://www.trendmicro.com/ko_kr/business/products/user-protection/sps/endpoint.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ZNQAF/hyIZ6VOPZJ/9JiA7pK2XwwPsH5fZkjc01/img.png?width=1440&amp;amp;height=826&amp;amp;face=0_0_1440_826&quot;&gt;&lt;a href=&quot;https://www.trendmicro.com/ko_kr/business/products/user-protection/sps/endpoint.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.trendmicro.com/ko_kr/business/products/user-protection/sps/endpoint.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ZNQAF/hyIZ6VOPZJ/9JiA7pK2XwwPsH5fZkjc01/img.png?width=1440&amp;amp;height=826&amp;amp;face=0_0_1440_826');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Apex One Endpoint Security Solution (OfficeScan, Redefined) | Trend Micro&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;하이파이 (high fidelity) 머신러닝 및 최신 랜섬웨어 보호 기능 등 광범위한 성능으로 엔드포인트를 보호합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.trendmicro.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;나는 위 링크에서 무료 평가판을 신청해 사용하였는데, 30일동안 사용 가능하다고 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;무료 평가판 신청을 마치면 메일로 관리서버(웹 콘솔) 링크를 보내준다.&lt;/p&gt;
&lt;p&gt;링크를 타고 들어가 생성한 아이디와 비밀번호로 로그인하고 &lt;br /&gt;Google Authenticator로 2차 인증까지 설정해주면 준비 완료!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DpWjm/btqT01EYl9G/4j9HLNzSMw8hCnIQjXcbz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DpWjm/btqT01EYl9G/4j9HLNzSMw8hCnIQjXcbz0/img.png&quot; data-alt=&quot;관리서버 첫 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DpWjm/btqT01EYl9G/4j9HLNzSMw8hCnIQjXcbz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDpWjm%2FbtqT01EYl9G%2F4j9HLNzSMw8hCnIQjXcbz0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;관리서버 첫 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;관리서버&lt;/b&gt;&lt;/u&gt;로 로그인이 되면 맨 처음 위와 같은 화면이 뜬다.&lt;/p&gt;
&lt;p&gt;대충 살펴보면, 우리가 보호하고자 하는 자산에 어떤 위협이 있었는지(ex. 랜섬웨어, APT공격 등) &lt;br /&gt;보여주는 웹 콘솔인 것 같은 느낌이 든다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결론적으로 관리서버는 &lt;u&gt;&lt;b&gt;보호되는 모든 엔드포인트 및 사용자를 관리하고,&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;모니터링하고, 어떤 보안 이슈가 있었는지를 보여주는 Apex 중앙 서버&lt;/b&gt;&lt;/u&gt;이다.&lt;/p&gt;
&lt;p&gt;위와 같이 웹 콘솔 형태로 되어 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그러면 이쯤해서 의문이 들 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;그러면 이런 서버는 관리 및 결과 확인에 사용되는거고.. 실제로 위협 탐지는 누가하지?&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;관리서버에서 &lt;u&gt;&lt;b&gt;클라이언트 프로그램(agent)&lt;/b&gt;&lt;/u&gt;를 다운받아야 한다.&lt;/p&gt;
&lt;p&gt;클라이언트 프로그램은 위협 탐지, security agent 시작 및 종료, 스캔 시작 및 업데이트 완료와 같은 &lt;br /&gt;이벤트정보를 실시간으로 관리 서버로 보낸다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;관리 서버는 그 정보를 보기 좋게 시각화하여 관리자에게 제공하는 것이다.&lt;/p&gt;
&lt;p&gt;관리자는 관리 서버에서 agent 설정을 제어하고 사용자에게 특정 권한을 부여하는 등의 작업을 할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 관리 서버와 클라이언트 프로그램의 각 역할에 대해 이해가 좀 되었는가?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;agent 다운로드는 관리 서버에서 다운받을 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MLfrF/btqTV9RnTt7/DK6b4ovMDoX5tctZjIFUQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MLfrF/btqTV9RnTt7/DK6b4ovMDoX5tctZjIFUQK/img.png&quot; data-alt=&quot;Security Agent 다운로드 경로&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MLfrF/btqTV9RnTt7/DK6b4ovMDoX5tctZjIFUQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMLfrF%2FbtqTV9RnTt7%2FDK6b4ovMDoX5tctZjIFUQK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Security Agent 다운로드 경로&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 이제 클라이언트, 관리 서버를 차례로 살펴보며 어떤 기능이 있는지 살펴보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) 클라이언트 (Apex One Security Agent)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;다운로드 받으면, 아래 사진과 같이 에이전트 프로그램이 백그라운드로 실행된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;277&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nsalJ/btqT17dUvKN/4Qa4uEXDYSMVCa1gtBpfx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nsalJ/btqT17dUvKN/4Qa4uEXDYSMVCa1gtBpfx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nsalJ/btqT17dUvKN/4Qa4uEXDYSMVCa1gtBpfx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnsalJ%2FbtqT17dUvKN%2F4Qa4uEXDYSMVCa1gtBpfx0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;277&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;264&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d7qEzv/btqT6Hsddyr/9j1iPfpoJCN7BfdgPZLLSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d7qEzv/btqT6Hsddyr/9j1iPfpoJCN7BfdgPZLLSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7qEzv/btqT6Hsddyr/9j1iPfpoJCN7BfdgPZLLSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd7qEzv%2FbtqT6Hsddyr%2F9j1iPfpoJCN7BfdgPZLLSk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;264&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;해당 아이콘을 우클릭하여 &quot;Security Agent 콘솔 열기&quot;를 클릭하면 agent 프로그램을 열 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;387&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pBFnj/btqT8IRHJC3/ou9dDUB04vDdECaNSCPQy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pBFnj/btqT8IRHJC3/ou9dDUB04vDdECaNSCPQy0/img.png&quot; data-alt=&quot;Security Agent 메인 콘솔&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pBFnj/btqT8IRHJC3/ou9dDUB04vDdECaNSCPQy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpBFnj%2FbtqT8IRHJC3%2Fou9dDUB04vDdECaNSCPQy0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;387&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Security Agent 메인 콘솔&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;메인 콘솔은 이렇게 생겼다.&lt;/p&gt;
&lt;p&gt;원래 클라이언트가 수행하고 있는 탐지 결과를 확인하는 것은 관리 서버에서 훨씬 자세하게 볼 수 있지만&lt;/p&gt;
&lt;p&gt;이렇게 agent 콘솔을 열어 간단하게 확인할 수도 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;agent 메인 콘솔은 지금 보호가 잘 이루어지고 있는지, 소프트웨어가 최신인지, 탐지된 바이러스/악성 프로그램이 없는지 등등을 한눈에 쉽게 확인할 수 있도록 되어있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;메인 콘솔의&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzVwQL/btqT0sQn6JB/EqvDpasTs8Ry99ECE7uLe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzVwQL/btqT0sQn6JB/EqvDpasTs8Ry99ECE7uLe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzVwQL/btqT0sQn6JB/EqvDpasTs8Ry99ECE7uLe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzVwQL%2FbtqT0sQn6JB%2FEqvDpasTs8Ry99ECE7uLe0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이런 버튼을 클릭하면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;로그를 확인&lt;/b&gt;&lt;/span&gt;할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;725&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdfYck/btqT0utWecu/2MXf16PPfbVRrfkIdXKbv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdfYck/btqT0utWecu/2MXf16PPfbVRrfkIdXKbv1/img.png&quot; data-alt=&quot;로그 데이터 확인 가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdfYck/btqT0utWecu/2MXf16PPfbVRrfkIdXKbv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdfYck%2FbtqT0utWecu%2F2MXf16PPfbVRrfkIdXKbv1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;725&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그 데이터 확인 가능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;날짜 범위와 로그 유형을 선택하면 그에 해당하는 결과를 볼 수 있다.&lt;/p&gt;
&lt;p&gt;로그 유형은 Virus/Malware, Firewall, Suspicious Connection, Data Loss Prevention 등 아주 다양하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;메인 콘솔의&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;100&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDHW8W/btqT6G1aIIG/CiUUaJqf76YRL5qqaztQQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDHW8W/btqT6G1aIIG/CiUUaJqf76YRL5qqaztQQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDHW8W/btqT6G1aIIG/CiUUaJqf76YRL5qqaztQQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDHW8W%2FbtqT6G1aIIG%2FCiUUaJqf76YRL5qqaztQQk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;100&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;버튼을 누르면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;수동 스캔&lt;/b&gt;&lt;/span&gt;이 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;389&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPXQ2B/btqT6Ik7JQj/xzucHXwlZTAGMfDhbs6KtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPXQ2B/btqT6Ik7JQj/xzucHXwlZTAGMfDhbs6KtK/img.png&quot; data-alt=&quot;수동 스캔할 대상 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPXQ2B/btqT6Ik7JQj/xzucHXwlZTAGMfDhbs6KtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPXQ2B%2FbtqT6Ik7JQj%2FxzucHXwlZTAGMfDhbs6KtK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;389&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;수동 스캔할 대상 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 그림과 같이 스캔할 대상을 선택하여 수동으로 스캔할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;287&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UsVWV/btqUejRTtjb/UKbmvvftxdwJb9AAPPD7yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UsVWV/btqUejRTtjb/UKbmvvftxdwJb9AAPPD7yk/img.png&quot; data-alt=&quot;스캔 중인 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UsVWV/btqUejRTtjb/UKbmvvftxdwJb9AAPPD7yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUsVWV%2FbtqUejRTtjb%2FUKbmvvftxdwJb9AAPPD7yk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;287&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스캔 중인 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;289&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DscNc/btqT0tCu59s/AamVZKszh1kzxhfOajR7Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DscNc/btqT0tCu59s/AamVZKszh1kzxhfOajR7Ek/img.png&quot; data-alt=&quot;스캔 완료 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DscNc/btqT0tCu59s/AamVZKszh1kzxhfOajR7Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDscNc%2FbtqT0tCu59s%2FAamVZKszh1kzxhfOajR7Ek%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;289&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스캔 완료 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스캔 중에는 progress bar와 함께 스캔된 파일과 탐지된 위협을 볼 수 있으며,&lt;/p&gt;
&lt;p&gt;스캔이 끝나면 스캔 결과가 뜨고 관리자는 필요한 조취를 취할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2) 관리 서버 (웹 콘솔)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;그럼 이제 관리 서버에 대해 알아보자!&lt;/p&gt;
&lt;p&gt;관리 서버에서는 &lt;u&gt;&lt;b&gt;탐지된 위협에 대한 결과&lt;/b&gt;&lt;/u&gt;를 볼 수 있고 클라이언트에 대한 &lt;u&gt;&lt;b&gt;세부 설정&lt;/b&gt;&lt;/u&gt;을 할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Dashboard&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAa9AS/btqT3sCSYcq/opUKObKWZfHrk599IYhGTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAa9AS/btqT3sCSYcq/opUKObKWZfHrk599IYhGTK/img.png&quot; data-alt=&quot;Dashboard중, Summary 탭의 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAa9AS/btqT3sCSYcq/opUKObKWZfHrk599IYhGTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAa9AS%2FbtqT3sCSYcq%2FopUKObKWZfHrk599IYhGTK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Dashboard중, Summary 탭의 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;관리자는 대시보드를 사용하여 &lt;u&gt;&lt;b&gt;여러 유형의 보안 위협에 대한 정보를 시각적으로 빠르게 확인&lt;/b&gt;&lt;/u&gt;할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;대시보드는 몇 가지 탭과 위젯이 기본적으로 구성되어 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;탭: Summary, Threat investigation, Security Posture, Data Loss Prevention, Compliance, Threat Statistics&lt;/li&gt;
&lt;li&gt;위젯: ex) Summary 탭 - Critical Threats, Ransomware Prevention, ...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;apex one이 좋은 점은, 이 대시보드를 &lt;u&gt;&lt;b&gt;사용자가 커스터마이징하여 새롭게 생성하거나 변경할 수 있다&lt;/b&gt;&lt;/u&gt;는 점이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpqQgE/btqT7VR3Bxu/uDvkJwKCEoq6Kox7lnb6Q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpqQgE/btqT7VR3Bxu/uDvkJwKCEoq6Kox7lnb6Q1/img.png&quot; data-alt=&quot;새롭게 만들어본 minjoo 대시보드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpqQgE/btqT7VR3Bxu/uDvkJwKCEoq6Kox7lnb6Q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpqQgE%2FbtqT7VR3Bxu%2FuDvkJwKCEoq6Kox7lnb6Q1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;새롭게 만들어본 minjoo 대시보드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 사진은 내가 임의로 'minjoo'라는 이름의 새로운 대시보드를 만들어본 것이다.&lt;/p&gt;
&lt;p&gt;탭 구역의 + 모양을 클릭하여 새로운 대시보드를 생성할 수 있고,&lt;/p&gt;
&lt;p&gt;원하는대로 대시보드를 구성할 위젯을 선택할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Detections&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;여기에서는 제품의 &lt;u&gt;&lt;b&gt;로그&lt;/b&gt;&lt;/u&gt;를 확인하고(Logs), 이벤트에 대한 &lt;u&gt;&lt;b&gt;알림&lt;/b&gt;&lt;/u&gt;을 설정하고(Notifications), &lt;br /&gt;수집된 데이터를 사용하여 &lt;u&gt;&lt;b&gt;보고서&lt;/b&gt;&lt;/u&gt;를 만들 수 있다(Reports).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Logs&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;Log Query
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;Apex Central에서 생성한 로그와 관리되는 제품의 로그 데이터를 쿼리한다.&lt;/li&gt;
&lt;li&gt;System Events 종류, 대상, 시간을 설정하여 로그를 검색할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;278&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/80TBz/btqT3sXgj5i/02PLs6tI2V6zxmw5uBRBIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/80TBz/btqT3sXgj5i/02PLs6tI2V6zxmw5uBRBIk/img.png&quot; data-alt=&quot;검색할 로그의 system event 종류 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/80TBz/btqT3sXgj5i/02PLs6tI2V6zxmw5uBRBIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F80TBz%2FbtqT3sXgj5i%2F02PLs6tI2V6zxmw5uBRBIk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;278&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;검색할 로그의 system event 종류 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;267&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpCYHZ/btqT8H0oe8b/LY6adnKWHjgT4KddWEuu1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpCYHZ/btqT8H0oe8b/LY6adnKWHjgT4KddWEuu1K/img.png&quot; data-alt=&quot;로그를 검색할 대상 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpCYHZ/btqT8H0oe8b/LY6adnKWHjgT4KddWEuu1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpCYHZ%2FbtqT8H0oe8b%2FLY6adnKWHjgT4KddWEuu1K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;267&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그를 검색할 대상 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;188&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rZxoG/btqT8HsCcSa/3XKbYLVyMg4WDFmePbZK80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rZxoG/btqT8HsCcSa/3XKbYLVyMg4WDFmePbZK80/img.png&quot; data-alt=&quot;로그를 검색할 시간대 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rZxoG/btqT8HsCcSa/3XKbYLVyMg4WDFmePbZK80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrZxoG%2FbtqT8HsCcSa%2F3XKbYLVyMg4WDFmePbZK80%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;188&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그를 검색할 시간대 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + Log Aggregation Settings에서 로그 수집이 필요하지 않는 제품의 수집을 비활성화 할수도 있으며,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Log Maintenance에서 로그 이름에 따른 로그 양, 오래된 정도 등을 확인하여 한번에 삭제할 수도 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;314&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTnZTJ/btqT0tCzITN/BOPDzKaeWRgRqw0nhKRv61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTnZTJ/btqT0tCzITN/BOPDzKaeWRgRqw0nhKRv61/img.png&quot; data-alt=&quot;Log Aggregation Settings&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTnZTJ/btqT0tCzITN/BOPDzKaeWRgRqw0nhKRv61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTnZTJ%2FbtqT0tCzITN%2FBOPDzKaeWRgRqw0nhKRv61%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;314&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Log Aggregation Settings&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;445&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t9Yft/btqUej5uqIX/D6goMXmBYtW9weayuA5Nv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t9Yft/btqUej5uqIX/D6goMXmBYtW9weayuA5Nv1/img.png&quot; data-alt=&quot;Log Maintenance&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t9Yft/btqUej5uqIX/D6goMXmBYtW9weayuA5Nv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft9Yft%2FbtqUej5uqIX%2FD6goMXmBYtW9weayuA5Nv1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;445&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Log Maintenance&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Notifications&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;다양한 유형의 보안 이벤트에 대해 개인 또는 수신자 그룹에게 알람을 설정할 수 있다.&lt;/li&gt;
&lt;li&gt;이벤트 범주 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;421&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTmQcS/btqT8JjAZao/E7Ay7NKf1DAsNK7lYOkoP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTmQcS/btqT8JjAZao/E7Ay7NKf1DAsNK7lYOkoP0/img.png&quot; data-alt=&quot;알람을 보낼 이벤트 범주 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTmQcS/btqT8JjAZao/E7Ay7NKf1DAsNK7lYOkoP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTmQcS%2FbtqT8JjAZao%2FE7Ay7NKf1DAsNK7lYOkoP0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;421&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;알람을 보낼 이벤트 범주 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&amp;nbsp;Reports&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;여러 제품 콘솔에 로그온하지 않고도 등록된 모든 제품의 데이터를 통합하는 보고서를 생성, 다운로드 및 전송할 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;요청시 일회용 보고서 생성&lt;/li&gt;
&lt;li&gt;사용자가 정의한 일정에 따라 보고서를 자동으로 생성하여 지정된 수신자에게 보내도록 예약 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. Directories&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;여기에서는 &lt;u&gt;&lt;b&gt;사용자 및 엔드포인트&lt;/b&gt;&lt;/u&gt; 정보를 확인하며 &lt;u&gt;&lt;b&gt;그룹 관리&lt;/b&gt;&lt;/u&gt;를 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;182&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhGvbe/btqT7Vq4TDa/9NlBv1vWbjdfqYDqNoTAKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhGvbe/btqT7Vq4TDa/9NlBv1vWbjdfqYDqNoTAKK/img.png&quot; data-alt=&quot;Users/Endpoints&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhGvbe/btqT7Vq4TDa/9NlBv1vWbjdfqYDqNoTAKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhGvbe%2FbtqT7Vq4TDa%2F9NlBv1vWbjdfqYDqNoTAKK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;182&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Users/Endpoints&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;기본적으로 자동으로 분류되어 있고 사용자가 커스텀하여 분류할 수도 있다. (필터, 라벨링 등 활용)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;제품(Products)&lt;/b&gt;&lt;/u&gt;에 대한 분류도 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;등록된 모든 관리 제품 서버에 대한 정보가 표시되며, 제품 설정을 구성하거나 로그 쿼리가 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;267&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUBtY6/btqT8ILMzfi/OrU3WZAjWnKSecpq6pJnQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUBtY6/btqT8ILMzfi/OrU3WZAjWnKSecpq6pJnQk/img.png&quot; data-alt=&quot;Products&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUBtY6/btqT8ILMzfi/OrU3WZAjWnKSecpq6pJnQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUBtY6%2FbtqT8ILMzfi%2FOrU3WZAjWnKSecpq6pJnQk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;267&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Products&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. Policies&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;여기에서는 그룹에 직접 지정할 수 있는 &lt;u&gt;&lt;b&gt;보안 정책을 생성&lt;/b&gt;&lt;/u&gt;할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;672&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQm2xA/btqT6HzQV9m/gndRijIuySeZyv4oKp8W0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQm2xA/btqT6HzQV9m/gndRijIuySeZyv4oKp8W0K/img.png&quot; data-alt=&quot;Create Policy&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQm2xA/btqT6HzQV9m/gndRijIuySeZyv4oKp8W0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQm2xA%2FbtqT6HzQV9m%2FgndRijIuySeZyv4oKp8W0K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;672&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Create Policy&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;정책을 생성할 때 아래와 같은 세부 사항을 지정할 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Anti-malware scans&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Scan Methods, Real-time Scan, Scheduled Scan, Manual Scan, Scan Now) &lt;br /&gt;: 정기 검사 등의 설정 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Advanced Threat Protection&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Behavior Monitoring, Predictive Machine Learning, Web Reputation, Suspicious Connection, Vulnerability Protection, Device Control, Application Control) &lt;br /&gt;: 기능 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Detection &amp;amp; Response&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Endpoint Sensor, Sample Submission)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Exceptions&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Trusted Program List, Spyware/Grayware Approved List)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Agent Configurations&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(Update Agent, Privileges and Other Settings, Additional Service Settings)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3) 결론&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;결론은 간단하게 장점/단점으로 정리해보겠다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;관리 콘솔이 웹으로 되어있어 접근성이 좋음.&lt;/li&gt;
&lt;li&gt;웹 콘솔에 접근할 때 Google Authenticator(2차 인증)를 사용하여 보안성을 높일 수 있음.&lt;/li&gt;
&lt;li&gt;사용자가 원하는 방향으로 커스텀할 수 있는 기능이 세부적으로 구현되어 있어 편리함. (대시보드, 그룹관리 등)&lt;/li&gt;
&lt;li&gt;대시보드에서 확인하고 싶은 부분을 클릭하면 바로 로그를 볼 수 있게 넘어가는 등 직관적으로 사용할 수 있는 UI를 갖추고 있음.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;모든 것이 영어로 쓰여있다...&lt;/li&gt;
&lt;li&gt;한번 로그인하면 관리 서버의 모든 것을 확인할 수 있었다. 서로 다른 관리자에 따른 접근 제어가 안되는 것 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;뭐 .. 대충 내가 느낀점은 이렇다.&lt;/p&gt;
&lt;p&gt;사실 백신을 이렇게 면밀히 살펴보고 리뷰해본적은 처음이라&lt;/p&gt;
&lt;p&gt;어떠한 기능이 다른 백신에도 있는 기능인지, 차별화된 기능인지 객관적인 판단을 불가능하여서&lt;/p&gt;
&lt;p&gt;기능적인 부분보다는 사용자가 실제로 느낄 수 있는 최소한의 장단점만 추려보았다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘의 리뷰 끝-!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Security</category>
      <category>apex central</category>
      <category>apex one</category>
      <category>Security</category>
      <category>trendmicro</category>
      <category>Vaccine</category>
      <category>기업용백신</category>
      <category>백신</category>
      <category>보안</category>
      <category>위협탐지</category>
      <category>트렌드마이크로</category>
      <author>mjoooo</author>
      <guid isPermaLink="true">https://minjoos.tistory.com/11</guid>
      <comments>https://minjoos.tistory.com/11#entry11comment</comments>
      <pubDate>Wed, 20 Jan 2021 14:03:30 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] AWS Network Firewall이란? - (2.1) 분산형 배포모델</title>
      <link>https://minjoos.tistory.com/10</link>
      <description>&lt;p&gt;지난번에는 &lt;b&gt;AWS Network Firewall의 개념&lt;/b&gt;에 대해 알아보았다.&lt;/p&gt;
&lt;p&gt;지난번 포스팅을 안보았다면 or 개념을 잘 모르겠다면 이해를 위해 보고오자!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://minjoos.tistory.com/9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://minjoos.tistory.com/9&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1610959366891&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[AWS] AWS Network Firewall이란? - (1) 개념&quot; data-og-description=&quot;2020년 11월, AWS Network Firewall 서비스가 출시되었다. 아직 출시된지 얼마 되지 않은 서비스라, 사용할 수 있는 리전은 몇 되지 않지만 (미국 동부(버지니아 북부), 미국 서부(오레곤) 및 유럽(아일랜&quot; data-og-host=&quot;minjoos.tistory.com&quot; data-og-source-url=&quot;https://minjoos.tistory.com/9&quot; data-og-url=&quot;https://minjoos.tistory.com/9&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bLfw24/hyIYv3rSE6/x1MwAWdqQDWFwoIcsainCk/img.png?width=488&amp;amp;height=524&amp;amp;face=0_0_488_524,https://scrap.kakaocdn.net/dn/1RX59/hyIYEF6aCz/oF82mxmRdBKt9xrLJKsGEK/img.png?width=488&amp;amp;height=524&amp;amp;face=0_0_488_524,https://scrap.kakaocdn.net/dn/Il2Ea/hyIYD1toxQ/EM1ad2EL9RN8cfheFmNXbK/img.png?width=600&amp;amp;height=481&amp;amp;face=0_0_600_481&quot;&gt;&lt;a href=&quot;https://minjoos.tistory.com/9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minjoos.tistory.com/9&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bLfw24/hyIYv3rSE6/x1MwAWdqQDWFwoIcsainCk/img.png?width=488&amp;amp;height=524&amp;amp;face=0_0_488_524,https://scrap.kakaocdn.net/dn/1RX59/hyIYEF6aCz/oF82mxmRdBKt9xrLJKsGEK/img.png?width=488&amp;amp;height=524&amp;amp;face=0_0_488_524,https://scrap.kakaocdn.net/dn/Il2Ea/hyIYD1toxQ/EM1ad2EL9RN8cfheFmNXbK/img.png?width=600&amp;amp;height=481&amp;amp;face=0_0_600_481');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[AWS] AWS Network Firewall이란? - (1) 개념&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;2020년 11월, AWS Network Firewall 서비스가 출시되었다. 아직 출시된지 얼마 되지 않은 서비스라, 사용할 수 있는 리전은 몇 되지 않지만 (미국 동부(버지니아 북부), 미국 서부(오레곤) 및 유럽(아일랜&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;minjoos.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 AWS Network Firewall의 다양한 배포 모델 중 분산형 모델에 대해 알아볼 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Network Firewall의 배포 모델&lt;/b&gt;은 크게 세 가지로 나눌 수 있다.&lt;/p&gt;
&lt;p&gt;1) 분산형&lt;/p&gt;
&lt;p&gt;2) 중앙 집중형&lt;/p&gt;
&lt;p&gt;3) 결합형&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 중에서 오늘은 1) 분산형!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) 분산형&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emAaJi/btqT01EaOIs/QDkckrDIAdC04Q4H9Q1WR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emAaJi/btqT01EaOIs/QDkckrDIAdC04Q4H9Q1WR0/img.png&quot; data-alt=&quot;분산형 Network Firewall&amp;amp;amp;nbsp;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emAaJi/btqT01EaOIs/QDkckrDIAdC04Q4H9Q1WR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FemAaJi%2FbtqT01EaOIs%2FQDkckrDIAdC04Q4H9Q1WR0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;분산형 Network Firewall&amp;nbsp;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;전체적인 구조부터 차근차근 이해해보자.&lt;/p&gt;
&lt;p&gt;맨 위에는 외부와 통하는 트래픽을 뜻하는 구름 모양 이모지가 있고..&lt;/p&gt;
&lt;p&gt;그 아래에는 한 리전 안에 총 &lt;b&gt;네 개의 VPC(A~D)&lt;/b&gt;가 존재한다. &lt;br /&gt;(위 VPC는 Network Firewall에 의해 보호되고 있으므로 Protected VPC라고 부른다.)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;각 VPC 안에는 Firewall Subnet과 Protected Subnet, &lt;/span&gt;총 2개의 서브넷이 있다.&lt;/p&gt;
&lt;p&gt;Firewall Subnet에는 Firewall endpoint가 존재한다. 그냥 Network Firewall이라고 이해하면 쉽다.&lt;/p&gt;
&lt;p&gt;Protected Subnet에는 Workload가 존재한다. 이 workload는 우리가 보호하고 싶은 것이라고 생각하면 된다. (ex. 인스턴스)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;그래서 분산형 모델이 뭔데?&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 그림처럼 &lt;u&gt;&lt;b&gt;각 VPC안에 Network Firewall이 따로 따로 존재하는 것&lt;/b&gt;&lt;/u&gt;이다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이렇게 구성할 경우, 각 방화벽 마다 다른 정책을 가질 수 있어 워크로드에 따른 접근제어를 다르게 할 수 있다.&lt;/p&gt;
&lt;p&gt;또한 방화벽을 독립적으로 관리할 수 있으므로 구성 오류의 가능성이 줄어들고, 서로 영향을 미치는 범위가 제한되는 것이 장점이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 분산형 모델이 활용되는 유형은 크게 두가지로 나눌 수 있다.&lt;/p&gt;
&lt;p&gt;첫째, &lt;u&gt;&lt;b&gt;워크로드와 인터넷 게이트웨이와의 트래픽을 보호&lt;/b&gt;&lt;/u&gt;할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;607&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/laxSh/btqTYR9TsKl/3sj1K7rlIw41ByJpOw86R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/laxSh/btqTYR9TsKl/3sj1K7rlIw41ByJpOw86R0/img.png&quot; data-alt=&quot;분산형 배포 모델&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/laxSh/btqTYR9TsKl/3sj1K7rlIw41ByJpOw86R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlaxSh%2FbtqTYR9TsKl%2F3sj1K7rlIw41ByJpOw86R0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;607&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;분산형 배포 모델&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 그림처럼 &lt;span style=&quot;color: #333333;&quot;&gt;네트워크 방화벽은&amp;nbsp;&lt;/span&gt;맨 위의 인터넷 게이트웨이와 아래의 워크로드 사이에 위치하여&lt;br /&gt;그 사이의 트래픽을 보호한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;둘째, &lt;u&gt;&lt;b&gt;AWS 서비스와 인터넷 게이트웨이 간의 트래픽&lt;/b&gt;&lt;/u&gt;&lt;span&gt;을 보호한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;618&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qgrt6/btqT0sJcVem/Dmjw2baGPYDtu9p1wbqVM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qgrt6/btqT0sJcVem/Dmjw2baGPYDtu9p1wbqVM1/img.png&quot; data-alt=&quot;분산형 배포 모델&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qgrt6/btqT0sJcVem/Dmjw2baGPYDtu9p1wbqVM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQgrt6%2FbtqT0sJcVem%2FDmjw2baGPYDtu9p1wbqVM1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;618&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;분산형 배포 모델&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 그림은 이전 그림에서 protected subnet 안의 구성이 바뀌었다.&lt;/p&gt;
&lt;p&gt;protected subnet 안에 ALB(Application Load Balancer), NAT Gateway가 들어가 있고,&amp;nbsp;&lt;br /&gt;워크로드는 private subnet으로 들어갔다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 집중할 것은 네트워크 방화벽이 이번에는&lt;br /&gt;AWS 서비스들(protected subnet안의 ALB, NAT Gateway 등)과 인터넷 게이트웨이 사이에 위치하여&lt;br /&gt;그 사이의 트래픽을 보호한다는 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 워크로드를 보호하기 위해&lt;br /&gt;워크로드 - 인터넷 게이트웨이 사이에 위치시키거나&lt;br /&gt;워크로드와 통신하는 AWS 서비스 - 인터넷 게이트웨이 사이에 위치시키는 등&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;다양한 형태로 네트워크 방화벽을 구성&lt;/b&gt;&lt;/u&gt;할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 밖에도 훨씬 다양한 구성으로 네트워크 방화벽을 구성할 수 있을 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;형태야 어찌됐건,&lt;/p&gt;
&lt;p&gt;분산형 배포 모델은 &lt;u&gt;&lt;b&gt;보호를 원하는 VPC 안에 직접 Firewall Subnet을 배치&lt;/b&gt;&lt;/u&gt;하는 것이라는 것!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 포스팅에서는 네트워크 방화벽의 두번째 배포 모델인,&lt;/p&gt;
&lt;p&gt;2) 중앙 집중형 배포 모델에 대해 포스팅하겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 여기까지!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AWS</category>
      <category>AWS</category>
      <category>aws firewall</category>
      <category>Firewall</category>
      <category>Network firewall</category>
      <category>subnet</category>
      <category>VPC</category>
      <category>네트워크 방화벽</category>
      <category>방화벽</category>
      <category>인터넷게이트웨이</category>
      <category>클라우드</category>
      <author>mjoooo</author>
      <guid isPermaLink="true">https://minjoos.tistory.com/10</guid>
      <comments>https://minjoos.tistory.com/10#entry10comment</comments>
      <pubDate>Tue, 19 Jan 2021 11:22:52 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] AWS Network Firewall이란? - (1) 개념</title>
      <link>https://minjoos.tistory.com/9</link>
      <description>&lt;p&gt;2020년 11월, AWS Network Firewall 서비스가 출시되었다.&lt;/p&gt;
&lt;p&gt;아직 출시된지 얼마 되지 않은 서비스라, 사용할 수 있는 리전은 몇 되지 않지만 &lt;s&gt;(&lt;span style=&quot;color: #333333;&quot;&gt;미국 동부(버지니아 북부), 미국 서부(오레곤) 및 유럽(아일랜드)&lt;/span&gt;)&lt;/s&gt;&lt;br /&gt;곧 한국 리전에서도 쓸 수 있는 날이 올거라 생각하며.. 간단히 정리해보려 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;AWS Network Firewall은 무엇이냐..&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;말그대로 네트워크를 보호하는 방화벽이다! (단순)&lt;/p&gt;
&lt;p&gt;더 자세히 말하자면 &lt;u&gt;&lt;b&gt;AWS VPC 기반 관리형 방화벽 서비스&lt;/b&gt;&lt;/u&gt;이다. &lt;br /&gt;(AWS Network Firewall에 대해 잘 이해하려면 먼저 기본 방화벽과 VPC에 대한 개념을 익히고 오길 추천한다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아직도 모르겠다고? 아래 그림을 먼저 보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deVhjT/btqTLycJkBd/K5U9ADLLfuvQw1XasMruB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deVhjT/btqTLycJkBd/K5U9ADLLfuvQw1XasMruB0/img.png&quot; data-alt=&quot;AWS Network Firewall 구조도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deVhjT/btqTLycJkBd/K5U9ADLLfuvQw1XasMruB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeVhjT%2FbtqTLycJkBd%2FK5U9ADLLfuvQw1XasMruB0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AWS Network Firewall 구조도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 그림은 Network Firewall의 구조를 아주 간단하게 표현한 구조도이다.&lt;/p&gt;
&lt;p&gt;내가 사용자가 되었다고 할 때, 내가 보호하고 싶은 것은 customer subnet에 있는 인스턴스들이다.&lt;/p&gt;
&lt;p&gt;따라서 VPC 안에, Network Firewall과 통하는 Firewall endpoint를 놓고&lt;br /&gt;&lt;u&gt;&lt;b&gt;Internet Gateway를 통해 들어오고 나가는 트래픽을 필터링&lt;/b&gt;&lt;/u&gt;하여 인스턴스를 보호하는 것이다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Internet Gateway와 인스턴스 사이의 모든 트래픽은 firewall endpoint를 거치게 되며, &lt;br /&gt;사용자는 인스턴스로 들어오길 원하는/원치 않는 트래픽을 허용/차단 할 수 있게 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxNHon/btqTYQDaiQL/VjFzikq9Lp8PvME1B9omS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxNHon/btqTYQDaiQL/VjFzikq9Lp8PvME1B9omS1/img.png&quot; data-alt=&quot;Network Firewall의 패킷 필터링&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxNHon/btqTYQDaiQL/VjFzikq9Lp8PvME1B9omS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxNHon%2FbtqTYQDaiQL%2FVjFzikq9Lp8PvME1B9omS1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Network Firewall의 패킷 필터링&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;트래픽을 허용/차단하는 규칙의 집합을 Rule engines라고 부를 수 있다.&lt;/p&gt;
&lt;p&gt;Network Firewall은 이 &lt;u&gt;&lt;b&gt;Rule engines를 통해, 들어오고 나가는 패킷을 규칙에 따라 Pass하거나 Drop&lt;/b&gt;&lt;/u&gt;한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 트래픽 흐름을 살펴보며 좀 더 자세히 이해해보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFmACT/btqTLyw51HF/A1sNEgG9S3V6nYH1BL1pKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFmACT/btqTLyw51HF/A1sNEgG9S3V6nYH1BL1pKk/img.png&quot; data-alt=&quot;AWS Network Firewall 및 워크로드에 대한 트래픽 흐름&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFmACT/btqTLyw51HF/A1sNEgG9S3V6nYH1BL1pKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFmACT%2FbtqTLyw51HF%2FA1sNEgG9S3V6nYH1BL1pKk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AWS Network Firewall 및 워크로드에 대한 트래픽 흐름&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;아.. 그림이 복잡해졌다.&lt;/p&gt;
&lt;p&gt;하지만 쫄지 말자.&lt;/p&gt;
&lt;p&gt;우리는 번호가 붙어있는 동그라미만 살펴보며 따라가면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1) Workload에서 트래픽이 나간다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;2) Firewall endpoint에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;AWS Network Firewall로 트래픽이 전달되며, 트래픽에 대한 필터링이 수행&lt;/b&gt;&lt;span&gt;된다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;3) Internet Gateway로 전달된다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;4) NAT (네트워크 주소 변환)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;5) 외부&lt;/span&gt;&lt;br /&gt;&lt;span&gt;6) Workload로 들어가고자 하는 트래픽이 Firewall endpoint를 거친다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;7)&amp;nbsp;Firewall endpoint에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;AWS Network Firewall로 트래픽이 전달되며, 트래픽에 대한 필터링이 수행&lt;/b&gt;&lt;span&gt;된다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;8) 트래픽이 Workload로 들어온다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;여기서 눈여겨 봐야할 것은 workload에서 나가고, workload로 들어오는 트래픽이 Network Firewall을 거친다는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;즉, workload(내부)와 인터넷 게이트웨이(외부) 사이에 방화벽 엔드포인트를 위치시킴으로써,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;VPC의 모든 트래픽이 방화벽을 통해 필터링&lt;/b&gt;&lt;/span&gt;된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 여기까지!&lt;/p&gt;
&lt;p&gt;굉장히 간단한 그림으로 네트워크 방화벽과 트래픽 흐름에 대해 알아봤는데,,&lt;/p&gt;
&lt;p&gt;실제 클라우드 환경에서 우리가 사용하게 될 배포 모델들은 조금 더 복잡하다.&lt;/p&gt;
&lt;p&gt;하지만 이 개념이 근-본 of 근-본이 되는 개념이니 확실하게 알아두면 좋을 것 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 포스팅에서는 이 네트워크 방화벽의 배포 모델(유형)에 대해 알아보겠다!!!&lt;/p&gt;</description>
      <category>AWS</category>
      <category>AWS</category>
      <category>aws network firewall</category>
      <category>AWS 클라우드</category>
      <category>Firewall</category>
      <category>Network firewall</category>
      <category>VPC</category>
      <category>방화벽</category>
      <category>접근제어</category>
      <category>클라우드</category>
      <category>패킷 필터링</category>
      <author>mjoooo</author>
      <guid isPermaLink="true">https://minjoos.tistory.com/9</guid>
      <comments>https://minjoos.tistory.com/9#entry9comment</comments>
      <pubDate>Mon, 18 Jan 2021 17:35:28 +0900</pubDate>
    </item>
    <item>
      <title>[Webhacking] Webhacking.kr 웹해킹 25번 풀이</title>
      <link>https://minjoos.tistory.com/8</link>
      <description>&lt;p&gt;약 1년 전에 보안 동아리 활동하면서 풀었던 웹해킹..&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;FTZ, pawnable, LOB 등등 당시에는 뭐라도 해보겠다고 많이 풀었었는데 시간이 지난만큼 기억이 가물가물하다 ^^..&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;취준을 앞두고 있는 요즘 내가 무엇을 했는지 기록하는게 얼마나 중요한지 깨닫고&lt;/p&gt;
&lt;p&gt;예전에 풀었던 문제들을 하나씩 리뷰해보려고 한다. (제발)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 webhacking.kr 의 25번 문제&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm9khv/btqDZONVKrH/Y4krDvNwDGfRugecacYfq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm9khv/btqDZONVKrH/Y4krDvNwDGfRugecacYfq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm9khv/btqDZONVKrH/Y4krDvNwDGfRugecacYfq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm9khv%2FbtqDZONVKrH%2FY4krDvNwDGfRugecacYfq0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;문제를 눌러서 나오는 첫 번째 화면이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여러가지 파일 및 디렉토리의 권한 및 정보가 나와있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 유심히 봐야할 것은 url이다. file=hello 라고 되어있는데 이를 보아하니 &lt;b&gt;1. GET 방식으로 파일명을 받아오는 것&lt;/b&gt; 같다. 회색 창에는 hello world 라고 쓰여있는데 이는 hello.php라는 &lt;b&gt;2. 파일이 회색 창에 출력&lt;/b&gt;되는 것이라고 유추할 수 있다. 또한 정확한 파일명은 hello.php인데 url 주소창에는 hello만 적혀 있으므로,&lt;/p&gt;
&lt;p&gt;file 파라미터로 받아온 값에는 &lt;b&gt;3.&lt;/b&gt; &lt;b&gt;자동으로 .php 를 붙혀 실행&lt;/b&gt;한다고 유추할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그러니 일단 flag.php 파일을 열기 위해 url의 file 파라미터로 'flag'를 입력해본다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWBqSC/btqDY2lpDa6/tSvMv1lDVGRXsiu0lWRFX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWBqSC/btqDY2lpDa6/tSvMv1lDVGRXsiu0lWRFX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWBqSC/btqDY2lpDa6/tSvMv1lDVGRXsiu0lWRFX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWBqSC%2FbtqDY2lpDa6%2FtSvMv1lDVGRXsiu0lWRFX0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;FLAG is in the code 라는 텍스트가 출력되었다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;따라서 flag.php의 소스코드 안에 답이 있을 것 같은데..&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 문제에서는 이를 위해 'php://filter'라는 PHP Wrapper를 사용한다.&lt;/p&gt;
&lt;p&gt;PHP는 입출력, 오류 파일 기술어 등에 엑세스 할 수 있는 다양한 I/O 스트림을 제공하는데 이것을 PHP Wrapper라고 한다. 이 문제에서 그 중 &lt;span style=&quot;color: #333333;&quot;&gt;'php://filter'라는 wrapper를 사용할 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;'php://filter'는 아래의 명령으로 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;php://filter/convert.base64-encode/resource='파일명'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 코드의 결과는 '파일명'의 소스코드를 base64로 인코딩한 것을 출력한다.&lt;/p&gt;
&lt;p&gt;따라서 우리는 url에 &lt;span style=&quot;color: #ee2323;&quot;&gt;php://filter/convert.base64-encode/resource=flag&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;를 덧붙혀준 뒤,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;base64로 인코딩된 flag.php 소스코드 (출력값) 을 디코딩하여 소스코드를 알아낼 수 있다!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ED8D9/btqDWtkh7HJ/rFm5Hkkh5hLGzx2XQree3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ED8D9/btqDWtkh7HJ/rFm5Hkkh5hLGzx2XQree3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ED8D9/btqDWtkh7HJ/rFm5Hkkh5hLGzx2XQree3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FED8D9%2FbtqDWtkh7HJ%2FrFm5Hkkh5hLGzx2XQree3K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;회색창에 출력된 base64로 인코딩된 flag.php 소스코드를 복사하여 디코딩을 해준다.&lt;/p&gt;
&lt;p&gt;(base64 디코딩은 &lt;a href=&quot;https://www.base64decode.org/&quot;&gt;https://www.base64decode.org/&lt;/a&gt;여기서 해주었다.)&lt;/p&gt;
&lt;figure id=&quot;og_1588839567587&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Base64 Decode and Encode - Online&quot; data-og-description=&quot;Decode from Base64 or Encode to Base64 with advanced formatting options. Enter our site for an easy-to-use online tool.&quot; data-og-host=&quot;www.base64decode.org&quot; data-og-source-url=&quot;https://www.base64decode.org/&quot; data-og-url=&quot;https://www.base64decode.org/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Rpw5i/hyFXpLyT3U/0YfuztzsFMEXtdquRuxvPK/img.png?width=600&amp;amp;height=315&amp;amp;face=228_192_257_224&quot;&gt;&lt;a href=&quot;https://www.base64decode.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.base64decode.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Rpw5i/hyFXpLyT3U/0YfuztzsFMEXtdquRuxvPK/img.png?width=600&amp;amp;height=315&amp;amp;face=228_192_257_224');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Base64 Decode and Encode - Online&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Decode from Base64 or Encode to Base64 with advanced formatting options. Enter our site for an easy-to-use online tool.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.base64decode.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wRATY/btqDY01922Q/wspTOnkozHUYAyqbz5bG10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wRATY/btqDY01922Q/wspTOnkozHUYAyqbz5bG10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wRATY/btqDY01922Q/wspTOnkozHUYAyqbz5bG10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwRATY%2FbtqDY01922Q%2FwspTOnkozHUYAyqbz5bG10%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;디코딩된 값을 확인해보면 이 문제의 FLAG는 'FLAG{this_is_your_first_flag}'임을 알아낼 수 있었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beqSTV/btqDXEZzxVI/tP5cFvW670r4sU2tq7h5zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beqSTV/btqDXEZzxVI/tP5cFvW670r4sU2tq7h5zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beqSTV/btqDXEZzxVI/tP5cFvW670r4sU2tq7h5zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeqSTV%2FbtqDXEZzxVI%2FtP5cFvW670r4sU2tq7h5zk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;성공!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그런데 1년 전에 풀었던 문제와 조금 달라졌다..&lt;/p&gt;
&lt;p&gt;분명히 .txt 가 붙는 환경에서 password.php 를 열어보는 문제였는데 ㅠㅠㅠ&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;보아하니 전체적으로 문제가 update된 것 같다..&lt;/p&gt;
&lt;p&gt;리뷰하면서 조금씩 바뀐 문제를 다시 풀어봐야할듯&lt;/p&gt;</description>
      <category>Security</category>
      <category>base64</category>
      <category>CYBER</category>
      <category>decoding</category>
      <category>Hacking</category>
      <category>php</category>
      <category>phpwrapper</category>
      <category>Security</category>
      <category>WebHacking</category>
      <category>webhacking.kr</category>
      <category>웹해킹</category>
      <author>mjoooo</author>
      <guid isPermaLink="true">https://minjoos.tistory.com/8</guid>
      <comments>https://minjoos.tistory.com/8#entry8comment</comments>
      <pubDate>Thu, 7 May 2020 17:23:46 +0900</pubDate>
    </item>
    <item>
      <title>[python] Selenium으로 웹 페이지 크롤링하기 3 / 페이지 제어(blank에 값 입력, 버튼 클릭)</title>
      <link>https://minjoos.tistory.com/7</link>
      <description>&lt;p&gt;지난 포스팅에서는 웹 페이지에서 원하는 평문(text)과 표(table)를 크롤링하는 방법을 알아보았다.&lt;/p&gt;
&lt;p&gt;(아래 링크 참조)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://minjoos.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/02/14 - [이모저모] - [python] Selenium으로 웹 페이지 크롤링하기 / 평문(text)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1583918989260&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[python] Selenium으로 웹 페이지 크롤링하기 / 평문(text)&quot; data-og-description=&quot;1. Selenium 이란? 이번 포스팅에서는 selenium이라는 프레임워크를 통해 웹 페이지를 크롤링하는 방법에 대해 간단히 살펴보겠다. Selenium이란 주로 웹앱을 테스트하는 웹 프레임워크이다. webdriver의 API를 통..&quot; data-og-host=&quot;minjoos.tistory.com&quot; data-og-source-url=&quot;https://minjoos.tistory.com/4&quot; data-og-url=&quot;https://minjoos.tistory.com/4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/e6LxM/hyFgns7Uyo/YLK8VUSQsmEc6v5fxwEj8K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gTi5r/hyFeJLl7e1/HPKk8GXDjqZSJGnwiQiFK1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/iO9oy/hyFgpEs0zX/gwE9xKDX0rdFhudBrzrLK0/img.png?width=1297&amp;amp;height=998&amp;amp;face=0_0_1297_998&quot;&gt;&lt;a href=&quot;https://minjoos.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minjoos.tistory.com/4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/e6LxM/hyFgns7Uyo/YLK8VUSQsmEc6v5fxwEj8K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gTi5r/hyFeJLl7e1/HPKk8GXDjqZSJGnwiQiFK1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/iO9oy/hyFgpEs0zX/gwE9xKDX0rdFhudBrzrLK0/img.png?width=1297&amp;amp;height=998&amp;amp;face=0_0_1297_998');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[python] Selenium으로 웹 페이지 크롤링하기 / 평문(text)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;1. Selenium 이란? 이번 포스팅에서는 selenium이라는 프레임워크를 통해 웹 페이지를 크롤링하는 방법에 대해 간단히 살펴보겠다. Selenium이란 주로 웹앱을 테스트하는 웹 프레임워크이다. webdriver의 API를 통..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;minjoos.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://minjoos.tistory.com/5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/02/24 - [이모저모] - [python] Selenium으로 웹 페이지 크롤링하기 2 / 표(table)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1583918998178&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[python] Selenium으로 웹 페이지 크롤링하기 2 / 표(table)&quot; data-og-description=&quot;지난 포스팅에서는 웹 페이지에서 원하는 평문(text)를 크롤링하는 방법에서 알아보았다. (아래 링크 참조) 2020/02/14 - [이모저모] - [python] Selenium으로 웹 페이지 크롤링하기 [python] Selenium으로 웹 페..&quot; data-og-host=&quot;minjoos.tistory.com&quot; data-og-source-url=&quot;https://minjoos.tistory.com/5&quot; data-og-url=&quot;https://minjoos.tistory.com/5&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ZMBk7/hyFeLoPNuw/N4xKkEwZMvUrkltVTi5Ij0/img.png?width=800&amp;amp;height=429&amp;amp;face=0_0_800_429,https://scrap.kakaocdn.net/dn/bXnpzX/hyFgoZRTWH/7bIHTLFMq1MkvZeVQmqhmk/img.png?width=800&amp;amp;height=429&amp;amp;face=0_0_800_429,https://scrap.kakaocdn.net/dn/ciWGzB/hyFgrI3iSc/m3Wwq881Y5BOyj2HtkKwh1/img.png?width=1920&amp;amp;height=1030&amp;amp;face=0_0_1920_1030&quot;&gt;&lt;a href=&quot;https://minjoos.tistory.com/5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minjoos.tistory.com/5&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ZMBk7/hyFeLoPNuw/N4xKkEwZMvUrkltVTi5Ij0/img.png?width=800&amp;amp;height=429&amp;amp;face=0_0_800_429,https://scrap.kakaocdn.net/dn/bXnpzX/hyFgoZRTWH/7bIHTLFMq1MkvZeVQmqhmk/img.png?width=800&amp;amp;height=429&amp;amp;face=0_0_800_429,https://scrap.kakaocdn.net/dn/ciWGzB/hyFgrI3iSc/m3Wwq881Y5BOyj2HtkKwh1/img.png?width=1920&amp;amp;height=1030&amp;amp;face=0_0_1920_1030');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[python] Selenium으로 웹 페이지 크롤링하기 2 / 표(table)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;지난 포스팅에서는 웹 페이지에서 원하는 평문(text)를 크롤링하는 방법에서 알아보았다. (아래 링크 참조) 2020/02/14 - [이모저모] - [python] Selenium으로 웹 페이지 크롤링하기 [python] Selenium으로 웹 페..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;minjoos.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 더 나아가 페이지를 코드로 제어하고 원하는 정보를 크롤링하는 방법에 대해 알아보겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정보를 크롤링할 페이지는 임의로 정하였다.&lt;/p&gt;
&lt;pre id=&quot;code_1583919095448&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from selenium import webdriver
from selenium.webdriver.support.ui import Select
import datetime

driver = webdriver.Chrome('./chromedriver')
driver.implicitly_wait(1)
driver.get('https://www.aia.co.kr/ko/our-products/medical-protection/non-par-denteal-health-plan.html')
driver.implicitly_wait(1)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 코드에 나와있는 url은 &lt;span style=&quot;color: #333333;&quot;&gt;보험사 홈페이지이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9j2Q6/btqCGRZcZH0/BKG0hu0CqibpihT8dX0vgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9j2Q6/btqCGRZcZH0/BKG0hu0CqibpihT8dX0vgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9j2Q6/btqCGRZcZH0/BKG0hu0CqibpihT8dX0vgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9j2Q6%2FbtqCGRZcZH0%2FBKG0hu0CqibpihT8dX0vgK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;보험사 홈페이지에는 아래와 같이 개인 정보를 입력하고 자신에게 맞는 보험료를 설계해주는 서비스가 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OvXdB/btqCBx9bmJX/hAZOde3liqFSYdG7E91hdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OvXdB/btqCBx9bmJX/hAZOde3liqFSYdG7E91hdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OvXdB/btqCBx9bmJX/hAZOde3liqFSYdG7E91hdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOvXdB%2FbtqCBx9bmJX%2FhAZOde3liqFSYdG7E91hdk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;우리는 이제 &lt;i&gt;&lt;b&gt;코드로 위의 빈칸들을 채워넣고 버튼을 클릭해서 나오는 '나에게 맞는 보험료' 정보를 크롤링&lt;/b&gt;&lt;/i&gt;할 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;방법은 생각보다 매우 간단하다.&lt;/p&gt;
&lt;pre id=&quot;code_1583919436534&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;checkbox = driver.find_element_by_xpath('//*[@id=&quot;aia1701849055&quot;]/div/div[1]/div[3]/label/span/span')
name = driver.find_element_by_xpath('//*[@id=&quot;aia452730991&quot;]')
birthday = driver.find_element_by_xpath('//*[@id=&quot;aia1804180016&quot;]')
sex = driver.find_element_by_xpath('//*[@id=&quot;aia1701849055&quot;]/div/div[1]/div[5]/div/div[1]/div/div[2]/div[1]/div[1]')
phoneNumber = driver.find_element_by_xpath('//*[@id=&quot;aia1724353200&quot;]')
email = driver.find_element_by_xpath('//*[@id=&quot;aia1236626147&quot;]')
prefer = driver.find_element_by_xpath('//*[@id=&quot;aia1701849055&quot;]/div/div[1]/div[7]/div/div[1]/div/div[2]/div[1]/div[1]')
button = driver.find_element_by_xpath('//*[@id=&quot;btn391303096&quot;]')
button2 = driver.find_element_by_xpath('/html/body/div[12]/section/div/div/div/div/div/div/div[4]/div[1]/div[2]/div/a[2]')

driver.implicitly_wait(3)
checkbox.click()
driver.implicitly_wait(1)
name.send_keys('손민주')
driver.implicitly_wait(1)
birthday.send_keys('19990107')
driver.implicitly_wait(1)
sex.click()
driver.implicitly_wait(1)
phoneNumber.send_keys('01012345678')
driver.implicitly_wait(1)
email.send_keys('tina_98@naver.com')
driver.implicitly_wait(1)
prefer.click()
driver.implicitly_wait(1)
button.click()
driver.implicitly_wait(1)
button2.click()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;find_element_by_xpath()를 이용하여 각 blank의 위치와 버튼의 위치를 변수에 저장해놓는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(find_element_by_xpath() 사용법은 이전 이전 글인&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://minjoos.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/02/14 - [이모저모] - [python] Selenium으로 웹 페이지 크롤링하기 / 평문(text)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;에 자세히 나와있다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;변수 저장 후, click()과 send_keys() 등의 메소드를 통해 제어한다.&lt;/p&gt;
&lt;p&gt;코드를 자세히 살펴보면&lt;/p&gt;
&lt;p&gt;이름, 생일을 입력하고 성별에 맞는 버튼을 클릭한다.&lt;/p&gt;
&lt;p&gt;그리고 휴대폰번호, 이메일을 입력하고 기타 정보에 맞는 버튼을 클릭한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그러면 이제 정보 크롤링을 위한 모든 밑바탕이 완성되었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 코드를 실행시키면 아래와 같이 나에게 맞는 보험 정보가 뜬다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDdDEZ/btqCFy6RQyY/PpgSfIAxxT8IdIGA5R6lXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDdDEZ/btqCFy6RQyY/PpgSfIAxxT8IdIGA5R6lXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDdDEZ/btqCFy6RQyY/PpgSfIAxxT8IdIGA5R6lXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDdDEZ%2FbtqCFy6RQyY%2FPpgSfIAxxT8IdIGA5R6lXk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나는 이 중 일부의 정보를 크롤링해보도록 하겠다.&lt;/p&gt;
&lt;pre id=&quot;code_1583919880396&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;table = driver.find_element_by_xpath('//*[@id=&quot;collapse-large-945472484&quot;]/div[2]/table')
tbody = table.find_element_by_xpath('//*[@id=&quot;collapse-large-945472484&quot;]/div[2]/table/tbody')
rows = tbody.find_elements_by_xpath('//*[@id=&quot;collapse-large-945472484&quot;]/div[2]/table/tbody/tr')
for index, value in enumerate(rows):
    if(index!=0):
        body=value.find_elements_by_tag_name(&quot;td&quot;)[1]
        print(body.text)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;방법은 이전 포스팅에서 다뤘던 표(table) 크롤링하기 방법과 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 코드까지 포함하여 같이 실행시켜주면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;639&quot; height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JPmvJ/btqCAQBb7Rl/q0nbO6wTmnvV9qZt9pkhsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JPmvJ/btqCAQBb7Rl/q0nbO6wTmnvV9qZt9pkhsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JPmvJ/btqCAQBb7Rl/q0nbO6wTmnvV9qZt9pkhsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJPmvJ%2FbtqCAQBb7Rl%2Fq0nbO6wTmnvV9qZt9pkhsk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;639&quot; height=&quot;453&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 같이 원하는 정보가 크롤링되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사실 이번 포스팅은 이전에 다뤘던 방법이 많이 활용되었고,&lt;/p&gt;
&lt;p&gt;추가된 것은 어떻게 코드를 통해 blank에 원하는 값을 채워넣고, 버튼을 클릭하는 등의 모션을 구현하는지이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것으로 파이썬으로 Selenium을 통해 웹 페이지 크롤링하기 시리즈(?)를 끝내도록 하겠다!&lt;/p&gt;</description>
      <category>이모저모</category>
      <category>Crawling</category>
      <category>python</category>
      <category>selenium</category>
      <category>버튼클릭</category>
      <category>빈칸넣기</category>
      <category>웹크롤링</category>
      <category>크롤링</category>
      <category>파이썬</category>
      <author>mjoooo</author>
      <guid isPermaLink="true">https://minjoos.tistory.com/7</guid>
      <comments>https://minjoos.tistory.com/7#entry7comment</comments>
      <pubDate>Wed, 11 Mar 2020 18:51:50 +0900</pubDate>
    </item>
    <item>
      <title>[pytorch] VGGNet으로 ImageNet 학습하기</title>
      <link>https://minjoos.tistory.com/6</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. VGGNet이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CNN 알고리즘들 중에서는 이미지 분류(Image Classification)용 알고리즘, 예를 들어 AlexNet, GoogleNet 등이 있다.&lt;/p&gt;
&lt;p&gt;그 &lt;b&gt;이미지 분류 CNN 모델들 중에 하나&lt;/b&gt;가 바로 VGGNet이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;VGGNet은 몇 개의 층(layer)으로 구성되어 있는지에 따라, 16개 층으로 구성되어 있으면 VGG16,&lt;/p&gt;
&lt;p&gt;19개 층으로 구성되어 있으면 VGG19라고 불린다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;VGGNet은 옥스포드 대학의 연구팀 VGG에 의해 개발된 모델로써,&lt;/p&gt;
&lt;p&gt;2014년 이미지넷 이미지 인식 대회에서 준우승을 한 모델이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2012년, 2013년 우승 모델들은 8개의 층으로 구성되어 있는 반면,&lt;/p&gt;
&lt;p&gt;2014년 VGGNet(VGG19)는 19층으로 구성되었고, GoogleNet은 22층으로 구성되었다.&lt;/p&gt;
&lt;p&gt;그리고 2015년에 이르러서는 152개의 층으로 구성된 ResNet이 제안되었다.&lt;/p&gt;
&lt;p&gt;따라서 VGGNet 모델부터 시작해서 네트워크의 깊이가 확 깊어진 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;523&quot; height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YwtfW/btqCoRz4mjS/keKEbhbK5sm3XkgGviPcV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YwtfW/btqCoRz4mjS/keKEbhbK5sm3XkgGviPcV1/img.png&quot; data-alt=&quot;네트워크의 깊이 변화에 따른 top-5 error의 변화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YwtfW/btqCoRz4mjS/keKEbhbK5sm3XkgGviPcV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYwtfW%2FbtqCoRz4mjS%2FkeKEbhbK5sm3XkgGviPcV1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;523&quot; height=&quot;318&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네트워크의 깊이 변화에 따른 top-5 error의 변화&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;VGGNet은 사용하기 쉬운 구조와 좋은 성능 덕분에 그 대회에서 우승을 거둔 조금 더 복잡한 형태의 GoogleNet보다 더 인기를 끌었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;VGGNet의 original 논문의 링크는 아래에 걸어두겠다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://arxiv.org/pdf/1409.1556.pdf&quot;&gt;: https://arxiv.org/pdf/1409.1556.pdf&lt;/a&gt;&lt;/p&gt;
&lt;figure class=&quot;og-loading&quot; contenteditable=&quot;false&quot;&gt;불러오는 중입니다...&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. VGGNet의 구조&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;VGGNet 연구의 핵심은 &quot;네트워크의 깊이&quot;가 성능에 어떤 영향을 미치는지를 확인하고자 한 것이다.&lt;/p&gt;
&lt;p&gt;따라서 VGG 연구팀은 깊이의 영향만을 확인하고자, 컨볼루션 필터 커널의 사이즈를 가장 작은 3x3으로 고정했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;473&quot; height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7n8gM/btqCtYxJRrl/6nlJFbarX2txmzsKzLveQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7n8gM/btqCtYxJRrl/6nlJFbarX2txmzsKzLveQk/img.png&quot; data-alt=&quot;VGGNet 구조 설명 표 [출처: original 논문]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7n8gM/btqCtYxJRrl/6nlJFbarX2txmzsKzLveQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7n8gM%2FbtqCtYxJRrl%2F6nlJFbarX2txmzsKzLveQk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;473&quot; height=&quot;477&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VGGNet 구조 설명 표 [출처: original 논문]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;VGG 연구팀은 총 6개의 구조(A, A-LRN, B, C, D, E)를 만들어 성능을 비교했다.&lt;/p&gt;
&lt;p&gt;이들 중, D구조가 VGG16이고 E구조가 VGG19라고 보면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이들은 깊이가 11층, 13층, 16층, 19층으로 깊어지면서 분류 에러가 감소하는 것을 관찰했다.&lt;/p&gt;
&lt;p&gt;즉, 깊어질수록 성능이 좋아진다는 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음은 VGG16의 구조를 그림으로 나타낸 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;789&quot; height=&quot;454&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x7APM/btqCsGRJYKo/0PYNRnSEadZ8Qif7mk2iM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x7APM/btqCsGRJYKo/0PYNRnSEadZ8Qif7mk2iM1/img.png&quot; data-alt=&quot;VGG16 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x7APM/btqCsGRJYKo/0PYNRnSEadZ8Qif7mk2iM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx7APM%2FbtqCsGRJYKo%2F0PYNRnSEadZ8Qif7mk2iM1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;789&quot; height=&quot;454&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VGG16 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그림에서 확인할 수 있듯이, VGG는 합성곱 계층(검정색)과 풀링 계층(빨간색)으로 구성된다.&lt;/p&gt;
&lt;p&gt;다만, 합성곱 계층(검정색)과 완전연결 계층(파란색)을 합쳐서 모두 16층(VGG19의 경우 19층)으로 심화한 것이 특징이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;인풋으로는 224 x 224 x 3 이미지(224 x 224 RGB 이미지)를 입력받을 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;인풋 값이 16개의 층을 지난 후 softmax 함수로 활성화 된 출력값들은 1000개의 뉴런으로 구성된다.&lt;/p&gt;
&lt;p&gt;이 말은 즉, 1000개의 클래스로 분류하는 목적으로 만들어진 네트워크라는 뜻이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. VGGNet으로 ImageNet 학습하기&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-1. Data 준비하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 학습할 ImageNet dataset을 다운로드 받아야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://image-net.org/download&quot;&gt;http://image-net.org/download&lt;/a&gt; &amp;lt;- 여기에서 2012년도 dataset을 다운로드 받는다.&lt;/p&gt;
&lt;p&gt;data의 크기가 워낙 크기 때문에 다운로드 받는데 3~5일이 걸렸다..&lt;/p&gt;
&lt;figure id=&quot;og_1583297278929&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ImageNet&quot; data-og-description=&quot;&quot; data-og-host=&quot;image-net.org&quot; data-og-source-url=&quot;http://image-net.org/download&quot; data-og-url=&quot;http://image-net.org/download&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://image-net.org/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://image-net.org/download&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;ImageNet&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;image-net.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2020-03-04 13-54-35.png&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u8ikH/btqCqMMdTZo/ijB41A0b3U6fqarfsxrmi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u8ikH/btqCqMMdTZo/ijB41A0b3U6fqarfsxrmi1/img.png&quot; data-alt=&quot;ImageNet Dataset 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u8ikH/btqCqMMdTZo/ijB41A0b3U6fqarfsxrmi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu8ikH%2FbtqCqMMdTZo%2FijB41A0b3U6fqarfsxrmi1%2Fimg.png&quot; data-filename=&quot;Screenshot from 2020-03-04 13-54-35.png&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;128&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ImageNet Dataset 파일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 데이터를 사용할 수 있게 data를 load해줘야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1583298675506&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torchvision
import torchvision.transforms as transforms

import torch.nn as nn
import torch.nn.functional as F

import matplotlib.pyplot as plt
import numpy as np

import json
import os

transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])

trainset = torchvision.datasets.ImageNet('../../data/imagenet', split='train', download=None, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)

testset = torchvision.datasets.ImageNet('../../data/imagenet', split='val', download=None, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이렇게 trainset과 testset을 나눠서 torchvision.datasets.ImageNet으로 data를 load해준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(pytorch에서 지원하고 있는 dataset의 종류마다 torchvision.datasets 사용법이 다르니,&lt;/p&gt;
&lt;p&gt;pytorch 공식 사이트인 &lt;a href=&quot;https://pytorch.org/docs/stable/torchvision/datasets.html#imagenet&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://pytorch.org/docs/stable/torchvision/datasets.html#imagenet&lt;/a&gt; 를 참고한다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 코드를 실행시키면 아래와 같이 데이터셋이 train 폴더와 val 폴더로 분리되어 생성된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2020-03-04 14-44-12.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;151&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFSWhM/btqCuYEHqkQ/pzrlOJkSt5ln28PKe0eN8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFSWhM/btqCuYEHqkQ/pzrlOJkSt5ln28PKe0eN8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFSWhM/btqCuYEHqkQ/pzrlOJkSt5ln28PKe0eN8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFSWhM%2FbtqCuYEHqkQ%2FpzrlOJkSt5ln28PKe0eN8k%2Fimg.png&quot; data-filename=&quot;Screenshot from 2020-03-04 14-44-12.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;151&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;각 폴더 안에는 이렇게 데이터셋의 각 class가 폴더로 구성되어 있고,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2020-03-04 14-45-27.png&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;565&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doCNaM/btqCqMyGKGs/5ubpZadclO9oZko4xNFvL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doCNaM/btqCqMyGKGs/5ubpZadclO9oZko4xNFvL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doCNaM/btqCqMyGKGs/5ubpZadclO9oZko4xNFvL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoCNaM%2FbtqCqMyGKGs%2F5ubpZadclO9oZko4xNFvL0%2Fimg.png&quot; data-filename=&quot;Screenshot from 2020-03-04 14-45-27.png&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;565&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;각 class 폴더 안에는 그 class의 image 파일들이 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2020-03-04 14-45-44.png&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cArcaz/btqCrPItHyk/beiLRw1sCZYbnA45PgnF3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cArcaz/btqCrPItHyk/beiLRw1sCZYbnA45PgnF3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cArcaz/btqCrPItHyk/beiLRw1sCZYbnA45PgnF3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcArcaz%2FbtqCrPItHyk%2FbeiLRw1sCZYbnA45PgnF3k%2Fimg.png&quot; data-filename=&quot;Screenshot from 2020-03-04 14-45-44.png&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;566&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 사진은 class index가 &quot;tench&quot;(물고기 종류 중 하나)인 이미지들이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 학습시킬 data 준비가 완료되었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-2. VGG 모델 구현하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나는 vgg19 모델을 사용하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;vgg19의 코드는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1583301363899&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv = nn.Sequential(
            #3 224 128
            nn.Conv2d(3, 64, 3, padding=1),nn.LeakyReLU(0.2),
            nn.Conv2d(64, 64, 3, padding=1),nn.LeakyReLU(0.2),
            nn.MaxPool2d(2, 2),
            #64 112 64
            nn.Conv2d(64, 128, 3, padding=1),nn.LeakyReLU(0.2),
            nn.Conv2d(128, 128, 3, padding=1),nn.LeakyReLU(0.2),
            nn.MaxPool2d(2, 2),
            #128 56 32
            nn.Conv2d(128, 256, 3, padding=1),nn.LeakyReLU(0.2),
            nn.Conv2d(256, 256, 3, padding=1),nn.LeakyReLU(0.2),
            nn.Conv2d(256, 256, 3, padding=1),nn.LeakyReLU(0.2),
            nn.MaxPool2d(2, 2),
            #256 28 16
            nn.Conv2d(256, 512, 3, padding=1),nn.LeakyReLU(0.2),
            nn.Conv2d(512, 512, 3, padding=1),nn.LeakyReLU(0.2),
            nn.Conv2d(512, 512, 3, padding=1),nn.LeakyReLU(0.2),
            nn.MaxPool2d(2, 2),
            #512 14 8
            nn.Conv2d(512, 512, 3, padding=1),nn.LeakyReLU(0.2),
            nn.Conv2d(512, 512, 3, padding=1),nn.LeakyReLU(0.2),
            nn.Conv2d(512, 512, 3, padding=1),nn.LeakyReLU(0.2),
            nn.MaxPool2d(2, 2)
        )
        #512 7 4

        self.avg_pool = nn.AvgPool2d(7)
        #512 1 1
        self.classifier = nn.Linear(512, 1000)
        &quot;&quot;&quot;
        self.fc1 = nn.Linear(512*2*2,4096)
        self.fc2 = nn.Linear(4096,4096)
        self.fc3 = nn.Linear(4096,10)
        &quot;&quot;&quot;

    def forward(self, x):
        #print(x.size())
        features = self.conv(x)
        #print(features.size())
        x = self.avg_pool(features)
        #print(avg_pool.size())
        x = x.view(features.size(0), -1)
        #print(flatten.size())
        x = self.classifier(x)
        #x = self.softmax(x)
        return x, features&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;간단히 쓱 훑어보아도 layer가 19개로 구성되어 있다는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1583302072921&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;device = torch.device(&quot;cuda:0&quot; if torch.cuda.is_available() else &quot;cpu&quot;)

net = Net()
net = net.to(device)
param = list(net.parameters())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그리고 위 코드의 첫번째 줄을 통해 device라는 변수명에 GPU 디바이스를 지정/저장해준다.&lt;/p&gt;
&lt;p&gt;torch.cuda.is_available() 은 GPU를 사용할 수 있는지 반환하는 메소드이다.&lt;/p&gt;
&lt;p&gt;그다음, net=Net() 을 통해 Net을 초기화해주고,&lt;/p&gt;
&lt;p&gt;net.to(device) 구문을 통해 해당 네트워크를 GPU에서 돌아가는 네트워크로 지정한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1583302406826&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch.optim as optim

criterion = nn.CrossEntropyLoss().cuda()
optimizer = optim.Adam(net.parameters(),lr=0.00001)

idx2label = []
cls2label = {}
with open(&quot;./imagenet_class_index.json&quot;, &quot;r&quot;) as read_file:
    class_idx = json.load(read_file)
    idx2label = [class_idx[str(k)][1] for k in range(len(class_idx))]
    cls2label = {class_idx[str(k)][0]: class_idx[str(k)][1] for k in range(len(class_idx))}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그 후 criterion과 optimizer를 정의한다.&lt;/p&gt;
&lt;p&gt;criterion은 일반적으로 loss라고 부르며, 이를 통해 학습을 위한 loss값을 계산하게 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Adam optimzer는 현재 자주 사용되는 옵티마이저로,&lt;/p&gt;
&lt;p&gt;학습 시 현재의 미분값 뿐만이 아니라, 이전 결과에 따른 관성 모멘트를 가지고 있는 것이 특징이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그다음, imagenet_class_index.json 파일을 다운로드 받아 열어준다.&lt;/p&gt;
&lt;p&gt;ImageNet은 총 1000개의 class로 구성되어 있고 단순히 &quot;cat&quot;&amp;nbsp; &quot;dog&quot; 가 아니라 &quot;&lt;span&gt;n01440764&quot; 와 같은&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;직관적으로 파악하기 어려운 index로 구분되어 있기 때문에 이를 알기 쉬운 label로 변환하는 작업이다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;다음은 imagenet_class_index.json 파일의 구조이다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;이 파일은 구글링으로 쉽게 다운받을 수 있을 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2020-03-04 15-18-20.png&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;943&quot; width=&quot;640&quot; height=&quot;609&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oeSTu/btqCqNqRuME/so3eNSB8tkjWpWzJmWsFp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oeSTu/btqCqNqRuME/so3eNSB8tkjWpWzJmWsFp1/img.png&quot; data-alt=&quot;imagenet_class_index.json&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oeSTu/btqCqNqRuME/so3eNSB8tkjWpWzJmWsFp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoeSTu%2FbtqCqNqRuME%2Fso3eNSB8tkjWpWzJmWsFp1%2Fimg.png&quot; data-filename=&quot;Screenshot from 2020-03-04 15-18-20.png&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;943&quot; width=&quot;640&quot; height=&quot;609&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;imagenet_class_index.json&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-3. VGG 모델 실행하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행 코드는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1583302937720&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for epoch in range(3):  # loop over the dataset multiple times
    running_loss = 0.0

    if(epoch&amp;gt;0):
        net = Net()
        net.load_state_dict(torch.load(save_path))
        net.to(device)

    for i, data in enumerate(trainloader, 0):
        # get the inputs
        inputs, labels = data
        inputs, labels = inputs.to(device), labels.to(device)
        # zero the parameter gradients
        optimizer.zero_grad()
        outputs,f = net(inputs)
        loss = criterion(outputs, labels)

        loss.backward()
        optimizer.step()

        if(loss.item() &amp;gt; 1000):
            print(loss.item())
            for param in net.parameters():
                print(param.data)
        # print statistics
        running_loss += loss.item()
        if i % 50 == 49:    # print every 2000 mini-batches
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 50))
            running_loss = 0.0
    save_path=&quot;/data/data1/minjoo/workspace/vgg/imagenet_vgg16_result.pth&quot;
    torch.save(net.state_dict(), save_path)
        #print(&quot;\n&quot;)

print('Finished Training')

class_correct = list(0. for i in range(1000))
class_total = list(0. for i in range(1000))
with torch.no_grad():
    for data in testloader:
        images, labels = data
        images = images.cuda()
        labels = labels.cuda()
        outputs,_ = net(images)
        _, predicted = torch.max(outputs, 1)
        c = (predicted == labels).squeeze()
        for i in range(16):
            label = labels[i]
            class_correct[label] += c[i].item()
            class_total[label] += 1

accuracy_sum=0
for i in range(1000):
    temp = 100 * class_correct[i] / class_total[i]
    print('Accuracy of %5s : %2d %%' % (
        idx2label[i], temp))
    accuracy_sum+=temp
print('Accuracy average: ', accuracy_sum/1000)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;나는 빠르게 실행시키기 위해 epoch을 일단 3으로 해줬는데 더 많이 실행시킬수록 loss가 줄어드니 좋을 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 1 epoch이 실행될 때마다 net을 저장해주고 다음 epoch을 돌 때 그 net을 불러온다.&lt;/p&gt;
&lt;p&gt;이는 중간에 실행을 끊더라도 다시 실행시킬 때 처음부터 training되는 것이 아닌, 끊은 시점부터 training되도록 하기 위함이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 사진은 2 epoch째 실행되고 있는 사진이다.&lt;/p&gt;
&lt;p&gt;처음에는 loss가 6.9였는데 1정도 줄어든 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot from 2020-03-04 15-26-59.png&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;592&quot; width=&quot;645&quot; height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWZckl/btqCrku92hj/XA1ce8kqDmD2RszySh0pS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWZckl/btqCrku92hj/XA1ce8kqDmD2RszySh0pS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWZckl/btqCrku92hj/XA1ce8kqDmD2RszySh0pS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWZckl%2FbtqCrku92hj%2FXA1ce8kqDmD2RszySh0pS1%2Fimg.png&quot; data-filename=&quot;Screenshot from 2020-03-04 15-26-59.png&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;592&quot; width=&quot;645&quot; height=&quot;522&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;training이 완료되면 accuracy를 계산하여 각 class의 정확도를 print해주고,&lt;/p&gt;
&lt;p&gt;추가로 1000개 class의 accuracy의 평균도 계산하여 마지막에 print해준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* 참고한 사이트&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://poddeeplearning.readthedocs.io/ko/latest/CNN/VGG19%20+%20GAP%20+%20CAM/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://poddeeplearning.readthedocs.io/ko/latest/CNN/VGG19%20+%20GAP%20+%20CAM/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1583303361639&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;VGG Net 과 CAM 구현 - POD_Deep-Learning&quot; data-og-description=&quot; VGG Net 과 CAM 구현 Initial import torch import torchvision import torchvision.transforms as transforms torch libary init torch.cuda.is_available() torch.cuda.is_available 값이 True 면, 현재 GPU를 사용한 학습이 가능하다는 뜻, False면 불가능 import torch import torchvision import&quot; data-og-host=&quot;poddeeplearning.readthedocs.io&quot; data-og-source-url=&quot;https://poddeeplearning.readthedocs.io/ko/latest/CNN/VGG19%20+%20GAP%20+%20CAM/&quot; data-og-url=&quot;https://poddeeplearning.readthedocs.io/ko/latest/CNN/VGG19%20+%20GAP%20+%20CAM/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bQqmfl/hyFax3IqMa/rRsm5qoQa1VWnJo1TymLAK/img.jpg?width=835&amp;amp;height=392&amp;amp;face=41_44_69_75,https://scrap.kakaocdn.net/dn/dxP3jZ/hyFaEV47at/P8dg6mhbwNxSomF5e1WnS0/img.png?width=402&amp;amp;height=512&amp;amp;face=0_0_402_512,https://scrap.kakaocdn.net/dn/eLpix/hyFauFVxWv/M3KjkLH3UlogAHn7i0ClBK/img.gif?width=512&amp;amp;height=396&amp;amp;face=0_0_512_396&quot;&gt;&lt;a href=&quot;https://poddeeplearning.readthedocs.io/ko/latest/CNN/VGG19%20+%20GAP%20+%20CAM/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://poddeeplearning.readthedocs.io/ko/latest/CNN/VGG19%20+%20GAP%20+%20CAM/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bQqmfl/hyFax3IqMa/rRsm5qoQa1VWnJo1TymLAK/img.jpg?width=835&amp;amp;height=392&amp;amp;face=41_44_69_75,https://scrap.kakaocdn.net/dn/dxP3jZ/hyFaEV47at/P8dg6mhbwNxSomF5e1WnS0/img.png?width=402&amp;amp;height=512&amp;amp;face=0_0_402_512,https://scrap.kakaocdn.net/dn/eLpix/hyFauFVxWv/M3KjkLH3UlogAHn7i0ClBK/img.gif?width=512&amp;amp;height=396&amp;amp;face=0_0_512_396');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;VGG Net 과 CAM 구현 - POD_Deep-Learning&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt; VGG Net 과 CAM 구현 Initial import torch import torchvision import torchvision.transforms as transforms torch libary init torch.cuda.is_available() torch.cuda.is_available 값이 True 면, 현재 GPU를 사용한 학습이 가능하다는 뜻, False면 불가능 import torch import torchvision import&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;poddeeplearning.readthedocs.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://tutorials.pytorch.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://tutorials.pytorch.kr/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1583303392647&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;파이토치(PyTorch) 튜토리얼에 오신 것을 환영합니다 &amp;mdash; PyTorch Tutorials 1.4.0 documentation&quot; data-og-description=&quot;Shortcuts&quot; data-og-host=&quot;tutorials.pytorch.kr&quot; data-og-source-url=&quot;https://tutorials.pytorch.kr/&quot; data-og-url=&quot;https://tutorials.pytorch.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gzfSW/hyE9nuT2b4/Sco0Qtuo07XHnH8iwHYTIK/img.png?width=400&amp;amp;height=280&amp;amp;face=183_32_210_62,https://scrap.kakaocdn.net/dn/VTuhk/hyFauMG2RA/W2PfW0nfL0z11CFrexjl7k/img.png?width=400&amp;amp;height=280&amp;amp;face=0_0_400_280,https://scrap.kakaocdn.net/dn/KdDlf/hyFaGsOZ67/UDQImKJQH1HIGyzr77z8Fk/img.png?width=400&amp;amp;height=280&amp;amp;face=0_0_400_280&quot;&gt;&lt;a href=&quot;https://tutorials.pytorch.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tutorials.pytorch.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gzfSW/hyE9nuT2b4/Sco0Qtuo07XHnH8iwHYTIK/img.png?width=400&amp;amp;height=280&amp;amp;face=183_32_210_62,https://scrap.kakaocdn.net/dn/VTuhk/hyFauMG2RA/W2PfW0nfL0z11CFrexjl7k/img.png?width=400&amp;amp;height=280&amp;amp;face=0_0_400_280,https://scrap.kakaocdn.net/dn/KdDlf/hyFaGsOZ67/UDQImKJQH1HIGyzr77z8Fk/img.png?width=400&amp;amp;height=280&amp;amp;face=0_0_400_280');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;파이토치(PyTorch) 튜토리얼에 오신 것을 환영합니다 &amp;mdash; PyTorch Tutorials 1.4.0 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Shortcuts&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;tutorials.pytorch.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Deep Learning</category>
      <category>cnn</category>
      <category>DeepLearning</category>
      <category>imagenet</category>
      <category>PyTorch</category>
      <category>vgg16</category>
      <category>VGG19</category>
      <category>VGGNet</category>
      <category>딥러닝</category>
      <category>이미지넷</category>
      <category>파이토치</category>
      <author>mjoooo</author>
      <guid isPermaLink="true">https://minjoos.tistory.com/6</guid>
      <comments>https://minjoos.tistory.com/6#entry6comment</comments>
      <pubDate>Wed, 4 Mar 2020 15:30:38 +0900</pubDate>
    </item>
    <item>
      <title>[python] Selenium으로 웹 페이지 크롤링하기 2 / 표(table)</title>
      <link>https://minjoos.tistory.com/5</link>
      <description>&lt;p&gt;지난 포스팅에서는 웹 페이지에서 원하는 평문(text)를 크롤링하는 방법에서 알아보았다.&lt;/p&gt;
&lt;p&gt;(아래 링크 참조)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://minjoos.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/02/14 - [이모저모] - [python] Selenium으로 웹 페이지 크롤링하기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1582521655254&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[python] Selenium으로 웹 페이지 크롤링하기&quot; data-og-description=&quot;1. Selenium 이란? 이번 포스팅에서는 selenium이라는 프레임워크를 통해 웹 페이지를 크롤링하는 방법에 대해 간단히 살펴보겠다. Selenium이란 주로 웹앱을 테스트하는 웹 프레임워크이다. webdriver의 API를 통..&quot; data-og-host=&quot;minjoos.tistory.com&quot; data-og-source-url=&quot;https://minjoos.tistory.com/4&quot; data-og-url=&quot;https://minjoos.tistory.com/4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gPuQS/hyE2z3oAoS/jZTniySPyfff8tEbikXam1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/o0wIb/hyE30SAum7/NjvCagYGlpY3B1DttnKG00/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/uKQ1U/hyE2E4HRas/BADHdv71xtU9K4CGuVw6Q1/img.png?width=1907&amp;amp;height=763&amp;amp;face=0_0_1907_763&quot;&gt;&lt;a href=&quot;https://minjoos.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minjoos.tistory.com/4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gPuQS/hyE2z3oAoS/jZTniySPyfff8tEbikXam1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/o0wIb/hyE30SAum7/NjvCagYGlpY3B1DttnKG00/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/uKQ1U/hyE2E4HRas/BADHdv71xtU9K4CGuVw6Q1/img.png?width=1907&amp;amp;height=763&amp;amp;face=0_0_1907_763');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[python] Selenium으로 웹 페이지 크롤링하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;1. Selenium 이란? 이번 포스팅에서는 selenium이라는 프레임워크를 통해 웹 페이지를 크롤링하는 방법에 대해 간단히 살펴보겠다. Selenium이란 주로 웹앱을 테스트하는 웹 프레임워크이다. webdriver의 API를 통..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;minjoos.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 평문이 아닌 특정 형태를 가지고 있는 정보들 중에서,&lt;/p&gt;
&lt;p&gt;표(table)에 담긴 정보를 크롤링하는 방법에 대해 알아보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(사실 별거 없고 코드만 살짝 바뀔 뿐이다)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1582522435292&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from selenium import webdriver
import datetime
driver = webdriver.Chrome('./chromedriver')
driver.implicitly_wait(1)
driver.get('http://www.kma.go.kr/info_open/info/open.jsp')
driver.implicitly_wait(1)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;일단 import 해줄 것들을 해주고, 크롤링할 웹 사이트를 정해 url을 넣어준다.&lt;/p&gt;
&lt;p&gt;나는 기상청 사이트 중 테이블이 있는 페이지로 정했다. (아래 사진 참조)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RWqHE/btqCgmFsVq0/BpkKky0F9pMUYLn8dFfdK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RWqHE/btqCgmFsVq0/BpkKky0F9pMUYLn8dFfdK1/img.png&quot; data-alt=&quot;http://www.kma.go.kr/info_open/info/open.jsp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RWqHE/btqCgmFsVq0/BpkKky0F9pMUYLn8dFfdK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRWqHE%2FbtqCgmFsVq0%2FBpkKky0F9pMUYLn8dFfdK1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;http://www.kma.go.kr/info_open/info/open.jsp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 위 사진에 보이는 table에 담긴 정보를 크롤링 할 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저 개발자도구(F12)를 열어 테이블 위치의 코드를 살펴본다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rQlhU/btqCckbtSqy/iJOlOGp1KaLbKZQBJ6yIWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rQlhU/btqCckbtSqy/iJOlOGp1KaLbKZQBJ6yIWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rQlhU/btqCckbtSqy/iJOlOGp1KaLbKZQBJ6yIWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrQlhU%2FbtqCckbtSqy%2FiJOlOGp1KaLbKZQBJ6yIWK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;테이블의 이름은 &quot;table_information&quot; 인 것을 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1582523261538&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;table = driver.find_element_by_class_name('table_information')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;따라서 find_element_by_class_name 메소드를 이용해 위 테이블을 table 변수에 담아준다.&lt;/p&gt;
&lt;p&gt;이제 table이 어떻게 구성되어 있는지 살펴보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;430&quot; height=&quot;558&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IYOl3/btqCcALYNUj/CAFdsKWHK3y1L9b86qIq9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IYOl3/btqCcALYNUj/CAFdsKWHK3y1L9b86qIq9K/img.png&quot; data-alt=&quot;&amp;amp;#39;table_information&amp;amp;#39; 테이블 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IYOl3/btqCcALYNUj/CAFdsKWHK3y1L9b86qIq9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIYOl3%2FbtqCcALYNUj%2FCAFdsKWHK3y1L9b86qIq9K%2Fimg.png&quot; width=&quot;430&quot; height=&quot;558&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;'table_information' 테이블 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;테이블은 위와 같이 &amp;lt;table&amp;gt;안에 &amp;lt;tbody&amp;gt;, &amp;lt;tbdoy&amp;gt;안에 &amp;lt;tr&amp;gt;, &amp;lt;tr&amp;gt;안에 &amp;lt;td&amp;gt; 순으로 포함되어 있다.&lt;/p&gt;
&lt;p&gt;각각이 무엇을 나타내는지 알아보고 싶다면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kB1dj/btqCe5qtDuU/3V7HSZ5pIs4VGrRp4F32K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kB1dj/btqCe5qtDuU/3V7HSZ5pIs4VGrRp4F32K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kB1dj/btqCe5qtDuU/3V7HSZ5pIs4VGrRp4F32K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkB1dj%2FbtqCe5qtDuU%2F3V7HSZ5pIs4VGrRp4F32K0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;개발자 도구 상단 왼쪽의 클릭 버튼을 활성화해주어(위 사진의 파란색 버튼) 마우스의 커서가 가리키는 부분의 코드를 바로 알 수 있게끔 해준다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇게 하면 원하는 위치에 마우스를 갖다 대면 그 부분의 코드를 바로 찾을 수 있고, 반대로 특정 코드에 마우스를 갖다 대면 웹 페이지에 파란색으로 그 코드가 가리키는 부분이 표시된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결과적으로 각 &lt;b&gt;&amp;lt;tbody&amp;gt;&lt;/b&gt;는 테이블 내용이 있는 body부분을 나타내는 것이고&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;lt;tr&amp;gt;...&amp;lt;tr&amp;gt;&lt;/b&gt; 부분은 그 테이블을 구성하는 각 &lt;b&gt;열&lt;/b&gt;을 말한다.&lt;/p&gt;
&lt;p&gt;&amp;lt;tr&amp;gt;안에 있는 &lt;b&gt;&amp;lt;th&amp;gt; &amp;lt;td&amp;gt;&lt;/b&gt; 등은 그 열을 구성하는 각 &lt;b&gt;행&lt;/b&gt;을 말한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;따라서,&lt;/p&gt;
&lt;p&gt;내가 위 테이블의 [주요업무] [목록] [세부내용] [공개주기] [공개시기] [경로] [담당부서] 중&lt;/p&gt;
&lt;p&gt;[목록] 만을 크롤링 하고 싶다 하면 아래와 같이 코드를 짜면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1582526211802&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tbody = table.find_element_by_tag_name(&quot;tbody&quot;)
rows = tbody.find_elements_by_tag_name(&quot;tr&quot;)
for index, value in enumerate(rows):
    body=value.find_elements_by_tag_name(&quot;td&quot;)[0]
    print(body.text)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;여기서 잠깐,&amp;nbsp; 목록은 2번째 행인데 왜&amp;nbsp;&lt;span&gt;body=value.find_elements_by_tag_name(&lt;/span&gt;&lt;span&gt;&quot;td&quot;&lt;/span&gt;&lt;span&gt;)&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;0]&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이냐?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[1] 이어야 하는것 아닌가? 라고 생각할 수 있지만&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발자도구 코드를 잘 살펴보면 첫번째 행인 [주요업무]는 &amp;lt;td&amp;gt;가 아니라 &amp;lt;th&amp;gt;임을 알 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우리는 find_elements_by_tag_name을 이용해 &amp;lt;td&amp;gt;인 것들 중, 첫번째인 [목록]을 출력해야 하므로&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[0]이 되어야 하는 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 코드를 실행시켜 보면&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;524&quot; height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pxO9i/btqCdgfaUML/Ki9vkIhakE1YS1PKaCnWXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pxO9i/btqCdgfaUML/Ki9vkIhakE1YS1PKaCnWXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pxO9i/btqCdgfaUML/Ki9vkIhakE1YS1PKaCnWXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpxO9i%2FbtqCdgfaUML%2FKi9vkIhakE1YS1PKaCnWXK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;524&quot; height=&quot;442&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래와 같이 출력이 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 활용해서 하나의 열에 있는 정보를 프린트 하고 싶다 하면, 코드를 아래와 같이 살짝만 바꾸어 주면 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1582527068361&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;table = driver.find_element_by_class_name('table_information')
tbody = table.find_element_by_tag_name(&quot;tbody&quot;)
rows = tbody.find_elements_by_tag_name(&quot;tr&quot;)[0]
body= rows.find_elements_by_tag_name(&quot;td&quot;)
for index, value in enumerate(body):
    print(value.text)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;tr&amp;gt;중 첫번째([0]) 열을 rows로 받아서 &amp;lt;td&amp;gt; 들의 text를 출력하는 코드이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 코드를 실행시켜 보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;664&quot; height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ye94H/btqCev31rNH/tunrsWRgwqz3S6GzaQfwj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ye94H/btqCev31rNH/tunrsWRgwqz3S6GzaQfwj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ye94H/btqCev31rNH/tunrsWRgwqz3S6GzaQfwj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYe94H%2FbtqCev31rNH%2FtunrsWRgwqz3S6GzaQfwj0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;664&quot; height=&quot;186&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;아래와 같이 잘 출력된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;즉, 표(table)를 크롤링하기 위해 무엇보다 중요한 것은&lt;/p&gt;
&lt;p&gt;&lt;b&gt;개발자 도구로 테이블의 구조(예를 들어 &amp;lt;tbody&amp;gt;안에 &amp;lt;tr&amp;gt;이 있고, &amp;lt;tr&amp;gt;안에 ... )를 파악하는 것&lt;/b&gt;이며,&lt;/p&gt;
&lt;p&gt;구조에 따라 코드를 조금씩만 바꿔주면 원하는 정보를 크롤링할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 포스팅에서는&lt;/p&gt;
&lt;p&gt;blank에 값 입력, 버튼 클릭 등 웹 페이지를 코드로 제어한 후&lt;/p&gt;
&lt;p&gt;나오는 정보를 크롤링하는 방법에 대해 알아보도록 하겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>이모저모</category>
      <category>python</category>
      <category>selenium</category>
      <category>웹크롤링</category>
      <category>크롤링</category>
      <category>테이블 크롤링</category>
      <category>파이썬</category>
      <category>표 크롤링</category>
      <author>mjoooo</author>
      <guid isPermaLink="true">https://minjoos.tistory.com/5</guid>
      <comments>https://minjoos.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 24 Feb 2020 16:00:02 +0900</pubDate>
    </item>
    <item>
      <title>[python] Selenium으로 웹 페이지 크롤링하기 1 / 평문(text)</title>
      <link>https://minjoos.tistory.com/4</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Selenium 이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;이번 포스팅에서는 selenium이라는 프레임워크를 통해 웹 페이지를 크롤링하는 방법에 대해 간단히 살펴보겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Selenium이란 주로 웹앱을 테스트하는 웹 프레임워크이다.&lt;/p&gt;
&lt;p&gt;webdriver의 API를 통해 브라우저를 제어하기 때문에 자바스크립트에 의해 동적으로 생성되는 사이트의&lt;/p&gt;
&lt;p&gt;데이터를 크롤링할 때 매우 유용하게 사용되는 스크래핑 도구이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Selenium 사용법&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;selenium은 크롬이나 파이어폭스같은 각 브라우저의 webdriver API를 통해 브라우저를 제어한다.&lt;/p&gt;
&lt;p&gt;따라서 자신이 쓰고자 하는 브라우저의 driver를 다운받아서 프로그래밍 언어를 통해 제어하는 것이 일반적이다.&lt;/p&gt;
&lt;p&gt;나는 크롬을 주로 사용하기 때문에 chromedriver를 먼저 다운받도록 하겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://chromedriver.chromium.org/downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://chromedriver.chromium.org/downloads&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1581660513320&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Downloads - ChromeDriver - WebDriver for Chrome&quot; data-og-description=&quot;WebDriver for Chrome&quot; data-og-host=&quot;chromedriver.chromium.org&quot; data-og-source-url=&quot;https://chromedriver.chromium.org/downloads&quot; data-og-url=&quot;https://chromedriver.chromium.org/downloads&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://chromedriver.chromium.org/downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chromedriver.chromium.org/downloads&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Downloads - ChromeDriver - WebDriver for Chrome&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;WebDriver for Chrome&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;chromedriver.chromium.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;여기서 chromedrvier를 다운받을 수 있는데 여기서 주의해야 할 점은,&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;자신의 pc에 있는 크롬 브라우저의 버전에 맞는 driver를 다운로드 받아야 한다&lt;/b&gt;&lt;/span&gt;는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;708&quot; height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djZZIp/btqB1mZSUUB/ZOrKn6YawUQzwioks7fdUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djZZIp/btqB1mZSUUB/ZOrKn6YawUQzwioks7fdUk/img.png&quot; data-alt=&quot;https://chromedriver.chromium.org/downloads&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djZZIp/btqB1mZSUUB/ZOrKn6YawUQzwioks7fdUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjZZIp%2FbtqB1mZSUUB%2FZOrKn6YawUQzwioks7fdUk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;708&quot; height=&quot;201&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://chromedriver.chromium.org/downloads&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 여러가지 버전이 있으니 자신의 크롬 브라우저 버전을 확인 후, 버전에 맞는 driver를 다운받는다.&lt;/p&gt;
&lt;p&gt;(크롬 버전은 &lt;b&gt;메뉴&amp;gt; 도움말&amp;gt; Chrome 정보 &lt;/b&gt;에서 확인이 가능하다.)&lt;/p&gt;
&lt;p&gt;(혹시 최신 버전이 아니라면 이 기회에 최신 버전으로 업데이트 해보자!)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;533&quot; height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfaORN/btqBYd4DAep/7YYHx7UGYaW4HfKaiSBhg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfaORN/btqBYd4DAep/7YYHx7UGYaW4HfKaiSBhg1/img.png&quot; data-alt=&quot;chrome 버전 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfaORN/btqBYd4DAep/7YYHx7UGYaW4HfKaiSBhg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfaORN%2FbtqBYd4DAep%2F7YYHx7UGYaW4HfKaiSBhg1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;533&quot; height=&quot;209&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;chrome 버전 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇게 해서 다운로드 받은 알집 파일의 압축을 풀면 chromedriver.exe 파일이 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;490&quot; height=&quot;359&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpAmxs/btqBZM551UC/HQSnLkYfzLN2VhkzLl0Z91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpAmxs/btqBZM551UC/HQSnLkYfzLN2VhkzLl0Z91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpAmxs/btqBZM551UC/HQSnLkYfzLN2VhkzLl0Z91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpAmxs%2FbtqBZM551UC%2FHQSnLkYfzLN2VhkzLl0Z91%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;490&quot; height=&quot;359&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 파일을 내가 작업할 디렉토리에 넣는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;175&quot; height=&quot;114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYrZ1S/btqBZNqnUmZ/JUvfSpd6tVcPeb3riw1Btk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYrZ1S/btqBZNqnUmZ/JUvfSpd6tVcPeb3riw1Btk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYrZ1S/btqBZNqnUmZ/JUvfSpd6tVcPeb3riw1Btk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYrZ1S%2FbtqBZNqnUmZ%2FJUvfSpd6tVcPeb3riw1Btk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;175&quot; height=&quot;114&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 selenium을 설치해야 하는데, 늘 그렇듯 터미널에서 pip 명령어로 다운받아 준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;497&quot; height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brbx4W/btqBYuyl1E0/0Kc8Z9XFP5j58KUwxnvk70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brbx4W/btqBYuyl1E0/0Kc8Z9XFP5j58KUwxnvk70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brbx4W/btqBYuyl1E0/0Kc8Z9XFP5j58KUwxnvk70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrbx4W%2FbtqBYuyl1E0%2F0Kc8Z9XFP5j58KUwxnvk70%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;497&quot; height=&quot;150&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;나는 예전에 설치를 해놓았기 때문에 already satisfied라고 떴다.&lt;/p&gt;
&lt;p&gt;그럼 이제 코딩을 시작하면 된다!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 파이썬을 통한 크롤링 방법 (feat. Selenium)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1581662123330&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from selenium import webdriver
import datetime
driver = webdriver.Chrome('./chromedriver')
driver.implicitly_wait(1)
driver.get('https://minjoos.tistory.com/')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;기본 세팅은 여기까지이다.&lt;/p&gt;
&lt;p&gt;먼저 import 해줘야 할 것들을 Import 해주고,&lt;/p&gt;
&lt;p&gt;마지막 줄에 본인이 크롤링 하고 싶은 웹 페이지의 url을 넣어준다.&lt;/p&gt;
&lt;p&gt;(implicity_wait()은 브라우저에서 사용되는 엔진 자체에서 파싱되는 시간을 기다려 주는 메소드라고 할 수 있다.&lt;/p&gt;
&lt;p&gt;시간이 오래 걸리는 작업일수록 적절히 중간중간에 Implicity_wait()를 넣어주는게 좋다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기까지 하고 실행을 시키면 'Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다'라는 문구와 함께&lt;/p&gt;
&lt;p&gt;url로 넣어주었던 웹 페이지가 실행된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;660&quot; height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4ZXsp/btqB1dvmJkR/l35LhfgHQ37CAPPvdRNKik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4ZXsp/btqB1dvmJkR/l35LhfgHQ37CAPPvdRNKik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4ZXsp/btqB1dvmJkR/l35LhfgHQ37CAPPvdRNKik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4ZXsp%2FbtqB1dvmJkR%2Fl35LhfgHQ37CAPPvdRNKik%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;660&quot; height=&quot;508&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이제 개발자 도구를 통해 자신이 얻고 싶은 정보의 위치가 어디인지 파악한 다음, 코드에 넣는 작업을 해보겠다.&lt;/p&gt;
&lt;p&gt;F12를 눌러 개발자 도구를 실행시키면, 페이지를 구성하고 있는 코드가 보인다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;519&quot; height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IOxLy/btqBZhlgtmg/c963keVVykrsIDHo3xRjt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IOxLy/btqBZhlgtmg/c963keVVykrsIDHo3xRjt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IOxLy/btqBZhlgtmg/c963keVVykrsIDHo3xRjt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIOxLy%2FbtqBZhlgtmg%2Fc963keVVykrsIDHo3xRjt1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;519&quot; height=&quot;60&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그 중에서 맨 왼쪽 상단 버튼을 클릭하면 자신이 커서를 놓는 위치의 코드로 바로 이동할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boeGJI/btqB1cXAb2o/MOVit0hMDA7pGQmUGi78RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boeGJI/btqB1cXAb2o/MOVit0hMDA7pGQmUGi78RK/img.png&quot; data-alt=&quot;&amp;amp;#39;민주의네모들&amp;amp;#39;에 마우스 커서를 올리니 개발자도구 창에서 해당 위치의 코드로 바로 이동했다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boeGJI/btqB1cXAb2o/MOVit0hMDA7pGQmUGi78RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboeGJI%2FbtqB1cXAb2o%2FMOVit0hMDA7pGQmUGi78RK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;'민주의네모들'에 마우스 커서를 올리니 개발자도구 창에서 해당 위치의 코드로 바로 이동했다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 사진의 개발자도구 창을 보면 '민주의네모들'에 해당하는 위치의 class 이름이 &quot;tit_post&quot;임을 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1581663017360&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;title = driver.find_element_by_class_name('tit_post')
print(title.text)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;따라서 find_element_by_class_name() 메소드를 통해 title에 해당 정보를 넣어주고,&lt;/p&gt;
&lt;p&gt;title.text로 프린트를 해준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 파일을 실행시켜주면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;518&quot; height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P5zzo/btqBXF8o872/ITRZj98R2w6cQk4lyRcEq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P5zzo/btqBXF8o872/ITRZj98R2w6cQk4lyRcEq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P5zzo/btqBXF8o872/ITRZj98R2w6cQk4lyRcEq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP5zzo%2FbtqBXF8o872%2FITRZj98R2w6cQk4lyRcEq0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;518&quot; height=&quot;138&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;제목이 잘 출력되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;class이름 이외에도, XPath를 이용해 크롤링을 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE15dg/btqBXUYyyNj/liJjDeLEeQUubYBPuPF8Dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE15dg/btqBXUYyyNj/liJjDeLEeQUubYBPuPF8Dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE15dg/btqBXUYyyNj/liJjDeLEeQUubYBPuPF8Dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE15dg%2FbtqBXUYyyNj%2FliJjDeLEeQUubYBPuPF8Dk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;해당 위치의 코드에 마우스 오른쪽 버튼을 클릭해서 Copy&amp;gt;Copy XPath한 후,&lt;/p&gt;
&lt;p&gt;코드에 다음과 같이 붙여넣는다.&lt;/p&gt;
&lt;pre id=&quot;code_1581663353933&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;title = driver.find_element_by_xpath('//*[@id=&quot;dkHead&quot;]/div[2]/div/a')
print(title.text)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 때, 메소드는 find_element_by_xpath 이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 파일을 실행시켜주면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;517&quot; height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYqYjc/btqBXWoC5R6/GGoT3Yc2GTNFWg0YS44FM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYqYjc/btqBXWoC5R6/GGoT3Yc2GTNFWg0YS44FM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYqYjc/btqBXWoC5R6/GGoT3Yc2GTNFWg0YS44FM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYqYjc%2FbtqBXWoC5R6%2FGGoT3Yc2GTNFWg0YS44FM0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;517&quot; height=&quot;86&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;똑같이 잘 프린트 되는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이를 활용해서 다른 요소도 프린트 해보겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3Tix2/btqBYf9kTMQ/UOCnFD0SDNKxwMQkVRXqm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3Tix2/btqBYf9kTMQ/UOCnFD0SDNKxwMQkVRXqm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3Tix2/btqBYf9kTMQ/UOCnFD0SDNKxwMQkVRXqm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3Tix2%2FbtqBYf9kTMQ%2FUOCnFD0SDNKxwMQkVRXqm0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;해당 XPath를 복사해서 코드에 넣어준 후, 파일을 실행시키면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;771&quot; height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyYzat/btqBYu6dDbT/wIm8Adt2e5MSXUupmIbpok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyYzat/btqBYu6dDbT/wIm8Adt2e5MSXUupmIbpok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyYzat/btqBYu6dDbT/wIm8Adt2e5MSXUupmIbpok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyYzat%2FbtqBYu6dDbT%2FwIm8Adt2e5MSXUupmIbpok%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;771&quot; height=&quot;173&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;다음과 같이 잘 실행된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 시간에는 이렇게 하나의 text를 프린트하는 것 보다는&lt;/p&gt;
&lt;p&gt;조금 더 심화된 내용인 &lt;b&gt;table 크롤링 하기&lt;/b&gt;에 대해 포스팅하겠다.&lt;/p&gt;</description>
      <category>이모저모</category>
      <category>Crawling</category>
      <category>python</category>
      <category>selenium</category>
      <category>webdriver</category>
      <category>웹크롤링</category>
      <category>크롤링</category>
      <category>파이썬</category>
      <author>mjoooo</author>
      <guid isPermaLink="true">https://minjoos.tistory.com/4</guid>
      <comments>https://minjoos.tistory.com/4#entry4comment</comments>
      <pubDate>Fri, 14 Feb 2020 16:01:41 +0900</pubDate>
    </item>
  </channel>
</rss>