개요
- VPC란?
VPC는 Virtual Private Cloud의 약자로 클라우드 구성을 가상화된 private 공간에 두는 방식을 의미함
AWS의 인스턴스 상품군(EC2, RDS 등)은 기본적으로 VPC를 지정하게 되어 있으며, AWS 계정을 처음 생성하면 default-vpc
가 생성되어 있음
그럼 여기서 왜 vpc가 default로 구성되어 있을까?
-> VPC는 서버 자원 간 연결의 기본이 되는 공간으로, 같은 네트워크에 속한 자원끼리는 자유롭게 통신할 수 있기 때문에
- VPC 특성
1) 독립적인 가상의 네트워크 공간
하나의 데이터센터에 존재하는 여러 가상 서버들을 독립된 데이터센터처럼 운영할 수 있도록 데이터센터 망에서 분리시켜주는 형태라고 생각하면 됨
But, 독립적인 가상 네트워크여도 물리적인 제약을 완전히 분리해낼 수는 없음 (즉, 복수의 데이터센터에 있는 여러 가상 서버들을 하나의 VPC로 운영할 수 없음)
So, 물리적 제약이 남아있는 특성은 AWS의 리전(Region)
과 가용 영역(Availability Zone)
을 이해하는게 좋음
리전(Region)
: AWS의 데이터센터 여러 개의 묶음을 의미함 ex) AWS 서울 리전은 AWS가 서울에 배치한 데이터센터들의 묶음을 의미함
가용 영역(Availability)
: 하나의 리전 안에 구성된 물리적으로 분리된 데이터 센터로, 각각의 리전은 최소 2개
의 가용 영역으로 구성되어, 단일 리전이라도 물리적으로 분리된 여러 데이터센터를 둠으로써 자연재해 등의 발생에도, 하나의 리전 전체가 중단되는 상황 방지
2) 사용자의 설정에 따라 자유롭게 구성 가능한 네트워크
VPC는 데이터센터에서 논리적으로 분리된 네트워크 공간이기 때문에, 사용자가 자유롭게 IP 설정, 트래픽 제한, 라우팅, 엔드포인트 지정 등을 수행할 수 있음
VPC를 생성할 때는 기본적으로 CIDR 블록을 설정하게 돼있는데, VPC내의 인스턴스들은 지정된 CIDR 블록 내의 로컬 IP를 할당받게 됨
- VPC 구성
1) 서브넷
VPC를 가용 영역별로 구성하는 설정
가용 영역 내에 있는 인스턴스들을 역할 단위로 묶어 각각의 독립적인 서브넷을 만들 수 있고, 이러한 서브넷마다 역할에 맞느 ㄴ네트워크 설정을 적용할 수 있음
서브넷을 통해 동일한 역할을 수행하는 인스턴스들을 묶어 동일한 네트워크 설정을 적용할 수 있음
이를 위해 처음 프로젝트를 시작할 때부터 Web, API, DB, LoadBalancer 등 AWS의 인스턴스 단위별로 서브넷을 만들어두는 것이 좋음
2) 네트워크 ACL
cf) 보안 그룹은 네트워크 내부 간 통신을 담당하는 보안 기능 (각 방의 방문 역할)
외부와의 트래픽을 보호하는 보안 기능이기 때문에 모든 서브넷을 1개의 네트워크 ACL
을 반드시 구성하도록 되어 있으며, VPC가 생성되면 기본 네트워크 ACL이 생성됨
네트워크 ACL은 기본적으로 모든 In/Out Bound를 차단하며, 최초 생성되는 기본 네트워크 ACL은 모든 트래픽을 허용하도록 추가 설정이 적용되어 있음
So, 직접 새로운 네트워크 ACL을 만들 경우 허용할 규칙을 직접 설정해주어야 외부와 정상적인 통신이 가능함. 특히 네트워크 ACL은 동일한 포트에 대해 Inbount와 Outbound가 모두 열려있어야만 정상 작동하도록 설계 되어있음
3) 라우팅 테이블
IP주소에 트래픽 라우팅 경로를 설정하고 이를 통해 In/Out Bound 트래픽에 대한 경로를 설정해주는 기능 (즉, 들어오는 트래픽과 나가는 트래픽 모두를 목적지에 따라 적당한 경로로 전달시켜주는 역할)
So, AWS의 모든 게이트웨이와 인터페이스, 피어링 연결을 포함해 네트워크 경로를 모두 지정할 수 있기 때문에 라우팅 테이블을 잘 설계해두면 상황에 따라 능동적으로 네트워크 상황을 변경할 수 있음
4) 게이트웨이
게이트웨이는 크게 Internet GateWay
와 NAT gateway
로 나뉨
Internet Gateway
는 VPC 내부의 리소스, 특히 서브넷이 인터넷과 연결될 수 있도록 하는 AWS 요소
-NAT gateway
는 주로 외부에 내부망의 IP 정보를 전달하는 것을 방지하기 위해 사용
- 정리
이전에 인스턴스를 생성할 때 VPC와 서브넷, 게이트웨이, 라우팅 테이블 등이 default값으로 설정되어 있어 각각의 의미에 대해서 자세히 몰랐는데 공부하고 보니 네트워크 설정의 중요성에 대해 알게 되었다.
클라우드 설계 과정에서는 외부망/내부망/인스턴스 순으로 순차적인 네트워크 흐름을 고려하며 설계하는 것이 더욱 효과적이라고 한다.
So, 인스턴스부터 빠르게 만들기보다는 VPC에 대해 충분히 이해하고, VPC와 서브넷, 게이트웨이와 라우팅 테이블 등을 어떻게 구성할지 구상한 뒤 인스턴스를 그에 맞추어 세팅하는 것이 좋다.