VPC(Virtual Private Cloud)는 논리적으로 분리한 서브 네트워크로 AWS 환경 내의 네트워크 최소 단위.
원래는 컴퓨터에 랜선이라는 걸 꼽아야 인터넷이 연결됐었는데 그걸 네트워크라고 한다.
VPC는 랜선을 뽑아 나눈 물리적인 망이 아니라 논리적으로 분리한 가상의 네트워크라고 보면 된다.
그래서 이게 AWS환경에서 네트워크를 구분할 때 사용하는 가장 최소한의 단위를 VPC라고 한다.
사용자의 AWS 계정 전용 가상 네트워크, 하나의 리전에 대해 계정 당 하나의 VPC를 받는다.
그래서 사용자의 AWS 계정의 전용 가상 네트워크다. 하나의 리전에 대해 계정 당 하나의 VPC를 받는다.
Amazon EC2 와 같은 AWS 리소스를 해당 VPC 에 할당해서 실행할 수 있다.
어떤 리소스든 VPC 하나는 무조건 선택이 된다.
VPC 에서 실행된 AWS 리소스는 다른 AWS 리소스 혹은 인터넷에 연결될 수 있다.
VPC 자체가 네트워크를 의미함. EC2를 쓰면 서브넷이라는 정보가 따라다님.

출처 : https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/configure-subnets.html
이해를 돕기 위한 쉬운 그림!

하나의 유저는 하나의 가용영역에 서브넷 하나만 가진다.
가용 영역 A에 장애가 발생한 경우 서브넷 1은 이용을 못하지만 가용 영역 B가 살아있다면 서브넷 2는 이용할 수 있다.
10.0.0.0 : Network address
10.0.0.1 : VPC router 에서 사용됨.
10.0.0.2 : DNS server 로 사용됨.
10.0.0.3 : 미래에 AWS 에서 필요한 경우 사용하기 위해 남겨둠.
10.0.0.255 : Network broadcast 주소.

Nat Gateway에다가 테이블 형식으로 프라이빗 서브넷을 외부에서 요청하는 아웃바운드 트레픽을 어떤 걸 허용할지 설정한다.
그러면 실제로 NAT Gateway 테이블을 보고서 해당 리소스는 받아오고 외부에서는 접속하는 걸 막을 수 있는 Gateway라고 보면 됨.
아웃바운드 : 밖으로 나갈 때 어던 정보를 쓸지. 어떤 IP가 어떤 걸 의미하는지를 정의한 테이블

두 개의 네트워크 아키텍처 그림에서 차이점은 NAT Gateway의 배치와 Availability Zone(AZ)의 개수다
둘 다 유효한 아키텍처지만, NAT Gateway 사용 시 일반적으로 AZ마다 하나씩 배포하는 것이 Best Practice다. 즉, 첫 번째 그림처럼 Availability Zone이 하나인 경우 NAT Gateway를 하나만 두는 것이 맞다.
하지만 두 개 이상의 AZ가 있다면, 각 AZ에 NAT Gateway를 배포하는 것이 권장됨.
왜 AZ마다 NAT Gateway를 배포해야 할까?
- 고가용성(High Availability): NAT Gateway가 하나만 있으면 해당 AZ에서 장애가 발생할 경우 Private Subnet이 인터넷에 접근하지 못하게 됨.
- 비용 고려: NAT Gateway는 시간당 과금되므로 AZ마다 배포하면 비용이 증가하지만, 장애 대응 능력이 향상됨.
- AZ가 여러 개라면 각 AZ에 NAT Gateway를 배치하는 것이 더 좋은 설계.
- 비용을 절감하려면 NAT Instance를 대신 사용할 수 있지만, 관리 부담이 커짐.
ACL 과 Security Group (보안그룹)은 네트워크의 보안을 설정하는 것.
방화벽과 같은 역할을 하며, 트래픽에 대한 보안정책을 설정할 수 있다.
Security Group (보안그룹)
ACL

실제로 우리가 EC2인스턴스를 만드려면
AWS 안에/ Region 안에/ VPC 안에/ 어떤 서브넷 안에/ 만들어야 한다.
이 EC2는 망에 대한 보안 규칙을 두 가지로 설정할 수 있다.
1. Security Group : EC2와 연결되어 있다.
한 서브넷 안에 있는 EC2 여러개 적용 가능하고 각 인스턴스에 대해 적용할 수도 있다.

Amazon 은 세계 각지의 여러 곳에서 호스팅되고 있다.
위치는 Region, Availability Zone 으로 구성된다.
여러 곳에 그 실제 물리적 서버 PC가 (데이터 센터가) 위치하는 곳으로 이해하자.
• 응답속도는 AWS 센터와 이벤트 어플리케이션에 접속하는 사용자가 지리적으로 가까울수록 빠르며 멀수록 느리다.
• 예를들어 국내에 거주하는 사용자를 대상으로 하는 어플리케이션의 응답 속도를 빠르게 하고 싶다면 서울 리전을 선택해야된다.
• AWS 서비스 요금은 리전에 따라 다르다.
예를 들어 가상 서버인 EC2 타입 중 하나인 t2.medium 인스턴스는 미국 동부가 서울보다 저렴하다. 인터넷 데이터 전송 요금도 마찬가지이다. 응답속도보다 비용이 중요하다면 미국 동부 리전이 유리하다.
기지국들을 통해서 데이터가 왔다 갔다 할 텐데, 내가 요청한 기지국의 위치가 영향을 미친다.
빠른 응답 시간을 원하거나 사용자가 많을 때 위치에 기반한 응답속도가 굉장이 큰 영향을 미침.
AWS센터 <> 이벤트 어플리케니션 접속한느 사용자가 지리적으로 가까울 수록 빠르고 멀면 느리다.

한 곳에 모든 컴퓨터가 몰려있을 때, 해장 지역에 화재 등의 문제가 생기면 모든 서버가 장애가 나고 대부분 AWS 서울 Region을 쓰는 국내 많은 서비스들이 동시 장애가 날 수 있기 때문에 방지 대책을 세우기 위해 물리적으로 다른 데이터센터가 여러개 존재한다.
Availability Zone끼리는 한 AZ가 장애가 나면 다른 AZ에 빠르게 복구가 되던지 트래픽을 연결해줘야 되기 때문에 전용 선을 깔아서 데이터를 빠르게 전송할수 있다. (물리적으로 ?키로미터 정도 떨어져야 한다는 규칙이 있다..?)