개인적으로 공부하며 정리한 글입니다. 당연히 틀린 부분이 있을 수 있으니 중요한 부분은 공식 문서를 확인하시길 바랍니다.
어떤 피드백이라도 감사히 받겠습니다.
AWS 를 사용하거나 공부할 때 가장 진입장벽을 많이 느끼는 파트 같습니다.
현대에선 네트워크의 추상화가 너무 잘되어있어 네트워크 관련 엔지니어가 아니라면 잘 와닿지도 않을 것 같습니다.
그런 VPC 를 한 번 다뤄보려 합니다.
VPC
란 용어 자체는 Virtual Private Cloud
의 약자로 AWS 에서 제공하는 가상의 사설 네트워크 입니다.
이 VPC 의 역할은 뭘까요?
용어 자체에서 알 수 있듯 네트워크의 한 분류로 볼 수 있습니다.
네트워크
는 여러 대의 컴퓨터가 서로 연결되어 데이터를 주고 받을 수 있는 환경, 개념을 일컫는 말입니다.
그래서 AWS VPC 는 AWS 내의 자원이 서로 연결되어 작용할 수 있도록 도와주는 기능입니다.
그래서 다이어그램을 그리게 되면 대부분의 AWS 서비스를 감싸듯 나타나는걸 볼 수 있습니다.
서로 상호작용할 AWS 리소스들을 네트워크 안에서 편리하고 효과적으로 관리하기 위함입니다.
조금 더 구체적으로는 같은 네트워크 안의 자원들끼리만 통신할 수 있도록 내부적으로 라우팅 처리를 해준다던가 현재 VPC 에서 인터넷과 연결을 위해 인터넷 게이트웨이를 추가한다던가 하는 작업을 VPC 를 통해 할 수 있습니다. 그리고 서브넷을 나눠 네트워크를 좀 더 세분화해서 다룰 수도 있습니다.
이러한 기능을 한 곳에서 담당하고 있는게 VPC 입니다.
서브넷은 VPC 같은 네트워크를 조금 더 세분화, 즉 잘게 나눠서 사용하는 개념입니다.
AWS 에서 서브넷은 논리적으로 VPC 네트워크를 나누는 것이라 물리적 분리의 개념과는 다릅니다. 따라서 라우팅도 소프트웨어적으로 처리합니다. 그리고 서브넷은 AWS 내 한 가지 가용 영역 안에서 관리 됩니다.
이렇게 나눈 서브넷에 개별적으로 ACL 같은 보안 설정을 둘 수 있고 Public, Private 으로 설정해 보안적인 부분을 향상시킬 수 있습니다. (트래픽 병목 감소의 효과도 있다하는데 잘 이해가 안 가네요.)
네트워크는 자신의 네트워크를 형성하기 위해 인스턴스나 여러 장치들을 자신 안에 두는데 이런 장치들을 관리하기 위해 IP를 부여해야 합니다.
이런 IP는 기본적으로 Private IP 로 다룹니다.
그리고 이런 IP 는 한정적인 자원 입니다. IPv4 를 따른다면 최대 가능한 IP 는 2^32 개가 됩니다. (실제론 예약 IP 를 제외한 수만큼 가능)
그래서 VPC 의 한정된 IP 를 서브넷으로 나눈다는건 땅따먹기 게임 같은 일이 발생합니다.
인터넷 연결 시엔 Public IP 가 필요합니다. 이때 네트워크 내부에서 다뤄지는 Private IP 를 Public IP 로 바꿔줘야하는데 이 역할을 해주는게
NAT(Network Address Translation)
입니다.
CIDR 는 서브넷마스킹 표기법 중 하나입니다.
아래와 같이 익숙한 IPv4 주소를 표기한 뒤 /숫자 를 덧붙이는데
이를 프리픽스 표기법이라 합니다. (CIDR 표기법에서 프리픽스 표기법을 사용)
10.0.0.0/16
이런 서브넷마스킹은 네트워크 장치들에 주로 붙습니다. 왜냐하면 네트워크 정의와 라우팅을 위해서 입니다.
어떻게 CIDR 를 보고 네트워크 정의와 라우팅을 할 수 있는지 설명드리겠습니다.
그전에 CIDR 표기 구조를 조금 더 자세히 말씀드리자면
프리픽스 표기의 숫자는 네트워크 식별에 해당하는 비트 수를 의미합니다.
IPv4 는 32비트로 구성되어 있어 프리픽스 표기의 수만큼 IP 비트의 앞자리 수들을 네트워크 식별용으로 사용하겠다는 의미입니다.
10.0.0.0/16 의 경우엔 앞 16비트를 의미하는 10.0 을 네트워크 식별용으로 사용하겠다는 의미입니다.
이렇게 CIDR 를 통해 네트워크 장치를 식별할 수 있게 되니 이 정보를 통해 네트워크 정의와 라우팅을 할 수 있습니다.
네트워크를 정의할 때 10.0.0.0/16 을 선언함으로 10.0 으로 시작하는 IP는 이 장치에서 처리하겠습니다. 라고 나타낼 수 있습니다. 그리고 이 정의를 통해 라우팅 과정에서 10.0 으로 시작하는 요청 트래픽들을 라우팅 처리 할 수 있습니다.
이제 여기에 서브넷 개념을 가져와 보겠습니다.
AWS 에서 서브넷은 VPC 를 세분화한 것이니 VPC 는 서브넷을 포함한다고 표현할 수 있습니다. 즉 서브넷은 VPC 보다 커질 수 없으니 서브넷들은 VPC 보다 CIDR 에서 표기할 수 있는 네트워크 식별용 수의 범위가 적습니다.
VPC 의 CIDR 표기가 10.0.0.0/16 이라면 서브넷의 CIDR 표기는 10.0.0.0/17 처럼 VPC 의 것보다 식별할 수 있는 수의 범위를 적게 해야합니다. (전자의 경우 다룰 수 있는 IP의 수가 2^16, 후자의 경우 2^15)
추가로 CIDR 는 네트워크 장치를 위한 것이고 인스턴스 같은 호스트들은 굳이 CIDR 로 나타낼 필요가 없습니다. 굳이 나타낸다면 프리픽스 수로 32가 들어올 것입니다. 인식하고 처리해야할 IP가 자기자신 밖에 없으니까요.
AWS 에선 실제 네트워크 장치별 예약된 IP 가 있어 실제 기대한 CIDR 규모보다 사용할 수 있는 IP 는 적을 수 있습니다. (서브넷 첫 번째, 마지막 IP는 예약되어있습니다. 네트워크 자체 주소, 브로드캐스트 주소)
사설망의 IP 범위는 표준에 따라 정해져 있습니다.
10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
IGW(Internet Gateway), Subnet, 라우팅 테이블 그리고 EC2, RDS 같이 VPC 내에서 관리되는 AWS 리소스들이 있습니다.
AWS 리소스 중엔 VPC 에 포함되지 않는 S3, DynamoDB 같은 것들이 있는데 이런 것들은 VPC 밖에서 처리됩니다. (VPC 에 존재하지 않는다고 무조건 인터넷을 통해 S3 에 접근하는 것은 아니고 내부적으로 Endpoint 를 통해 접근 가능합니다. 이렇게 VPC 밖에 있어도 VPC 와 통합된 듯 사용이 가능합니다.)
VPC 나 서브넷을 나눔으로 드는 비용은 없지만 Public IP 부여나 Network Gateway 등 일부 서비스에는 비용이 발생합니다.
공식 자료
그리고 네트워크 비용 (Data Transfer) 에 대해서 따져봐야합니다.
같은 VPC 내 다른 가용 영역에 배치된 서브넷에 데이터를 전송한다면 비용이 발생합니다.
반대로 같은 VPC 내 같은 가용 영역에 배치된 서브넷에 데이터를 전송한다면 비용이 발생하지 않습니다.
IGW 를 통해서 데이터를 전송한다면 Outbound 비용이 발생합니다. AWS 정책 상 Inbound 비용은 받지 않습니다. (인터넷에서 인스턴스에 데이터를 전달한다면 인스턴스 입장에선 외부에서 데이터가 들어오는거니 Inbound 로 처리, 사진 업로드처럼)
그 외 VPC 끼리 서로 통신하는 VPC peering 이나 Endpoint 접근등이 있긴한데 이 곳에 다 적진 않겠습니다.
저는 비용 관련 책임을 질 수 없으니 꼭 스스로 한 번 더 확인하시고 본인만의 전략을 세우시길 권장합니다. 시간이 지남에 따라 price 정책이 바뀔 수도 있습니다.
따라서 비용을 개선하고 싶다면 다음 방법들을 고려할 수 있습니다.
리전, VPC, 가용 영역(AZ), 서브넷 이런 용어들이 있는데 관계가 어떻게 되나요?
가용 영역은 리전 내에 존재하는 물리적 위치, 영역 입니다.
한 리전에 가용 영역 a, b, c 가 있다면 이건 한 리전에 데이터 센터 건물이 독립적으로 세 곳 있다고 볼 수 있습니다.
따라서 가용 영역은 리전 바로 밑의 개념입니다.
그리고 VPC 또한 리전 바로 밑의 개념입니다.
그래서 가용 영역과 VPC 는 같은 레벨의 개념이라 서로 포함되게 설명이 불가하고 이해하는데 어려움을 주는 것입니다.
그래서 다이어그램을 그릴 때도 가용 영역과 VPC 는 포함되게 그리지 않고 겹쳐서 그리 것을 많이 볼 수 있습니다.
대신 서브넷은 단일 가용 영역 안에 포함되어야 합니다.
마치 VPC 와 가용 영역이 각각 x축, y축 같아서 서브넷들은 x축, y축이 나타내는 좌표와도 같이 느껴지네요.
VPC 는 AWS 자원들끼리 네트워크 안에서 상호작용하고 네트워크 처리를 편리하게 할 수 있게 도와주는 서비스입니다.
VPC 내부에는 인터넷 게이트웨이, 서브넷, 라우팅 테이블 같은 요소들이 있어 네트워크 전반적인 처리를 담당합니다.
VPC 자체엔 비용이 없지만 Public IP, NAT Gateway 같은 서비스에선 비용이 청구됩니다.