논리적으로 격리된 사용자 전용 가상 네트워크입니다. 복수의 AZ (Availibity Zone, 가용영역 ≒ 데이터센터) 걸친 형태로 생성 할 수 있습니다.
쉽게 설명하면 AWS의 리소스들이 위치할 네트워크 망입니다.
프로젝트에 사용되는 리소스 (EC2, RDS, S3 등등)이 물리적으로 하나의 데이터센터에만 위치해있다면 해당 센터에 문제가 생긴다면 서비스가 전체적으로 다운타임이 생길 것입니다.
하지만 가상네트워크를 이용하여 물리적으로는 다른곳에 위치하지만 같은 사설망 IP 대역에 위치하게 만들어 리소스들끼리 통신할 수 있게 만들어주는 기술입니다.
처음에 AWS 계정을 생성하면 기본적 VPC가 잡혀있지만 다양한 필요에 의해 직접 VPC를 생성하여 리소스들을 위치시킬 수 있습니다.
VPC의 영역안에서 망을 더 쪼개는 행위라고 이해하시면됩니다.
하지만 VPC와는 달리 지역적으로 나누기때문에 여러 AZ에 걸쳐있는것이 아닌 단일 AZ에 위치합니다.
대표적으로 보안과 네트워크의 브로드캐스트의 영역을 축소시켜서 통신 성능을 올리기 위함입니다.
처음에 AWS 계정을 생성하면 기본으로 잡힌 VPC안에 4개의 Public subnet이 잡혀있습니다.
아래에서 설명하겠지만 Subnet은 Public, Private으로 역할을 나눌 수 있습니다.
간단하게 외부에서 접근이 가능한 네트워크영역이라고 이해할 수 있습니다.
구체적으로는 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 라우팅 테이블과 연결되는 경우 퍼블릭 서브넷이라고합니다.
인터넷 게이트웨이(igw)는 VPC의 구성요소로써 VPC와 인터넷간에 통신을 할 수 있게 만들어주는 역할을합니다.
방법론적으로 설명하면 서브넷이 바라보는 라우팅테이블에 인터넷게이트웨이가 등록되어있는 것 입니다.
해당 서브넷은 인터넷과 연결이 가능하므로 해당 서브넷에 위치한 리소스들은 공인IP를 가질 수 있습니다.
간단하게 외부에서 다이렉트로 접근이 불가능한 네트워크 영역이라고 이해할 수 있습니다.
서브넷의 라우팅 테이블에 인터넷게이트웨이가 등록되어있지 않으므로 해당 서브넷에 위치한 리소스들은 외부와의 연결이 불가능합니다.
하지만 해당 서브넷에 DB가 있다고 가정하면, DB버전을 업그레이드하기위해서 인터넷 연결이 필요할 수 있습니다.
이때 NAT 게이트웨이를 이용하여, 내부에서 외부로만 접근이 가능하게 만들어 줄 수 있습니다.
외부에서 NAT 게이트웨이를 이용하여 접속을 불가능합니다.
여기서 말하는 외부란, VPC영역이 다른것을 의미합니다. 같은 VPC영역에 있으면 private IP로 접근이 가능합니다.
NAT 게이트웨이 설정 방법은 퍼블릭 서브넷에 NAT 게이트웨이에 EIP를 할당하여 생성 후 프라이빗 서브넷의 라우팅 테이블에 등록해주면됩니다.
즉, 프라이빗 서브넷에서 라우팅 테이블을 보고 인터넷으로 나가는 규칙 (0.0.0.0)에 대해서는 NAT 게이트웨이를 타고 EIP(공인 IP)로 변환 후 igw를 통해 인터넷으로 나가는것입니다.
이렇게 불편해지는데 프라이빗 서브넷을 사용하는 이유는, 엄격하게 다뤄야할 리소스들을 안전하게 관리하기 위함입니다.
앞서 예를든것처럼, DB를 프라이빗 서브넷에 위치시킨다던가, ELB만 퍼블릭영역에 두고 실제 WAS는 프라이빗영역에 배치하여 보다 안전하게 관리할 수 있습니다.
추가적으로, 초기환경 구축을 위해 로컬에서 접속을 한다면 당연히 접속할 수 없습니다. 외부에서 다이렉트로 접속할 공인IP가 할당이 안되어있기 때문이죠. ssh 터널링 방법을 사용하여 같은 vpc 에있는 퍼블릿 서브넷을 통해 접속 할 수 있습니다.