VPC(Virtual Private Cloud)는 AWS 클라우드 안에 사용자가 직접 정의하는 격리된 가상 네트워크입니다. 물리적 데이터센터에서 네트워크를 설계하는 것과 동일한 수준으로 IP 범위, 서브넷, 라우팅, 방화벽을 제어할 수 있습니다.
AWS 계정을 생성하면 각 Region에 기본 VPC(Default VPC)가 자동으로 생성됩니다. 실무에서는 보안과 네트워크 설계를 직접 통제하기 위해 별도의 Custom VPC를 생성하여 사용합니다.
VPC를 만들 때 가장 먼저 IP 주소 범위를 CIDR 표기법으로 지정합니다.
CIDR(Classless Inter-Domain Routing): IP 주소 범위를 10.0.0.0/16처럼 표기하는 방법. /16은 앞 16비트가 고정됨을 의미하며, 이 예시는 65,536개의 IP 주소를 포함합니다.
예를 들어 10.0.0.0/16으로 설정하면 10.0.0.0 ~ 10.0.255.255 범위의 IP 주소를 사용할 수 있습니다. VPC의 CIDR은 생성 후 변경이 어려우므로 충분한 크기로 설정하는 것이 중요합니다.
VPC: 10.0.0.0/16 (65,536개 IP)
|
+-- Subnet A: 10.0.1.0/24 (256개 IP) -- Public
+-- Subnet B: 10.0.2.0/24 (256개 IP) -- Public
+-- Subnet C: 10.0.11.0/24 (256개 IP) -- Private
+-- Subnet D: 10.0.12.0/24 (256개 IP) -- Private
Subnet은 VPC의 IP 범위를 더 작게 나눈 단위입니다. 각 Subnet은 하나의 AZ에 속합니다.
Subnet은 인터넷 접근 가능 여부에 따라 Public Subnet과 Private Subnet으로 나뉩니다.
인터넷과 직접 통신이 가능한 서브넷입니다. 웹 서버, 로드 밸런서처럼 외부에서 접근해야 하는 리소스를 배치합니다. Public Subnet이 되려면 Internet Gateway가 연결되고 Route Table에 인터넷 경로가 등록되어 있어야 합니다.
인터넷과 직접 통신하지 않는 서브넷입니다. 데이터베이스 서버, 내부 애플리케이션 서버처럼 외부에 노출하면 안 되는 리소스를 배치합니다. Private Subnet의 리소스가 외부 인터넷으로 나가려면(예: 패키지 업데이트) NAT Gateway를 경유해야 합니다.
Internet Gateway(IGW)는 VPC와 인터넷 사이의 통신을 가능하게 하는 게이트웨이입니다.
IGW는 VPC에 연결된 후, Route Table에 0.0.0.0/0 → IGW로 경로를 추가해야 실제로 인터넷 통신이 가능해집니다. IGW 자체는 고가용성이 보장되며 별도의 용량 관리가 필요 없습니다.
NAT Gateway는 Private Subnet의 리소스가 인터넷에 접근할 수 있도록 IP 주소를 변환해 주는 장치입니다.
NAT Gateway는 Public Subnet에 배치하고, Elastic IP를 할당합니다. Private Subnet의 Route Table에 0.0.0.0/0 → NAT Gateway를 추가하면 아웃바운드 트래픽이 NAT Gateway를 통해 인터넷으로 나갑니다. 인바운드 방향으로는 연결을 시작할 수 없으므로 외부에서 Private 리소스로 직접 접근하는 것은 차단됩니다.
Route Table은 서브넷의 트래픽이 어디로 향해야 하는지 정의하는 라우팅 규칙 집합입니다.
Public Subnet Route Table
+------------------+------------------+
| Destination | Target |
+------------------+------------------+
| 10.0.0.0/16 | local | (VPC 내부 통신)
| 0.0.0.0/0 | igw-xxxxxxxx | (인터넷으로)
+------------------+------------------+
Private Subnet Route Table
+------------------+------------------+
| Destination | Target |
+------------------+------------------+
| 10.0.0.0/16 | local | (VPC 내부 통신)
| 0.0.0.0/0 | nat-xxxxxxxx | (NAT Gateway로)
+------------------+------------------+
인터넷
|
v
Internet Gateway
|
v
+--------------------------------------------+
| VPC (10.0.0.0/16) |
| |
| +------------------+ +-----------------+|
| | Public Subnet A | | Public Subnet B ||
| | (10.0.1.0/24) | | (10.0.2.0/24) ||
| | Web Server / LB | | NAT Gateway ||
| +------------------+ +-----------------+|
| | ^ |
| v | |
| +------------------+ +-----------------+|
| | Private Subnet A | | Private Subnet B||
| | (10.0.11.0/24) | | (10.0.12.0/24) ||
| | App Server | | Database ||
| +------------------+ +-----------------+|
+--------------------------------------------+
이 구조에서 웹 서버는 Public Subnet에서 외부 요청을 받고, 내부 애플리케이션 서버와 데이터베이스는 Private Subnet에서 안전하게 운영됩니다. Private Subnet의 서버는 NAT Gateway를 통해 소프트웨어 업데이트 등 아웃바운드 요청만 인터넷으로 내보낼 수 있습니다.