AWS VPC(Virtual Private Cloud)는 AWS 클라우드 내에 논리적으로 격리된 가상 네트워크를 구성하는 서비스다. EC2, RDS, Lambda 등 거의 모든 AWS 리소스가 VPC 위에서 동작한다는 점에서, VPC는 클라우드 아키텍처의 기반 레이어foundation layer에 해당한다. 이 글에서는 VPC가 무엇이고 왜 필요한지, 내부적으로 어떻게 동작하는지, 그리고 VPC를 생성하면 자동으로 함께 만들어지는 기본 리소스는 무엇인지를 설명한다.
EC2-Classic에서 VPC로
초기 AWS에서는 모든 사용자의 인스턴스가 하나의 평면적 네트워크를 공유하는 EC2-Classic 모델을 사용했다. 이 모델에서는 인스턴스 간의 네트워크 격리가 사실상 존재하지 않았다. 같은 리전의 인스턴스끼리 동일한 브로드캐스트 도메인1을 공유했고, IP 주소 범위를 사용자가 지정할 수도 없었다.
2009년 VPC가 도입되면서 상황이 바뀌었다. 사용자는 자신만의 IP 주소 범위를 정의하고, 서브넷을 나누고, 라우팅 테이블과 보안 규칙을 직접 제어할 수 있게 되었다. 2013년 12월부터는 새로 생성되는 모든 AWS 계정이 VPC-only 환경이 되었고, EC2-Classic은 2022년 8월 15일에 완전히 폐지되었다2.
VPC란 무엇인가
VPC는 사용자가 정의한 IP 주소 범위(CIDR 블록) 안에서 서브넷, 라우팅 테이블, 게이트웨이, 보안 정책을 완전히 제어할 수 있는 가상 네트워크 환경이다. 물리적 데이터 센터의 네트워크 토폴로지를 소프트웨어로 재현하되, 하드웨어 조달·배선·유지보수 없이 몇 분 만에 구성할 수 있다.
VPC의 범위는 단일 AWS 리전3이다. 하나의 VPC는 해당 리전 내 모든 가용 영역(AZ)에 걸칠 수 있지만, 리전 경계를 넘을 수 없다. 여러 리전에 걸치는 네트워크가 필요하면 리전마다 별도의 VPC를 만들고 VPC 피어링이나 Transit Gateway로 연결해야 한다.
하이퍼플레인과 가상 네트워크 격리
VPC의 네트워크 격리는 AWS Nitro System의 핵심 구성요소인 하이퍼플레인(Hyperplane)이 담당한다. 하이퍼플레인은 물리 호스트의 니트로 카드 위에서 동작하는 분산형 네트워크 기능 가상화Network Function Virtualization 레이어로, 패킷이 물리 네트워크를 이동할 때 캡슐화encapsulation를 통해 VPC 간 트래픽을 완전히 분리한다4.
이 구조 덕분에 같은 물리 호스트에 배치된 인스턴스라도 서로 다른 VPC에 속하면 통신이 불가능하다. 물리 네트워크 계층에서는 모든 트래픽이 캡슐화된 상태로 이동하므로, 한 VPC의 트래픽을 다른 VPC에서 관찰하거나 가로챌 수 없다.
Elastic Network Interface
VPC 내부에서 모든 네트워크 통신은 ENI(Elastic Network Interface)를 통해 이루어진다. ENI는 물리 서버의 네트워크 인터페이스 카드(NIC)에 대응하는 가상 네트워크 인터페이스로, 다음 속성을 갖는다.
- 서브넷 내 프라이빗 IPv4 주소(필수) + 퍼블릭 IPv4/IPv6 주소(선택)
- 하나 이상의 보안 그룹
- MAC 주소
- 소스/대상 확인source/destination check 플래그
EC2 인스턴스, RDS, ELB, Lambda, NAT Gateway 등 VPC 안에서 네트워크 통신이 필요한 모든 리소스는 내부적으로 ENI를 하나 이상 갖는다. 보안 그룹은 ENI 단위로 적용되고, 서브넷의 라우팅 테이블과 NACL은 ENI가 속한 서브넷에 적용된다. 즉, VPC의 모든 보안·라우팅 정책의 적용 지점은 ENI다.
EC2 인스턴스에는 여러 ENI를 부착할 수 있어서, 관리 트래픽과 데이터 트래픽을 서로 다른 서브넷에서 처리하는 멀티홈 구성multi-homed configuration이 가능하다.
VPC 생성 시 기본 리소스
VPC를 생성하면 AWS가 자동으로 다음 리소스를 함께 생성한다. 이 기본 리소스들은 VPC가 즉시 동작할 수 있도록 최소한의 네트워킹 환경을 제공한다.
| 기본 리소스 | 동작 | 비고 |
|---|---|---|
| 메인 라우팅 테이블 | VPC 내 모든 서브넷의 기본 라우팅 테이블 | local 라우트만 포함 (VPC 내부 통신) |
| 기본 NACL | 모든 인바운드·아웃바운드 트래픽 허용 | 새 서브넷에 자동 연결 |
| 기본 보안 그룹 | 같은 SG 내 인바운드 허용, 모든 아웃바운드 허용 | 삭제 불가, 규칙 수정 가능 |
| DHCP 옵션 세트 | DNS 서버, 도메인 이름 등 네트워크 설정 배포 | 리전별 기본값 자동 적용 |
메인 라우팅 테이블에는 local 라우트만 존재한다. 이 라우트는 VPC CIDR 블록 내의 모든 주소를 VPC 내부 라우터를 통해 전달하겠다는 의미이며, 삭제할 수 없다5. 외부 인터넷 통신이 필요하면 인터넷 게이트웨이를 생성하고 라우팅 테이블에 0.0.0.0/0 라우트를 추가해야 한다.
기본 VPC와 사용자 정의 VPC
AWS는 각 리전에 기본 VPC를 자동으로 제공한다. 기본 VPC는 172.31.0.0/16 CIDR 블록을 사용하며, 각 가용 영역에 /20 크기의 퍼블릭 서브넷을 자동으로 생성한다. 인터넷 게이트웨이가 이미 연결되어 있고, 인스턴스를 시작하면 퍼블릭 IP가 자동으로 할당된다.
기본 VPC는 빠른 실험에 편리하지만, 프로덕션 환경에서는 사용자 정의 VPCcustom VPC를 생성하는 것이 권장된다.
- CIDR 블록을 자유롭게 설계할 수 있다. 기본 VPC의
172.31.0.0/16은 온프레미스 네트워크나 다른 VPC와 충돌할 가능성이 높다. 사용자 정의 VPC에서는10.0.0.0/8,172.16.0.0/12,192.168.0.0/16범위 내에서 필요에 맞는 CIDR를 선택할 수 있고, 보조 CIDR 블록으로 나중에 확장할 수도 있다. - 서브넷을 계층적으로 설계할 수 있다. 기본 VPC의 서브넷은 모두 퍼블릭이지만, 사용자 정의 VPC에서는 퍼블릭·프라이빗·데이터 계층을 분리하여 심층 방어Defense in Depth 아키텍처를 구현할 수 있다.
- 보안 기본값이 다르다. 기본 VPC에서는 인스턴스에 퍼블릭 IP가 자동 할당되지만, 사용자 정의 VPC에서는 기본적으로 프라이빗 IP만 할당된다. 최소 권한 원칙principle of least privilege에 부합하는 것은 후자다.
전형적인 3계층 아키텍처
실무에서 가장 흔히 사용되는 VPC 구조는 퍼블릭·프라이빗·데이터 세 계층을 가용 영역별로 복제하는 3계층 아키텍처다.
퍼블릭 서브넷은 인터넷 게이트웨이를 통해 외부 트래픽의 진입점 역할을 한다. 프라이빗 서브넷의 인스턴스는 NAT 게이트웨이를 경유해야만 아웃바운드 인터넷 접근이 가능하다. 데이터 서브넷은 인터넷 라우트가 전혀 없어 외부에서 직접 접근할 수 없다. 각 계층은 서로 다른 보안 그룹으로 격리되어, 한 계층이 침해되더라도 다른 계층으로의 수평 이동lateral movement을 어렵게 만든다.
이 구조를 두 개 이상의 가용 영역에 복제하면 단일 AZ 장애 시에도 서비스가 지속되는 고가용성HA을 확보할 수 있다. 서브넷의 CIDR 설계와 가용 영역 분산 전략에 대한 자세한 내용은 CIDR 블록 설계와 서브넷 아키텍처에서 다룬다.
VPC 비용 구조
VPC 자체는 무료이지만, VPC 위에서 동작하는 구성요소들은 비용을 발생시킨다.
| 구성요소 | 주요 비용 항목 | 절감 전략 |
|---|---|---|
| NAT Gateway | 시간당 요금 + GB당 처리 비용($0.045/GB) | 게이트웨이 엔드포인트로 S3/DynamoDB 트래픽 우회 |
| AZ 간 통신 | GB당 0.02) | 트래픽이 많은 계층은 동일 AZ 배치 고려 |
| 퍼블릭 IPv4 | 시간당 $0.005 (2024년 2월~) | IPv6 Dual-Stack 전환, 불필요한 EIP 해제 |
| VPC Peering | 데이터 전송 비용만 부과 | 리전 내 전송은 AZ 간 요금과 동일 |
| Transit Gateway | 연결당 시간 요금 + GB당 처리 비용 | 트래픽 패턴에 따라 Peering과 혼합 사용 |
2024년 2월부터 퍼블릭 IPv4 주소에 시간당 $0.005의 비용이 부과된다6. 이전까지는 EC2 인스턴스에 연결된 EIP만 무료였고 연결되지 않은 EIP에만 과금되었지만, 변경 이후에는 사용 여부와 관계없이 모든 퍼블릭 IPv4 주소에 비용이 발생한다. AWS VPC 콘솔의 Public IP Insights 도구를 통해 사용 중인 퍼블릭 IP를 감사하고 불필요한 주소를 정리하는 것이 비용 관리의 첫걸음이다.
출처
- Amazon Web Services (2026) What is Amazon VPC? Available at: https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html
- Amazon Web Services (2026) How Amazon VPC works. Available at: https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html
- Amazon Web Services (2026) Amazon VPC Pricing. Available at: https://aws.amazon.com/vpc/pricing/
- Amazon Web Services (2022) EC2-Classic Networking is Retiring. Available at: https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/
- Amazon Web Services (2024) New — AWS Public IPv4 Address Charge. Available at: https://aws.amazon.com/blogs/aws/new-aws-public-ipv4-address-charge/
- Amazon Web Services (2026) Default VPC and default subnets. Available at: https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html
Footnotes
-
브로드캐스트 도메인은 하나의 호스트가 보낸 브로드캐스트 프레임이 도달하는 모든 호스트의 범위를 의미한다. EC2-Classic에서는 이 범위가 리전 전체였기 때문에, 한 사용자의 트래픽이 다른 사용자에게 영향을 줄 수 있었다. ↩
-
AWS는 2022년 8월 15일부로 EC2-Classic 지원을 완전히 중단했다. 기존 EC2-Classic 리소스는 VPC로 마이그레이션해야 하며,
ClassicLink기능도 함께 폐지되었다. EC2-Classic Networking is Retiring ↩ -
AWS 리전은 지리적으로 분리된 독립 클라우드 인프라 영역이다. 각 리전은 최소 3개의 가용 영역(AZ)으로 구성되며, 리전 간 데이터는 자동으로 복제되지 않는다. ↩
-
하이퍼플레인은 NAT Gateway, Network Load Balancer, VPC Endpoint 등 AWS 관리형 네트워크 서비스의 내부 구현에도 사용된다. 각 서비스는 하이퍼플레인 위의 서로 다른 기능 인스턴스로 동작한다. ↩
-
local라우트는 VPC CIDR 범위 내 트래픽을 VPC 내부 라우터로 전달하는 암묵적 규칙이다. 모든 라우팅 테이블에 자동 추가되며 삭제할 수 없다. 보조 CIDR 블록을 추가하면 해당 범위에 대한local라우트도 자동으로 추가된다. ↩ -
2024년 2월 1일부터 적용된 정책으로, 모든 퍼블릭 IPv4 주소에 시간당 3.6)가 부과된다. 이는 전 세계적인 IPv4 주소 고갈에 대응하고 IPv6 전환을 촉진하기 위한 조치다. New — AWS Public IPv4 Address Charge ↩