클라우드에서 VM을 생성하면 기본적으로 어떤 네트워크에 소속된다. 그 네트워크가 VPC다. AWS, GCP, Alibaba는 모두 VPC라고 부르고, Azure만 VNet이라는 이름을 쓰지만, 가리키는 추상은 동일하다 — 공용 클라우드 위에서 사설 IP 공간을 갖는 격리된 가상 네트워크.

같은 추상에 다른 이름이 붙어 있다 보니, 다른 벤더 문서를 읽을 때마다 길을 잃기 쉽다. 트래픽 라우팅·외부 연결·보안은 후속 글로 분리한다.

VPC가 왜 필요한가

클라우드는 본질적으로 멀티테넌트 환경이다. 같은 물리 인프라 위에서 여러 고객의 워크로드가 동시에 실행된다. 격리가 없으면 한 고객의 트래픽이 다른 고객에게 보일 수 있고, IP 주소도 서로 충돌한다.

VPC는 SDN(Software-Defined Networking) 위에 구축된 가상 네트워크다. 각 VPC는 자체 IP 공간과 자체 라우팅 테이블을 가지며, 다른 VPC와는 기본적으로 격리된다. 클라우드 위에 자기만의 데이터센터를 두는 구조에 가깝다.

이 격리는 세 요소가 합쳐져 만들어진다 — IP 공간, Subnet, Tenancy.

IP 공간 (CIDR)

VPC 생성 시 가장 먼저 정하는 값이 CIDR 블록이다. 10.0.0.0/16 같은 사설 IP 대역을 지정하면, 이 범위 안의 주소가 VPC 내부 자원에 할당된다.

RFC 1918이 정의한 사설 IP 대역(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)에서 선택하기를 권장한다. 인터넷에서 라우팅되지 않는 대역이라 외부와 충돌하지 않고, 다른 VPC도 같은 대역을 쓸 수 있다.

다만 향후 다른 VPC와 연결할 가능성이 있다면, 같은 사설 대역끼리도 충돌이 생긴다. 두 VPC가 모두 10.0.0.0/16을 쓰고 있으면 Peering이나 Transit Gateway로 연결할 때 라우팅이 모호해진다. 처음부터 조직 단위로 IP 대역을 분배해 두는 편이 안전하다.

접두 길이(prefix)도 한 번 정하면 바꾸기 어려우므로, 미래 확장을 고려해 충분한 공간을 확보한다.

IP 공간이 격리에 기여하는 방식은 명확하다. 같은 VPC 내부 자원만 동일 IP 공간을 의미 있게 인식하고, 다른 VPC와는 IP 수준에서 처음부터 분리된다.

Subnet

VPC 단위 IP 공간을 더 작은 블록으로 쪼갠 단위가 Subnet이다.

Subnet은 보통 가용영역(AZ) 단위로 만든다. 한 AZ에 위치한 자원은 같은 Subnet에 묶고, 다른 AZ의 자원은 별도 Subnet으로 분리한다. AZ는 물리적으로 분리된 데이터센터 묶음이라, AZ별 Subnet 배치가 가용성 보장의 기본이다. 한 AZ가 장애를 겪어도 다른 AZ의 Subnet은 영향을 받지 않는다.

