coredot.today
VPC 완전 정복: 클라우드 안에 '나만의 네트워크'를 짓는 법
블로그로 돌아가기
VPCAWS네트워크보안서브넷방화벽클라우드

VPC 완전 정복: 클라우드 안에 '나만의 네트워크'를 짓는 법

왜 클라우드에서 '가상 사설 네트워크'가 필요한가? 아파트 비유로 서브넷·라우팅·보안 그룹·NAT를 이해하고, Capital One 사고에서 VPC 설정의 중요성을 배우며, 실전 아키텍처를 설계해 본다.

코어닷투데이2026-02-2330

들어가며: 클라우드는 "공유 공간"이다

AWS의 데이터센터에는 수백만 명의 고객이 같은 물리적 서버, 네트워크, 스토리지를 공유하고 있다. 당신의 EC2 인스턴스 옆에 전혀 모르는 다른 회사의 인스턴스가 돌아가고 있을 수 있다.

이것은 아파트와 같다. 같은 건물에 수백 세대가 살지만, 각 세대는 독립된 공간이다. 옆집에 누가 사는지 몰라도 되고, 옆집에서 내 집에 들어올 수 없다.

하지만 만약 아파트에 문 잠금장치, 벽, 복도 구분이 없다면? 누구나 아무 집에나 들어갈 수 있을 것이다.

초기 AWS(2006~2009)가 바로 이랬다. EC2 인스턴스들이 하나의 공유 네트워크(EC2-Classic) 에서 돌아갔다. 모든 인스턴스가 같은 네트워크에 있으니 기본적으로 서로 통신이 가능했고, 보안 그룹이 유일한 방어선이었다.

이것은 보안에도, 네트워크 설계에도 부족했다. 기업들은 온프레미스에서 하던 것처럼 자신만의 격리된 네트워크를 원했다.

2009년, AWS는 이 요구에 VPC(Virtual Private Cloud)로 응답했다.


1. VPC란 무엇인가

정의

VPC는 AWS 클라우드 안에 만드는 논리적으로 격리된 가상 네트워크다. 회사 사무실의 사설 네트워크(LAN)를 클라우드에 그대로 옮겨놓은 것이라 생각하면 된다.

VPC 안에서는:

  • IP 대역을 직접 정한다 (10.0.0.0/16 같은 CIDR 블록)
  • 서브넷으로 영역을 나눈다 (부서별 네트워크처럼)
  • 라우팅 규칙을 설정한다 (트래픽이 어디로 갈지)
  • 방화벽을 설정한다 (누가 접근할 수 있는지)
  • 다른 고객의 VPC와 완전히 격리된다

아파트 비유로 이해하기

VPC의 모든 개념을 아파트 건물에 비유하면 직관적으로 이해할 수 있다:

VPC 개념아파트 비유역할
VPC아파트 단지 전체나만의 격리된 네트워크 공간
서브넷각 동(棟)네트워크를 용도별로 분리
퍼블릭 서브넷1층 상가 (외부 출입 가능)인터넷에서 접근 가능한 영역
프라이빗 서브넷주거 층 (외부 출입 불가)인터넷에서 직접 접근 불가능한 영역
인터넷 게이트웨이(IGW)아파트 정문VPC와 인터넷을 연결
NAT 게이트웨이택배 서비스프라이빗 서브넷이 외부에 요청만 가능 (외부에서 들어오기 불가)
라우트 테이블안내 표지판트래픽을 어디로 보낼지 규칙
보안 그룹각 세대의 도어락인스턴스 단위의 방화벽
네트워크 ACL동 출입구의 경비원서브넷 단위의 방화벽
VPC 피어링단지 간 연결 통로다른 VPC와 사설 통신

2. VPC의 구성 요소를 하나씩 뜯어보기

서브넷: 네트워크를 방(Room)으로 나누기

VPC를 만들면 큰 IP 주소 공간(예: 10.0.0.0/16 = 65,536개 IP)을 얻는다. 이 공간을 서브넷으로 나눈다.

전형적인 VPC 서브넷 구조
VPC (10.0.0.0/16) 65,536개 IP 주소
퍼블릭 서브넷 10.0.1.0/24 ALB, Bastion
퍼블릭 서브넷 10.0.2.0/24 ALB, NAT GW
프라이빗 서브넷 10.0.11.0/24 앱 서버 (EC2/ECS)
프라이빗 서브넷 10.0.12.0/24 앱 서버 (EC2/ECS)
DB 서브넷 10.0.21.0/24 RDS, ElastiCache
DB 서브넷 10.0.22.0/24 RDS, ElastiCache

