1. 클라우드에서 네트워크를 직접 설계할 수 있다면
AWS에 EC2 서버를 만들면 어딘가의 네트워크 안에 배치됩니다. 이 네트워크를 직접 설계하고 제어할 수 있다면 어떨까요?
어떤 서버는 인터넷에서 접근 가능하게 하고, 어떤 서버는 내부에서만 접근 가능하게 격리하는 것이 가능합니다. 이것이 VPC가 하는 일입니다.
2. VPC란 무엇인가?
**VPC(Virtual Private Cloud)**는 AWS 클라우드 안에서 논리적으로 격리된 나만의 가상 네트워크 공간입니다.
물리적 오피스 빌딩 비유로 이해하면 쉽습니다. VPC는 하나의 오피스 빌딩입니다. 빌딩 안에는 여러 부서(서브넷)가 있습니다. 1층 안내 데스크(퍼블릭 서브넷)는 외부 방문객이 출입할 수 있지만, 임원실(프라이빗 서브넷)은 내부 직원만 접근할 수 있습니다.
VPC는 리전 단위로 생성되며, AWS 계정을 만들면 각 리전마다 기본 VPC가 자동 생성됩니다.
3. 서브넷 – 네트워크를 작게 나누는 이유
**서브넷(Subnet)**은 VPC를 더 작은 IP 주소 범위로 나눈 것입니다. 가용 영역(AZ)별로 서브넷을 만들어 여러 데이터센터에 분산 배치할 수 있습니다.
서브넷을 나누는 이유는 역할에 따라 보안 수준을 다르게 적용하기 위해서입니다.
4. 퍼블릭 서브넷 vs 프라이빗 서브넷
퍼블릭 서브넷은 인터넷 게이트웨이와 연결되어 외부 인터넷에서 직접 접근할 수 있습니다. 웹 서버, 로드 밸런서처럼 외부 사용자가 접근해야 하는 리소스를 배치합니다.
프라이빗 서브넷은 인터넷과 연결되지 않아 외부에서 직접 접근할 수 없습니다. 데이터베이스, 내부 API 서버처럼 외부 노출이 불필요한 리소스를 배치합니다.
보안의 기본 원칙은 외부에 노출이 필요하지 않은 것은 프라이빗 서브넷에 두는 것입니다.
5. 인터넷 게이트웨이와 NAT 게이트웨이의 역할
**인터넷 게이트웨이(Internet Gateway)**는 VPC를 인터넷에 연결하는 통로입니다. 퍼블릭 서브넷의 리소스가 인터넷과 양방향으로 통신할 수 있게 합니다.
**NAT 게이트웨이(NAT Gateway)**는 프라이빗 서브넷의 리소스가 인터넷으로 나가는 요청만 허용하는 단방향 통로입니다. 예를 들어 프라이빗 서브넷의 서버가 패키지 업데이트를 받아야 할 때 NAT 게이트웨이를 통해 인터넷으로 요청을 보낼 수 있지만, 외부에서 직접 들어오는 연결은 차단됩니다.
NAT 게이트웨이는 시간당 요금이 발생하므로 학습 목적이라면 생략해도 됩니다.
6. 보안 그룹과 네트워크 ACL의 차이
두 가지 모두 트래픽을 제어하지만 적용 범위가 다릅니다.
보안 그룹은 인스턴스(EC2) 레벨에서 동작합니다. 상태 저장 방식으로 허용된 인바운드 요청의 응답 트래픽은 자동으로 허용됩니다.
네트워크 ACL은 서브넷 레벨에서 동작합니다. 상태 비저장 방식으로 인바운드와 아웃바운드를 각각 명시적으로 허용해야 합니다.
일반적으로는 보안 그룹만으로 충분합니다. 서브넷 레벨의 추가 보안이 필요할 때 네트워크 ACL을 활용합니다.
7. 실제 3티어 아키텍처에서의 VPC 구성
일반적인 웹 서비스의 VPC 구성입니다.
퍼블릭 서브넷에는 인터넷에서 접근할 수 있는 로드 밸런서와 Nginx 웹 서버를 배치합니다. 프라이빗 서브넷 1에는 앱 서버(Node.js, Python 등)를 배치합니다. 앱 서버는 로드 밸런서를 통해서만 접근 가능합니다. 프라이빗 서브넷 2에는 데이터베이스(RDS)를 배치합니다. 앱 서버에서만 접근 가능합니다.
이렇게 계층을 분리하면 DB는 외부에서 절대 직접 접근할 수 없어 보안이 강화됩니다.
8. 정리 및 다음 단계
오늘 배운 핵심을 정리합니다.
- VPC는 AWS 안에 만드는 논리적으로 격리된 가상 네트워크입니다.
- 퍼블릭 서브넷은 인터넷 접근 가능, 프라이빗 서브넷은 인터넷 접근 불가입니다.
- DB는 프라이빗 서브넷에 배치해 외부 접근을 차단하는 것이 기본 보안 원칙입니다.
- 보안 그룹은 인스턴스 레벨, 네트워크 ACL은 서브넷 레벨 방화벽입니다.
다음 글에서는 AWS Lambda와 서버리스 컴퓨팅의 개념을 알아보겠습니다.