flowchart LR
    subgraph VPC ["VPC (10.0.0.0/16)"]
        subgraph AZ_a ["AZ-a"]
            S_a1["Public Subnet
10.0.1.0/24"] S_a2["Private Subnet
10.0.2.0/24"] end subgraph AZ_b ["AZ-b"] S_b1["Public Subnet
10.0.3.0/24"] S_b2["Private Subnet
10.0.4.0/24"] end end

격리 관점에서 Subnet의 역할은 분리 단위 그 자체보다는 정책 적용의 최소 단위에 가깝다. 라우팅 규칙과 보안 규칙이 Subnet 단위로 걸리고, Public/Private Subnet이라는 분류도 결국 라우팅 규칙의 결과로 나타난다.

Tenancy

같은 VPC 안의 자원이라도, 그 자원이 도는 물리 하드웨어를 다른 고객과 공유할지 여부는 Tenancy 옵션으로 결정된다. Tenancy는 VPC 기본값으로 잡거나 인스턴스 단위로 지정할 수 있다.

기본값은 shared tenancy다. 같은 물리 호스트 위에서 여러 고객의 VM이 함께 실행되고, 비용 효율이 좋아 일반 워크로드에 충분하다.

반면 dedicated tenancy를 선택하면 그 VPC 안의 자원은 다른 고객과 물리 하드웨어를 공유하지 않는다. 금융권 규제, 의료 데이터, 정부 워크로드처럼 컴플라이언스 요구가 강한 경우에 자주 쓴다. 비용은 높아지고 사용 가능한 인스턴스 타입도 제한된다.

벤더별로 옵션 명칭은 다르다. AWS는 dedicated와 host로 나누고, GCP는 sole-tenant 노드라는 별도 개념을 둔다. 명칭은 달라도 패턴은 동일하다. 격리 강도를 높일수록 비용도 함께 올라간다.

Tenancy는 IP 수준 격리에 더해 물리 하드웨어 수준의 격리까지 부여한다는 점에서, 격리의 강도를 한 단계 높인다.

벤더 명칭 매핑

벤더별 용어 매핑은 다음과 같다.

개념AWSGCPAzureAlibaba Cloud
가상 사설 네트워크VPCVPCVirtual Network (VNet)VPC
SubnetSubnetSubnetSubnetVSwitch
사설 IP 대역CIDR BlockIP rangeAddress spaceCIDR Block
가용영역Availability ZoneZoneAvailability ZoneZone
전용 하드웨어Dedicated / HostSole-tenantDedicated HostDedicated Host

명칭 차이가 큰 쪽은 Azure(VNet)와 Alibaba(VSwitch)다. 그 외에는 거의 같은 단어를 쓴다. 한 벤더의 개념 지도를 익히면 다른 벤더 문서도 절반 이상 그대로 이해된다.

클라우드 이전과의 비교

격리된 사설 네트워크라는 개념 자체는 클라우드 이전부터 있었다. 사내 데이터센터에서 VLAN으로 트래픽을 분리하고, RFC 1918 사설 대역을 쓰는 일은 오래된 패턴이다.

VPC는 이 패턴을 SDN 위에서 다시 구현한 것이다. VLAN 태그 같은 물리 계층 의존이 사라지고, IP 공간 / Subnet / Tenancy 같은 추상이 API와 코드로 조작 가능해졌다. 새 Subnet을 만드는 데 케이블 작업 없이 API 호출 한 번이면 충분하다. 격리의 본질은 같지만, 운영 유연성은 결이 다르다.

정리

VPC의 격리는 세 요소의 조합이다.

  • IP 공간(CIDR): VPC 단위의 사설 IP 주소 공간. RFC 1918 대역 안에서, 미래의 연결까지 고려해 충분한 공간을 잡는다.
  • Subnet: VPC를 가용영역별로 분할한 블록. AZ별 분리가 가용성 보장의 기본이고, 라우팅·보안 정책의 적용 단위.
  • Tenancy: 물리 하드웨어 공유 여부. shared가 기본값이고, 컴플라이언스 요구가 강할 때 dedicated를 쓴다.

벤더 명칭은 다르지만 추상은 동일하다 — VPC, VNet, VSwitch는 모두 같은 개념의 다른 이름표다.

격리는 한 요소만으로 완성되지 않는다. IP 공간이 주소 충돌을, Subnet이 가용성과 정책을, Tenancy가 물리 하드웨어를 각각 분담한다. 어디까지 격리할지는 워크로드의 요구가 정한다.

다음 편은 VPC 내부의 트래픽 흐름 — Route Table, IGW, NAT Gateway가 만드는 라우팅 구조다.