퍼블릭 서브넷: 인터넷 게이트웨이(IGW)와 연결된 라우트 테이블을 가진 서브넷. 여기에 있는 리소스는 인터넷과 직접 통신 가능. ALB, NAT Gateway, Bastion Host를 여기에 둔다.

프라이빗 서브넷: IGW로의 라우트가 없는 서브넷. 외부에서 직접 접근 불가. 애플리케이션 서버, 데이터베이스를 여기에 둔다.

💡
왜 서브넷을 2개씩 만드는가? 각 서브넷은 하나의 AZ(가용 영역)에 속한다. 고가용성을 위해 최소 2개 AZ에 걸쳐 서브넷을 만드는 것이 모범 사례다. 한 AZ에 장애가 나도 다른 AZ의 서브넷이 살아있다.

인터넷 게이트웨이(IGW)와 NAT 게이트웨이

인터넷 게이트웨이(IGW): VPC의 정문. VPC와 인터넷을 연결한다. 양방향 통신.

NAT 게이트웨이: 프라이빗 서브넷의 리소스가 인터넷에 나가기만 할 수 있게 해준다. 외부에서 들어오는 것은 차단.

프라이빗 서브넷의 EC2가 OS 패치를 다운받거나, 외부 API를 호출할 때 NAT 게이트웨이를 거친다. 하지만 외부에서 이 EC2에 직접 접근하는 것은 불가능하다.

인터넷
↕ 양방향
인터넷 게이트웨이 (IGW)
퍼블릭 서브넷 (ALB, NAT GW)
프라이빗 서브넷 (앱 서버)
↓ NAT를 통해 아웃바운드만
DB 서브넷 (RDS) — 인터넷 접근 완전 차단

보안 그룹 vs 네트워크 ACL

두 가지 방화벽이 있다. 역할이 다르다:

보안 그룹 (Security Group)
인스턴스(ENI) 단위로 적용
Stateful: 아웃바운드 허용하면 리턴 자동 허용
허용 규칙만 (Deny 불가)
모든 규칙을 평가 (순서 없음)
비유: 세대 도어락 (방문자를 선별)
네트워크 ACL (NACL)
서브넷 단위로 적용
Stateless: 인/아웃 각각 별도 규칙 필요
허용 + 거부 규칙 모두 가능
규칙 번호 순서대로 평가
비유: 동 출입구 경비원 (출입자 명부)
실전 가이드: 대부분의 보안은 보안 그룹만으로 충분하다. NACL은 기본값(모두 허용)을 유지하고, 특정 IP를 서브넷 수준에서 차단해야 할 때만 사용하라. 보안 그룹이 "허용 목록", NACL이 "차단 목록" 역할로 보완적으로 사용하는 것이 모범 사례.

3. VPC 보안: Capital One 사고의 교훈

VPC 설정이 뚫리면 모든 것이 뚫린다

이 시리즈에서 반복 등장한 2019년 Capital One 사고를 VPC 관점에서 다시 보자.

공격 경로:

  1. 공격자가 Capital One의 WAF(Web Application Firewall) 설정 오류를 발견
  2. WAF가 설치된 EC2의 IAM 역할에 과도한 권한이 부여되어 있었음
  3. SSRF(Server-Side Request Forgery) 공격으로 EC2 메타데이터 서비스에서 IAM 자격증명 탈취
  4. 이 자격증명으로 S3 버킷과 RDS에 접근 → 1억 600만 명의 데이터 유출

VPC 관점에서의 문제:

  • WAF/프록시 서버가 퍼블릭 서브넷에 있으면서 내부 리소스에 과도한 접근 권한을 가지고 있었음
  • 프라이빗 서브넷에 있어야 할 리소스가 적절히 격리되지 않았음
  • SSRF에 대한 방어가 없었음 (EC2 메타데이터 서비스 IMDSv2 미사용)
🔒
핵심 교훈: VPC 설계의 기본 원칙은 "최소 권한, 최대 격리"다. (1) DB는 반드시 프라이빗 서브넷에, (2) 퍼블릭 서브넷에는 ALB와 NAT GW만, (3) 보안 그룹은 필요한 포트만 열고, (4) EC2 메타데이터 서비스는 IMDSv2를 강제하라.

기타 VPC 관련 보안 사고

2019
Capital One: SSRF + VPC 설계 미흡
1억 600만 명 데이터 유출. 퍼블릭 서브넷 리소스의 과도한 내부 접근 권한이 원인
2020
공개 인터넷에 노출된 RDS 다수 발견
보안 연구에서 퍼블릭 서브넷에 배치된 RDS 인스턴스가 다수 발견. 기본 VPC의 함정
2024~
AWS 기본 보안 강화
IMDSv2 기본 강제, 새 VPC의 기본 보안 그룹 강화, VPC Lattice 등 제로 트러스트 도구 출시

