Virtual Private Cloud
AWS 상에서 내가 원하는 네트워크 구조를 직접 설계하고, 격리된 공간에서 운영할 수 있도록 해주는 서비스
VPC (10.0.0.0/16)
├── Subnet A (10.0.1.0/24)
└── Subnet B (10.0.2.0/24)
VPC 안에서 IP 주소 범위를 작게 나누는 단위
| 항목 | 퍼블릭 서브넷 | 프라이빗 서브넷 |
|---|---|---|
| 외부 인터넷 통신 | 가능 (IGW 연결) | 기본적으로 차단됨 |
| 대표 용도 | 웹 서버, Bastion Host | DB 서버, 백엔드 API 서버 |
| 라우팅 테이블 | 0.0.0.0/0 → IGW | 0.0.0.0/0 → NAT Gateway |
| 보안 성격 | 외부 노출 가능성 높음 | 내부망으로 보호 |
| 예시 서비스 | ALB, EC2 Web | RDS, Redis, EC2 백엔드 |
퍼블릭은 외부에서 접속 가능한 리소스가 위치
프라이빗은 외부에서는 접근 불가, 내부 서비스 전용
프라이빗 서브넷에 있는 리소스가 외부로 나가는 통로
| 항목 | 설명 |
|---|---|
| 통신 방향 | 내부 → 외부만 허용, 외부 → 내부는 차단 |
| 보안 효과 | 외부 접근은 막되, 내부 자원은 인터넷 이용 가능 |
| 과금 | 시간 + 데이터 처리량 기준 |
| 대안 | NAT 인스턴스 (하지만 관리 복잡도 높음) |
📦 VPC (10.0.0.0/16)
├── 🌐 퍼블릭 서브넷 (10.0.1.0/24)
│ ├── EC2 웹 서버
│ └── 인터넷 게이트웨이 (IGW)
│
├── 🔒 프라이빗 서브넷 (10.0.2.0/24)
│ ├── EC2 백엔드 서버
│ └── NAT Gateway 연결
│
├── 🔐 프라이빗 서브넷 (10.0.3.0/24)
│ └── RDS DB 인스턴스
📌 실제로는 AZ 분산(다중 가용영역) 구성 권장
"하나의 서버실이 문제가 생겨도, 서비스는 계속되어야 한다."
AZ 간에는 저지연, 고속 네트워크로 연결되어 있음
| 단일 AZ 구성 시 | 다중 AZ 구성 시 |
|---|---|
| 장애 발생 시 서비스 전체 중단 가능 | 한 AZ가 다운되어도 다른 AZ에서 서비스 유지 가능 |
| 가용성이 낮음 | 고가용성(High Availability, HA) 확보 |
| 장애 대응이 수동적 | 자동 복구(Auto Recovery) 또는 멀티 AZ 전환 가능 |
VPC
├── Subnet-A (ap-northeast-2a)
│ ├── EC2 Web 서버
│ └── RDS DB (멀티 AZ)
│
├── Subnet-B (ap-northeast-2c)
│ ├── EC2 Web 서버 (Auto Scaling)
│ └── Standby RDS
"VPC 안에서 가용성 확보 = AZ 분산 설계가 기본이다"
- 단일 AZ → 비용은 적지만 리스크 큼
- 멀티 AZ → 구성은 복잡하지만 기업 서비스에서는 사실상 필수
VPC 내의 서브넷이 어디로 트래픽을 전달할지 결정하는 설정표
- 각 서브넷은 하나의 라우팅 테이블에 연결
- 라우팅 테이블은 여러 서브넷과 공유할 수 있음
- 트래픽 목적지(CIDR)와 대상(Target)을 명시
Destination: 0.0.0.0/0 → Target: igw-abc123 # 인터넷 게이트웨이
Destination: 0.0.0.0/0 → Target: nat-xyz789 # NAT Gateway
같은 VPC 내 서브넷끼리는 기본적으로 통신 가능
다만, 라우팅 테이블과 보안 그룹 설정이 맞아야 실질적 통신 가능
| 조건 | 통신 가능 여부 |
|---|---|
| 같은 VPC, 서로 다른 서브넷 | ✅ 가능 |
| 라우팅 테이블에 서로를 향한 경로 없음 | ❌ 불가 |
| 보안 그룹 인바운드 허용 없음 | ❌ 불가 |
| 목적 | 설정 방식 |
|---|---|
| 퍼블릭 서브넷에서 외부로 | 0.0.0.0/0 → IGW |
| 프라이빗 서브넷에서 외부로 | 0.0.0.0/0 → NAT Gateway |
| 내부 통신 (ex. Web → DB) | 별도 라우팅 필요 없음 (같은 VPC일 경우) |
[ 퍼블릭 서브넷 ] --IGW-->
EC2 Web
[ 프라이빗 서브넷 ] --NAT GW--> 인터넷
EC2 App
[ 프라이빗 서브넷 ] --- 내부 통신 --->
RDS DB
| 항목 | 보안 그룹 (SG) | 네트워크 ACL (NACL) |
|---|---|---|
| 작동 방식 | 상태 저장(Stateful) | 비상태 저장(Stateless) |
| 적용 범위 | 인스턴스 단위 | 서브넷 단위 |
| 기본 설정 | 모든 인바운드 차단 / 아웃바운드 허용 | 모든 트래픽 허용 |
| 보통 역할 | 방화벽 역할 | 추가 네트워크 필터링 용도 |
실무에서는 대부분 SG로 제어하고, NACL은 특별한 보안 요구 시 사용
서로 다른 VPC 간의 네트워크 연결을 직접 구성하는 방식
마치 하나의 VPC처럼 통신할 수 있도록 만들어주는 기능
| 사용 상황 | 이유 |
|---|---|
| 마이크로서비스 간 분리된 VPC | 서비스 별 격리는 유지하면서도 통신은 필요 |
| 계정/환경 별 VPC 구성 (예: dev/prod) | 서로 리소스를 참조하거나 호출해야 함 |
| 조직 간 협업 (다른 계정) | 서비스 연동, 내부 API 호출 등 |
| 비용 절감 및 성능 향상 | NAT, Transit Gateway 없이 바로 연결 가능 |
💡 S3, RDS, EC2 등 모든 서비스에서 프라이빗 IP로 호출 가능
📦 VPC-A (10.0.0.0/16)
└── Subnet-A (10.0.1.0/24)
└── EC2-A
📦 VPC-B (192.168.0.0/16)
└── Subnet-B (192.168.1.0/24)
└── EC2-B
==> VPC Peering 연결 생성 후:
EC2-A → EC2-B (프라이빗 IP로 ping 가능)
VPC A → VPC B 요청Destination: 192.168.0.0/16 → Target: pcx-abc123
Destination: 10.0.0.0/16 → Target: pcx-abc123
pcx-abc123는 Peering Connection ID
| 제한/주의점 | 설명 |
|---|---|
| 양방향 설정 필수 | 라우팅, 보안 그룹 모두 서로 허용해야 통신 가능 |
| 중첩 CIDR 불가 | 두 VPC의 IP 범위가 겹치면 Peering 불가 |
| 전이(transitive) 불가 | A ↔ B, B ↔ C 연결되어 있어도 A → C 불가 |
| 인터넷 게이트웨이 공유 불가 | IGW는 각 VPC에서 별도로 설정해야 함 |
| 비용 | Peering 연결 자체는 무료, 트래픽에 따라 요금 발생 |
"VPC Peering은 서로 떨어진 가상 사설망을 하나처럼 연결하는 안전한 통로"
구성 수가 많아질수록 확장성의 한계가 생기므로, 구조 설계 단계에서 필요성과 규모를 먼저 판단