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를 둔다. 비용 부담이 그만큼 더 는다.

벤더 명칭 매핑

라우팅 컴포넌트의 벤더별 명칭은 다음과 같다.

개념AWSGCPAzureAlibaba Cloud
라우팅 규칙Route TableRoutesRoute TableRoute Table
외부 출입구 (양방향)Internet Gateway(default internet gateway, 묵시적)Public IP + NSG 조합Internet Gateway
outbound 전용 출구NAT GatewayCloud NATNAT GatewayNAT 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가 만드는 토폴로지다.