4. 실전 VPC 아키텍처

3티어 웹 서비스의 표준 VPC

이 시리즈에서 다룬 모든 서비스를 VPC 안에 배치하면:

3티어 VPC 아키텍처
인터넷 사용자
CloudFront + WAFCDN + DDoS 방어
VPC (10.0.0.0/16)
퍼블릭 서브넷 ALB, NAT GW
프라이빗 (앱) ECS/EKS, Lambda
프라이빗 (DB) RDS, ElastiCache, OpenSearch

보안 그룹 규칙:

리소스인바운드 허용아웃바운드
ALB0.0.0.0/0:443 (HTTPS)앱 서브넷
앱 서버ALB 보안그룹:8080 만DB 서브넷, NAT GW
RDS앱 서버 보안그룹:3306 만없음
ElastiCache앱 서버 보안그룹:6379 만없음

핵심: 보안 그룹 간 참조. RDS의 인바운드에 "앱 서버 보안그룹"을 지정하면, 앱 서버 보안그룹에 속한 인스턴스만 RDS에 접근할 수 있다. IP를 하드코딩하지 않으므로, 앱 서버가 늘어나거나 IP가 바뀌어도 보안 규칙이 자동으로 적용된다.

VPC Endpoints: AWS 서비스에 인터넷 없이 접근

프라이빗 서브넷의 앱이 S3, DynamoDB, ECR에 접근해야 한다. NAT 게이트웨이를 거치면 데이터 전송비가 발생한다.

VPC Endpoint를 사용하면 AWS 서비스에 VPC 내부 네트워크를 통해 직접 접근한다. 인터넷을 거치지 않으므로:

  • NAT 게이트웨이 비용 절감
  • 네트워크 지연 감소
  • 보안 강화 (트래픽이 AWS 네트워크를 벗어나지 않음)
타입대상 서비스비용
Gateway EndpointS3, DynamoDB무료
Interface EndpointECR, CloudWatch, SQS 등 대부분시간당 + 데이터 전송
즉시 적용할 비용 절감: S3 Gateway Endpoint와 DynamoDB Gateway Endpoint는 무료다. 프라이빗 서브넷에서 S3/DynamoDB를 사용한다면, 이 두 엔드포인트만 추가해도 NAT 게이트웨이를 통한 데이터 전송비를 즉시 절감할 수 있다.

5. VPC 비용: NAT 게이트웨이의 함정

NAT 게이트웨이는 비싸다

VPC 비용의 가장 큰 함정: NAT 게이트웨이.

$32.40 NAT GW 월 비용 (시간당) $0.045/시간 × 720시간
$0.045 GB당 데이터 처리비 NAT를 통과하는 모든 데이터
×2 고가용성 시 2배 AZ 2개 = NAT GW 2개

고가용성을 위해 AZ 2개에 각각 NAT 게이트웨이를 배치하면 월 $65+ (데이터 전송비 별도).

프라이빗 서브넷의 EC2/ECS가 Docker 이미지를 ECR에서 Pull하거나, S3에서 데이터를 가져올 때, 모든 트래픽이 NAT를 거치면 비용이 급증한다.

NAT 비용 절감 전략

전략효과
S3/DynamoDB Gateway Endpoint (무료)S3/DynamoDB 트래픽을 NAT에서 분리
ECR, CloudWatch Interface Endpoint주요 AWS 서비스 트래픽을 NAT에서 분리
NAT 인스턴스 (t4g.nano)소규모 환경에서 NAT GW 대체 (~$3/월)
AZ 하나만 NAT GW비프로덕션 환경에서 비용 절반

6. VPC 고급 기능

VPC 피어링: VPC 간 사설 통신

두 VPC를 프라이빗 네트워크로 직접 연결한다. 인터넷을 거치지 않으므로 빠르고 안전하다.

사용 사례:

  • 프로덕션 VPC ↔ 관리 VPC 연결
  • 여러 팀의 VPC 간 데이터 공유
  • 다른 AWS 계정의 VPC와 연결

Transit Gateway: 허브 앤 스포크

VPC가 10개, 20개로 늘어나면 피어링으로는 관리가 어렵다 (N×N 연결). Transit Gateway는 중앙 허브에 모든 VPC를 연결하는 허브 앤 스포크 모델이다.

