VPC 안의 트래픽이 어디로 갈지는 Route Table이 결정한다. 외부 인터넷으로의 출입은 IGW와 NAT가 각각 양방향·outbound 전용으로 나뉘어 담당한다.
Route Table
Route Table은 VPC 또는 Subnet에 부착되는 라우팅 규칙 묶음이다. 각 규칙은 목적지 CIDR과 다음 홉(target)을 짝지어, 트래픽이 도착해야 할 곳을 결정한다.
매칭 방식은 longest prefix match. 더 구체적인 CIDR 규칙이 우선한다. 예를 들어 0.0.0.0/0(default route)과 10.0.5.0/24가 모두 규칙에 있고 패킷의 목적지가 10.0.5.42라면 10.0.5.0/24 규칙이 선택된다.
VPC 생성 시 Local route가 자동으로 추가된다. VPC의 CIDR 전체를 가리키는 규칙이라, 같은 VPC 안의 자원끼리는 별도 설정 없이도 통신할 수 있다. Local route는 삭제할 수 없다.
flowchart LR
Pkt["패킷
목적지: 8.8.8.8"] --> RT["Route Table"]
RT -->|"10.0.0.0/16
(local)"| Local["VPC 내부"]
RT -->|"0.0.0.0/0
(default)"| Out["IGW 또는 NAT"]
Internet Gateway (IGW)
VPC와 외부 인터넷 사이의 양방향 출입구를 담당하는 컴포넌트가 Internet Gateway다. VPC당 하나만 부착할 수 있고, 부착되어 있어야 외부 트래픽이 오갈 수 있다.
자원이 외부에서 도달 가능하려면 두 조건이 모두 필요하다. Public IP나 Elastic IP가 부착돼 있어야 하고, 그 자원이 속한 Subnet의 Route Table에 IGW로 향하는 default route가 있어야 한다. 둘 중 하나만 만족해서는 외부에서 접근할 수 없다.
NAT Gateway
NAT Gateway는 outbound 전용 출구다. Private Subnet의 자원이 외부 인터넷에 접근하면서도 외부에서 직접 접근받는 일은 막아야 할 때 사용한다.
NAT Gateway 자체는 Public Subnet에 위치한다. NAT가 외부로 트래픽을 흘려보내려면 결국 IGW를 거쳐야 하기 때문이다. Private Subnet의 Route Table은 default route를 NAT Gateway로 향하게 잡고, NAT가 그 트래픽을 자신의 Public IP로 변환해 외부로 내보낸다.
외부에서 시작하는 연결은 NAT를 통과하지 못하므로, Private 자원은 outbound로만 외부와 상호작용한다. NAT의 비대칭성이 그대로 보안 이점이 된다. 다만 NAT Gateway는 시간당 + 트래픽당 과금이 붙어 outbound 트래픽이 많은 워크로드에서는 비용 부담이 크다.
Public Subnet vs Private Subnet
Public Subnet과 Private Subnet은 Subnet 자체의 속성이 아니라 라우팅 규칙의 결과다.
- Public Subnet: Route Table의 default route가 IGW로 향하는 Subnet
- Private Subnet: default route가 NAT로 향하거나, default route가 없는 Subnet
flowchart LR
subgraph Public ["Public Subnet"]
VM_P["VM (Public IP)"] -.-> RT_P["Route Table
0.0.0.0/0 → IGW"]
end
subgraph Private ["Private Subnet"]
VM_R["VM"] -.-> RT_R["Route Table
0.0.0.0/0 → NAT"]
end
RT_P --> IGW["IGW"]
RT_R --> NAT["NAT Gateway"]
NAT --> IGW
같은 VPC 안의 두 Subnet이 서로 다른 Route Table에 묶여 있을 뿐, Subnet 자체에 Public/Private 플래그가 있는 게 아니다.
자주 헷갈리는 라우팅 시나리오
Public IP가 있는데 외부에서 접근되지 않는다
Public IP는 도달 가능성의 충분조건이 아니다. 그 자원이 속한 Subnet의 Route Table이 IGW로 향하는 default route를 갖고 있어야 한다. Private Subnet의 인스턴스에 Public IP를 부착해도 외부에서 접근하지 못한다.
Route Table이 비어 있는데 같은 VPC 안 자원 간 통신이 된다
Local route는 자동 추가되고 삭제할 수 없다. Route Table에 다른 규칙을 명시하지 않아도 VPC 내부 통신은 항상 가능하다.
NAT를 두 AZ에 모두 두는 이유
NAT Gateway는 AZ 단위 리소스다. 한 AZ에 NAT를 두고 다른 AZ의 Private Subnet이 그 NAT를 가리키면, NAT가 위치한 AZ에 장애가 생길 때 다른 AZ까지 외부 통신이 끊긴다. 가용성이 중요한 시스템은 AZ별로 NAT를 둔다. 비용 부담이 그만큼 더 는다.
벤더 명칭 매핑
라우팅 컴포넌트의 벤더별 명칭은 다음과 같다.
| 개념 | AWS | GCP | Azure | Alibaba Cloud |
|---|---|---|---|---|
| 라우팅 규칙 | Route Table | Routes | Route Table | Route Table |
| 외부 출입구 (양방향) | Internet Gateway | (default internet gateway, 묵시적) | Public IP + NSG 조합 | Internet Gateway |
| outbound 전용 출구 | NAT Gateway | Cloud NAT | NAT Gateway | NAT Gateway |
GCP는 default internet gateway를 명시적 리소스로 노출하지 않고 Routes의 next hop으로만 다룬다는 점이 다르다. Azure는 별도 Internet Gateway 리소스 없이 Public IP와 NSG 규칙으로 외부 노출을 통제하는 모델이다.
정리
VPC 내 트래픽의 행로는 세 요소가 결정한다.
- Route Table: VPC와 Subnet에 부착되는 규칙 묶음. longest prefix match와 Local route가 기본 제공.
- IGW: 외부 인터넷과의 양방향 출입구. Public IP와 Subnet의 default route 두 조건이 함께 있어야 도달 가능.
- NAT Gateway: outbound 전용 출구. Public Subnet에 위치하며 IGW를 경유해 트래픽을 내보낸다.
Public Subnet과 Private Subnet은 Subnet 자체의 속성이 아니라 default route 행선지가 만드는 결과다.
결국 Route Table의 규칙이 내부 통신·외부 출입·Public/Private 분류를 구조적으로 결정한다. IGW와 NAT는 출구의 종류를 제공할 뿐, 어떤 주소가 그 출구로 향할지는 여전히 규칙이 정한다.
다음 편은 VPC와 다른 네트워크의 연결 — Peering, Transit Gateway, VPN, PrivateLink가 만드는 토폴로지다.