VPC는 사용자가 정의하는 AWS 계정 사용자 전용 가상의 네트워크이다.
사용자는 자기가 원하는 대로 IP주소 범위 선택, 서브넷 생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워크 환경을 구성해 VPC를 생성할 수 있다.
즉 AWS용으로 나만의 개인 네트워크 망 데이터센터라고 생각하면 된다.
또한 AWS를 시작할 때 설정하는 초기 Private 네트워크라고 생각하면 된다.
Amazon VPC가 도입된 이후 인스턴스가 VPC에 속함으로써 네트워크를 구분할 수 있고 VPC 별로 필요한 설정을 통해 인스턴스에 네트워크 설정을 적용할 수 있게 되었다.
사용자는 직접 VPC를 생성해서 사용할 수도 있고 계정을 생성 시 region 별로 디폴트로 생성되는 VPC를 사용할 수도 있다.

AWS를 가장 처음 사용할 때 우리가 하는 것은 AWS VPC 네트워크를 구성하는 것이다.
IP를 약 1000개 사용한다고 가정해보자. AWS VPC를 생성해야 한다. VPC는 케익을 조각케익으로 자르듯이 세부적으로 서브넷들로 나눈다. 서브넷들을 만들어야 훗날에 만들 RDS(데이터 베이스), EC2(서버) 같은 것들을 Public/Private으로 세부 구성 가능하다.
IP 클래스 벨로그 URL
CIDR URL
Region URL


AWS Cloud 내에는 IDC(인터넷 데이터 센터)의 집합인 Region이 존재하며 Region은 2개의 Availability Zone(AZ)로 이루어져 있다.
(VPC는 Region에 상응하는 규모의 네트워크, Region에 하나씩)
인터넷 데이터 센터는 인터넷 연결의 핵심이 되는 서버를 하나로 모아 집중시킬 필요가 있을 때 설립하는 시설.
한 Region 안에 VPC를 여러 개 생성할 때 서로 IP는 겹치면 안 된다.
생성은 되지만 DNS IP를 잡지 못하는 에러가 발생한다. 예시르 기본 VPC가 192.168.0.0/16으로 생성되어 있다면 우리는 192.168 네트워크 IP 주소를 피해서 생성해야 한다.
AWS에서는 /16 ~ /28 비트의 서브넷 마스크만을 허용한다. AWS VPC를 생성할 수 있는 가장 큰 IP 대역은 /16이고 가장 작은 대역이 /28이다.
이 범위 내에서만 CIDR을 설정해야 한다.
한 번 설정된 IP 대역은 수정 불가능, 각각의 VPC는 독립적이기 때문에 서로 통신 불가능.
AWS VPC는 온프레미스와 동일한 대역의 사설 IP를 이용해 범위 내에서 VPC의 IPv4 CIDR영역을 설정한다.
한 리전 안에 VPC를 여러 개 생성할 때 서로 IP는 겹치면 안 된다. 생성은 되지만 DNS IP를 잡지 못하는 에러가 발생하기 때문이다.
ex) VPC가 172.31.0.0/16 으로 생성 됐다면 우리는 172.31 네트워크 IP 주소를 피해서 생성해야 한다.
AWS에서는 /16 ~ /28 비트의 서브넷 마스크만을 허용한다.
가장 큰 IP 대역은 /16이고 가장 작은 대역이 /28이다. (이 범위 내에서만 CIDR 설정.)
VPC 안에서 발생한 네트워크 요청을 처리하기 위해 트래픽을 어느 서브넷으로 가야할 지 알려주는 이정표를 의미한다.
각각의 서브넷은 사로 다른 네트워크 영역을 가지고 있다. 한 서브넷이 다른 서브넷으로 가기 위해서는 Routing이 필요하게 되어 있다.
각 서브넷들은 이러한 라우팅 테이블을 가지고 있고 요청이 발생하면 이 라우팅 테이블을 통해 목적지를 찾게 된다.

위 그림처럼 VPC 내부에는 기본적으로 Routing이 자동 생성되어 있고 서브넷 내의 모든 Resource는 자신이 소속된 서브넷이 아닌 다른 곳으로 향하고자 할 때 VPC Router를 거치게 된다.
각 서브넷에 라우팅 테이블이 있음으로서, VPC 내 Subnet에 할당된 Resource라면 어느 Subnet이든 다른 Subnet의 Resource와 자유롭게 통신할 수 있게 된다.
VPC는 기본적으로 격리된 네트워크 환경이다. 라우팅 테이블은 내부에서만 통신하는 Local Routing 뿐만 아니라 외부 인터넷망으로 나갈 수 있는 Routing을 가질 수 있다. 이를 인터넷 게이트웨어 (Internet Gateway)라고 한다.
VPC의 인스턴스와 인터넷 간에 통신을 할 수 있게 해준다.
VPC의 리소스와 인터넷 간의 통신을 활성화하기 위해 VPC에 연결하는 관문이라고 생각. (VPC 리소스가 인터넷으로 나가기 위한 통로.)
서브넷 단위로 외부에서 접근 가능하도록 열어주는데 VPC에 IGW를 붙여 열어준 뒤 Route Table을 통해 IGW와 EC2를 연결한다.
게이트웨이를 통해 외부로 나가면서 Private IP를 Public IP로 변환하지만 AWS에서 Public 서브넷은 IGW와 떨어져 있기 때문에 이를 연결하기 위해서는 Route Table을 사용해야 한다.

VPC 리소스 :
그림을 통해 VPC 서비스 전체 구성을 알아보자





과제를 통해 진행.
🔗 https://www.notion.so/AWS-VPC-EC2-24847405b2324370bc85233778c6a407
AWS 라우팅 테이블을 보면 0.0.0.0/0 이런 게 있다. (나의 경우 과제하면서 목격함.)
0.0.0.0은 보통 서브넷 마스크 0.0.0.0과 같이 사용되며 모든 IP를 의미한다. Local machine의 모든 IPv4 주소를 의미하기 때문에 0.0.0.0으로 접근하면 Local Host의 모든 IPv4로 되어 있는 호스트에 접근이 가능하다는 것을 말한다.
만약 Host에 정확한 주소가 할당되어 있지 않다면 각각의 Host는 그 주소를 자신이라고 주장하게 되고 이에 따라 웹 서비스에서 0.0.0.0을 지정하면 자신의 IP를 그 주소로 지정하게 되어 Local로 접근이 되는 원리다.
::/0
IPv6 버전
127.0.0.1은 로컬 호스트 즉 자기 스스로를 가리키는 IP. 포트가 인터넷이나 네트워크가 아닌 PC자체의 연결만을 수신. 도잉ㄹ한 기계에서만 접근 가능.
255.255.255.255: 브로드캐스트 용도로 사용하기 위해 예약된 IP 주소
🔗 https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/configure-subnets.html - Amazon VPC
🔗 https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_Route_Tables.html - Amazon RT
🔗 https://velog.io/@luda412/AWS-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1 - VPC, Subnet, Route Table, Internet Gateway
🔗 https://velog.io/@seeh_h/AWS-VPC-Subnet-%EA%B0%84%EB%8B%A8-%EC%A0%95%EB%A6%AC