인터넷 게이트웨이와 라우트 테이블
인터넷 게이트웨이와 라우트 테이블 — 서브넷이 공용/사설을 결정하는 자리
서브넷이 "공용" 인지 "사설" 인지를 결정하는 것은 라벨이 아니라 라우팅입니다. 인터넷 게이트웨이 (IGW) · NAT 게이트웨이 · 라우트 테이블 · VPC 엔드포인트가 어떻게 결합되는지를 이해하면 서브넷 설계의 의미가 분명해집니다.
1. 구성 요소에 대한 이야기
| 구성 요소 | 역할 |
|---|---|
| Internet Gateway (IGW) | VPC 와 인터넷을 잇는 수평 확장형 게이트웨이. 양방향 가능. |
| NAT Gateway | 사설 서브넷의 외부 발신 전용 NAT. AWS 매니지드. |
| NAT Instance | EC2 인스턴스 기반 NAT. 구식 · 직접 운영. |
| Route Table | 서브넷 단위로 트래픽 목적지를 결정. |
| VPC Endpoint | AWS 서비스로의 사설 경로 (인터넷 우회). |
2. Internet Gateway
VPC 에 하나 붙습니다. IGW 자체가 서브넷에 연결되는 것이 아니라, 라우트 테이블의 default route (0.0.0.0/0) 가 IGW 를 가리킬 때 그 라우트 테이블에 연결된 서브넷이 "공용 서브넷" 이 됩니다.
조건이 더 있습니다. 인스턴스에 공인 IP (또는 EIP) 가 있어야 인바운드가 가능합니다. 단순히 라우트 테이블만 IGW 로 향한다고 외부에서 들어오지 않습니다.
3. NAT Gateway · NAT Instance
사설 서브넷의 인스턴스가 외부로 발신해야 할 때 (패키지 다운로드 · 외부 API 호출) 사용합니다. NAT 는 인바운드를 허용하지 않습니다.
| 항목 | NAT Gateway | NAT Instance |
|---|---|---|
| 운영 | AWS 매니지드 | 직접 (EC2 + iptables) |
| 가용성 | AZ 내 매니지드 | 단일 인스턴스 = SPOF |
| 처리량 | 자동 확장 | 인스턴스 스펙에 따라 |
| 비용 | 시간 + GB | EC2 시간 + 데이터 |
운영에서는 NAT Gateway 가 표준입니다. NAT Instance 는 비용 최적화 · 실험용.
4. Route Table
라우트 테이블은 (destination, target) 쌍의 모음입니다.
| Destination | Target |
|---|---|
10.0.0.0/16 (VPC CIDR) |
local (자동, 삭제 불가) |
0.0.0.0/0 |
igw-xxxx (공용 서브넷) |
0.0.0.0/0 |
nat-xxxx (사설 서브넷) |
pl-xxxx (S3 prefix list) |
vpce-xxxx (Gateway endpoint) |
가장 구체적인 경로 (longest prefix match) 가 우선됩니다. 10.0.0.0/16 → local 은 항상 존재하므로 같은 VPC 안의 통신은 인터넷을 거치지 않습니다.
5. Public vs Private 의 구체
Public subnet
└── route table: 0.0.0.0/0 → IGW
Private subnet (with NAT)
└── route table: 0.0.0.0/0 → NAT Gateway (in public subnet)
Isolated subnet
└── route table: (default route 없음. 같은 VPC 만)
NAT Gateway 자체는 공용 서브넷에 위치해야 합니다 (EIP 부착, IGW 로 발신). 그 NAT 의 ID 를 사설 서브넷 라우트 테이블의 default route 가 가리킵니다.
6. VPC Endpoint
VPC 에서 AWS 서비스 (S3 · DynamoDB · SQS · KMS) 로 가는 트래픽이 인터넷을 거치지 않도록 하는 사설 경로입니다.
| 종류 | 메모 |
|---|---|
| Gateway endpoint | S3 · DynamoDB 한정. 라우트 테이블에 prefix list 추가. 무료. |
| Interface endpoint (PrivateLink) | 대부분 AWS 서비스. ENI 생성. 시간 + GB 과금. |
사설 서브넷에서 S3 를 읽기 위해 NAT Gateway 를 통과시키는 대신 Gateway endpoint 를 두면 비용·지연이 줄어듭니다.
7. Egress-only IGW (IPv6)
IPv6 에는 NAT 개념이 없습니다. 사설 IPv6 가 외부로 발신만 하고 인바운드는 막는 구성을 위해 Egress-only IGW 를 둡니다. IPv4 의 NAT Gateway 와 의미가 비슷하지만 가격·동작은 다릅니다.
8. 다른 클라우드의 대응
- GCP — Cloud NAT, Cloud Router, Routes. 모델은 비슷합니다.
- Azure — NAT Gateway, Route Tables, Service Endpoints · Private Endpoints.
이름이 다르고 세부 동작이 약간씩 다릅니다. 같은 추상이라고 가정하면 사고가 납니다.
9. 표준 3-tier VPC
VPC 10.0.0.0/16
├── 공용 서브넷 (×2 AZ): ALB, NAT Gateway
├── 사설 앱 서브넷 (×2 AZ): EC2/ECS/EKS
└── 사설 DB 서브넷 (×2 AZ, isolated): RDS, ElastiCache
라우트 테이블 3 종:
| 서브넷 | default route |
|---|---|
| 공용 | IGW |
| 사설 앱 | NAT Gateway (해당 AZ 의) |
| 사설 DB | (없음) |
S3 Gateway endpoint 를 사설 앱 서브넷의 라우트 테이블에 추가하면 외부 송신 비용을 줄일 수 있습니다.
NAT 의 AZ 분산 — NAT Gateway 는 단일 AZ 자원입니다. 한 AZ 의 NAT 가 죽으면 그 AZ 의 사설 서브넷은 외부 발신이 끊깁니다. 운영에서는 AZ 마다 NAT Gateway 를 두고 각 사설 서브넷이 자기 AZ 의 NAT 로 향하게 합니다.
10. 자주 걸리는 자리
공인 IP 미부여 — 라우트는 IGW 로 향하지만 인스턴스에 공인 IP 가 없어 외부 도달 불가. EIP 를 붙이거나 서브넷의 자동 할당 옵션을 켭니다.
NAT 의 비용 — 시간 + 처리 GB 양쪽 과금. 사설 서브넷에서 외부로 큰 데이터를 자주 받으면 누적 비용이 큽니다. S3 endpoint · 캐싱 · 이미지 빌드 시 고정으로 완화.
라우트 충돌 — peering · transit gateway 를 추가하다 default route 가 의도치 않은 대상으로 향합니다. 가장 구체적인 prefix 가 이긴다는 점을 기억.
모든 사설 서브넷을 한 NAT 로 — 한 AZ 의 NAT 장애가 다른 AZ 를 끌어내립니다. AZ 별 NAT 권장.
Endpoint 정책 누락 — Gateway endpoint 의 정책이 너무 넓으면 임의 버킷 접근이 가능. IAM + endpoint 정책으로 좁힙니다.
하고픈 말
라우트 테이블 한 줄이 서브넷의 성격을 바꿉니다. NAT Gateway 의 비용은 운영에서 가장 자주 거론되는 항목이라 S3 endpoint · 이미지 캐시 · 빌드 시점 고정으로 완화하는 패턴이 표준입니다.
Next
- security-group
- ec2
VPC 라우트 테이블 · Internet Gateway · NAT Gateway · VPC Endpoints · Egress-only IGW · PrivateLink 을 참고합니다.