VPC 콘솔을 처음 열면 단어가 많다. CIDR 블록, 서브넷, 라우팅 테이블, IGW, NAT, Security Group, NACL, Egress-Only IGW. 익숙해지면 그냥 클릭으로 끝나는 듯하지만 운영하다 보면 같은 사람이 같은 실수를 반복한다. "Private 서브넷인데 왜 외부 API 호출이 안 되지", "NACL을 다 ALLOW로 깔았는데 왜 응답이 끊기지", "/28 서브넷에 16대 띄울 줄 알았는데 11대에서 IP가 모자라네". 매일 누군가가 같은 함정에 빠진다.
이 글은 VPC의 부품을 외우는 글이 아니라, 왜 그렇게 설계됐는지를 따라가는 글이다. AWS가 EC2 위에 한 겹의 가상 네트워크 레이어를 더 얹은 이유, Stateful 방화벽과 Stateless 방화벽을 둘 다 제공하는 이유, IPv6에 NAT를 만들지 않은 이유, 서브넷마다 5개 IP를 빼앗아 가는 이유 — 이 결정들을 이해하면 함정에 빠지는 빈도가 줄어든다.
지금은 모든 EC2 인스턴스가 반드시 VPC 안에 들어가지만, 2009년 이전엔 그렇지 않았다. AWS 초기엔 EC2-Classic이라는 모델이 있었고, 모든 고객이 같은 평면 네트워크(10.0.0.0/8)를 공유했다. 보안은 Security Group으로만 통제했고, 두 고객의 인스턴스가 같은 서브넷에 같이 있을 수도 있었다.
문제가 두 가지였다