VPC 와 서브넷
VPC 와 서브넷 — 가상 사설 네트워크의 형태
AWS 에서 컴퓨팅·DB·로드밸런서가 배치되는 가상 네트워크가 VPC (Virtual Private Cloud) 입니다. VPC 의 모양을 먼저 정의하지 않으면 그 안에서 일어나는 모든 결정이 흔들립니다.
1. VPC 에 대한 이야기
VPC 는 2009 년 AWS 가 도입한 가상 사설 네트워크 서비스입니다. 한 AWS 계정 안에서 여러 VPC 를 만들 수 있고, 각 VPC 는 IP 주소 범위 (CIDR) · 서브넷 · 라우트 테이블 · 게이트웨이 · 보안 그룹으로 구성됩니다.
기본 (default) VPC 가 계정 생성 시 자동 생성됩니다. 운영용으로는 보통 별도의 VPC 를 명시적으로 만듭니다.
2. CIDR 표기
CIDR (Classless Inter-Domain Routing) 는 RFC 4632 (1993, 2006 갱신) 로 표준화된 IP 주소 범위 표기법입니다.
| 표기 | 호스트 수 (이론) |
|---|---|
10.0.0.0/8 |
약 1,677 만 |
10.0.0.0/16 |
65,536 |
10.0.0.0/24 |
256 |
10.0.0.0/28 |
16 |
/N 의 N 이 커질수록 범위가 좁아집니다. AWS VPC 의 IPv4 CIDR 는 /16 (최대) ~ /28 (최소) 사이의 사설 대역을 권장합니다 (RFC 1918 의 10.0.0.0/8 · 172.16.0.0/12 · 192.168.0.0/16).
각 서브넷에서 처음 4 개 IP 와 마지막 IP 는 AWS 가 예약합니다. /24 서브넷은 실제 251 개 IP 가 할당 가능합니다.
3. 서브넷 분류
서브넷은 한 가용 영역 (AZ) 에 묶입니다. 외부 도달 방식에 따라 분류가 갈립니다.
| 분류 | 설명 |
|---|---|
| Public subnet | 라우트 테이블이 IGW (Internet Gateway) 로 향함. 외부 도달 가능. |
| Private subnet | IGW 로의 라우트 없음. 외부 발신은 NAT 통해. |
| Isolated subnet | NAT 도 없음. 외부 통신 불가. |
AWS 자체는 서브넷을 "public" / "private" 로 라벨링하지 않습니다. 라우트 테이블의 모양으로 결정됩니다.
4. 가용 영역 분산
운영 워크로드는 보통 두 개 이상의 AZ 에 같은 종류의 서브넷을 둡니다.
ap-northeast-2 (서울)
├── 2a: public-a (10.0.0.0/24), private-a (10.0.10.0/24)
├── 2b: public-b (10.0.1.0/24), private-b (10.0.11.0/24)
└── 2c: public-c (10.0.2.0/24), private-c (10.0.12.0/24)
ELB 는 여러 AZ 의 서브넷을 한 번에 받아 분산합니다. RDS Multi-AZ 도 같은 그림 위에서 동작합니다.
5. IPv6
VPC 는 IPv4 / IPv6 dual-stack 으로 구성 가능합니다. AWS 가 부여한 /56 IPv6 CIDR 또는 사용자 보유 범위를 씁니다. IPv6 는 NAT 가 필요 없는 모델 (공인 IPv6 가 충분) 이라 사설/공용 구분이 IPv4 와 다릅니다.
외부 발신만 허용하고 인바운드는 막으려면 Egress-only Internet Gateway 를 사용합니다.
6. VPC 간 연결
| 방법 | 메모 |
|---|---|
| VPC Peering | 두 VPC 직접 연결. 라우팅·보안 그룹 명시. CIDR 겹침 불가. |
| Transit Gateway | 여러 VPC·온프레미스 허브-스포크. 운영 단순화. |
| AWS PrivateLink | 다른 VPC/계정의 서비스를 엔드포인트로 노출. |
| Site-to-Site VPN · Direct Connect | 온프레미스와 연결. |
7. 다른 클라우드의 대응
| 사업자 | 명칭 |
|---|---|
| GCP | VPC (전역 리소스 — 한 VPC 가 여러 리전 서브넷 포함) |
| Azure | Virtual Network (VNet) |
| Hetzner | Networks |
GCP VPC 가 전역인 점이 AWS · Azure 와 다릅니다. 같은 어휘라도 모델이 다르다는 점은 이전 시 주의 사항입니다.
8. 작은 운영 환경 예시
VPC: 10.0.0.0/16
├── public-2a: 10.0.0.0/24
├── public-2b: 10.0.1.0/24
├── private-2a: 10.0.10.0/24
├── private-2b: 10.0.11.0/24
├── db-2a: 10.0.20.0/24 # isolated
└── db-2b: 10.0.21.0/24 # isolated
ALB 는 public, EC2/ECS 는 private, RDS 는 db 서브넷에 둡니다.
VPC 를 콘솔에서 한 번 만들면 똑같이 다시 만들기 어렵습니다. 운영용은 IaC (Terraform · CloudFormation · CDK) 로 정의하는 편이 일반적입니다.
9. 자주 걸리는 자리
CIDR 충돌 — 향후 Peering · Transit Gateway 를 위해 다른 VPC · 온프레미스와 겹치지 않게 미리 큰 그림을 그립니다.
AZ 한 곳에만 서브넷 — 단일 AZ 장애 시 서비스 전체 중단. 처음부터 2 AZ 분산.
공용 IP 자동 할당 — 서브넷 설정의 "Auto-assign public IPv4" 가 켜져 있으면 의도치 않게 공인 IP 가 붙습니다.
DNS 호스트네임 옵션 — enableDnsHostnames 가 꺼져 있으면 EC2 의 사설 DNS 가 동작하지 않아 디버깅이 어려워집니다.
서브넷 IP 고갈 — /28 같은 작은 서브넷은 16 개 중 5 개 예약을 빼면 11 개. ECS · Lambda VPC 같이 ENI 를 많이 쓰는 워크로드에서 빠르게 차오릅니다.
하고픈 말
VPC 는 한 번 만들면 IP 대역 변경이 어려워 처음에 큰 그림이 중요합니다. CIDR 의 사설 대역을 겹치지 않게 정해 두면 향후 Peering · Transit Gateway 가 자유롭습니다. 작은 워크로드는 default VPC 로 시작해도 충분하지만 운영 단계에서는 IaC 로 정의된 별도 VPC 가 표준입니다.
Next
- internet-gateway-route-table
- security-group
AWS VPC 문서 · VPC CIDR 가이드 · RFC 4632 CIDR · RFC 1918 사설 IP · Transit Gateway · GCP VPC 를 참고합니다.