VPC와 관련 기술들
VPC을 이해하기 위해선 VPN을 먼저 이해해야 한다.
VPN
같은 네트워크상에 있지만 논리적으로 다른 네트워크인것처럼 동작하게 하는 기술

VPC
VPC별로 네트워크를 구성하여 하나의 독립된 네트워크처럼 작동하게 하는 기술
- 각 VPC마다 다른 네트워크 설정을 부여할 수 있음

Subnet
VPC의 IP를 더 작은 단위로 쪼개서 리소스를 나누어 배치하는 것(더 작은 아이피 범위와 높은 서브넷마크스를 갖음)
실제 인스턴스는 VPC 내부의 서브넷에 배치된다.

private 서브넷과 public 서브넷
private 서브넷
인터넷에 접근이 불가능하고 VPC 내부에서만 통신이 가능한 서브넷
- public IP를 갖고 있지 않음
public 서브넷
인터넷에 접근이 가능하여 VPC 내부 서브넷 뿐만 아니라 외부 인터넷과도 통신이 가능한 서브넷
- public IP를 갖고 있음
private 서브넷이 외부 인터넷으로 요청을 보내고 싶다면 뒤에 나올 NAT 게이트웨이를 통해서 요청을 보낼 수 있다.
VPC에 필요한 기술들
라우터와 라우팅 테이블
네트워크 요청이 발생하면 가장 먼저 라우터로 향하고 라우팅 테이블을 참고해서 목적지로 이동한다.
라우팅 테이블에는 VPC 네트워크 범위(172.31.0.0/16)이 있고 요청의 목적지가 VPC 네트워크 범위 내부라면 VPC 내부 통신으로 간주한다.

인터넷 게이트웨이(IGW)
VPC와 인터넷을 연결해주는 게이트워이
서브넷에 위치한 인스턴스에서 요청이 발생했을 때 라우터로 요청이 향한다.
목적지의 주소가 VPC의 네트워크 범위를 갖는다면(172..31.10.0/16) 매칭되는 서브넷의 인스턴스로 요청을 보내고 목적지의 주소가 VPC의 네트워크 범위를 갖지 않는다면 외부로 향하는 요청이기 때문에 IGA(0.0.0.0/0)으로 요청을 보낸다.

네트워크 ACL과 보안 그룹
보안 그룹
각 서브넷에 보안 그룹을 설정할 수도 있고 서브넷 안에 있는 인스턴스에도 보안 그룹을 설정할 수 있다.
네트워크 ACL
서브넷 단위로 설정할 수 있다.
만약 보안 그룹과 네트워크 ACL이 충돌한다면 보안 그룹이 우선 순위를 갖는다.

NAT 게이트워이
private 서브넷에서 VPC 외부로 아웃바운드 요청을 보낼 때 사용하는 게이트웨이
private 서브넷은 VPC 내부에서만 사용하기 때문에 외부와 직접 통신이 불가능하다.
따라서 외부로 요청을 보내야 할 때 NAT 게이트웨이를 사용한다.
private 서브넷에 위치한 인스턴스가 외부로 요청을 보내는 과정
- private 서브넷의 인스턴스에서 목적지의 주소를 담아 public 서브넷에 위치한 NAT 게이트웨이로 요청을 보낸다.
- NAT 게이트웨이가 요청을 받아서 목적지 주소로 전송한다.
- 라우터에서 라우팅 테이블을 참조하여 IGA로 요청을 전송하여 외부로 요청을 전송한다.

VPC 전체 구조
- private 서브넷
- SpringBoot 서버
- public 서브넷
- ALB
- NAT Gateway
- 요청 인바운드 흐름
- Internet -> IGW -> ALB -> ECS Fargate
- 응답 아웃 바운드 흐름
- 외부 응답
- ECS Fargate -> Router -> NAT Gateway -> Router -> IGW -> Interner
- 내부 응답
- ECS Fargate -> Router -> ECS Fargate
- 외부 응답