VPC Flow Logs: 네트워크의 CCTV

VPC를 오가는 모든 트래픽을 로깅한다. 보안 감사, 이상 트래픽 탐지, 네트워크 디버깅에 필수적이다.

# Flow Log 레코드 예시
2 123456789 eni-abc123 10.0.1.5 203.0.113.5 443 49152 6 25 5000 1616729292 ACCEPT

"10.0.1.5에서 203.0.113.5:443으로 TCP 연결, 25 패킷, 5000 바이트, 허용됨"


7. 실제 사례

Netflix: 수백 개의 VPC

Netflix는 수백 개의 마이크로서비스를 여러 VPC에 분산 운영한다. 서비스 간 통신은 VPC 피어링과 Transit Gateway로 연결하며, 보안 그룹으로 세밀한 접근 제어를 적용한다.

Coinbase: 암호화폐 거래소의 VPC 보안

암호화폐 거래소 Coinbase는 모든 리소스를 프라이빗 서브넷에 배치하고, 퍼블릭 접근은 CloudFront + WAF → ALB 경로만 허용한다. VPC Flow Logs를 실시간으로 분석하여 이상 트래픽을 즉시 차단한다.

한국 기업 사례

  • 토스: 금융 데이터 보호를 위해 엄격한 VPC 격리. 프로덕션 VPC, 개발 VPC, 관리 VPC를 완전 분리
  • 쿠팡: Transit Gateway로 수십 개의 VPC를 중앙 관리. 마이크로서비스별 VPC 격리
  • 카카오뱅크: 금융 규제 준수를 위해 프라이빗 서브넷에서만 운영. 인터넷 접근 최소화

8. VPC 설계 모범 사례

반드시 지킬 것

  1. DB는 반드시 프라이빗 서브넷에. RDS, ElastiCache, OpenSearch를 퍼블릭 서브넷에 두지 마라
  2. 보안 그룹은 IP가 아닌 보안 그룹 참조. 앱 서버 SG → DB SG 참조로 유연한 접근 제어
  3. S3/DynamoDB Gateway Endpoint 필수. 무료이면서 NAT 비용 절감
  4. VPC Flow Logs 활성화. 보안 감사와 디버깅의 기초 데이터
  5. IMDSv2 강제. SSRF 공격 방어의 핵심
  6. 서브넷 IP 여유 확보. /24(256개)보다 /20(4,096개)으로 넉넉하게

기본 VPC를 쓰지 마라

AWS 계정을 만들면 기본 VPC(Default VPC) 가 자동 생성된다. 이 기본 VPC의 모든 서브넷은 퍼블릭이다. 빠른 시작에는 편리하지만, 프로덕션에는 절대 사용하지 마라. 반드시 커스텀 VPC를 설계하고 퍼블릭/프라이빗을 명시적으로 분리하라.

⚠️
흔한 실수 — 기본 VPC에 RDS 배포: 초보자가 RDS를 기본 VPC에 만들면, 기본 VPC의 서브넷이 모두 퍼블릭이라 RDS가 인터넷에 노출될 수 있다. 이것이 "공개 인터넷에 노출된 RDS" 사고의 가장 흔한 원인이다.

마치며: VPC는 클라우드 보안의 기초다

이 시리즈에서 다룬 모든 AWS 서비스 — EC2, ECS, RDS, Lambda, OpenSearch — 는 VPC 안에서 실행된다. VPC는 이 모든 서비스의 네트워크 기초다.

VPC를 제대로 설계하면:

  • 외부 공격으로부터 내부 리소스를 보호
  • 서비스 간 통신을 세밀하게 제어
  • 비용을 최적화 (NAT, VPC Endpoint)
  • 규제 준수 (네트워크 격리, 로깅)

VPC를 잘못 설계하면:

  • DB가 인터넷에 노출되어 데이터 유출
  • 불필요한 NAT 비용 수백 달러
  • 서비스 간 통신 불가로 장애
  • Capital One 같은 대규모 보안 사고

클라우드에서 "보안"이라고 하면 IAM, 암호화, WAF 같은 것을 먼저 떠올리지만, 가장 기초적이고 가장 중요한 보안은 네트워크 격리 — 즉, VPC 설계다. 벽이 제대로 세워져야 도어락(보안 그룹)도 의미가 있다.

코어닷투데이의 모든 AWS 인프라는 커스텀 VPC 위에 구축되어 있다. 퍼블릭 서브넷에는 ALB만, 프라이빗 서브넷에 앱 서버와 AI 추론 엔진, DB 서브넷에 Aurora — 이 원칙은 규모에 상관없이 동일하다.