coredot.today
NAT Gateway 완전 정복: '나는 나갈 수 있지만, 넌 들어올 수 없어'의 원리
블로그로 돌아가기
NATGatewayAWSVPC네트워크보안비용

NAT Gateway 완전 정복: '나는 나갈 수 있지만, 넌 들어올 수 없어'의 원리

프라이빗 서브넷의 서버가 인터넷에서 업데이트를 받아야 한다. 하지만 외부에서는 접근할 수 없어야 한다. 이 모순을 해결하는 NAT Gateway — 작동 원리, 비용 함정, 대안까지를 쉽고 자세하게 풀어본다.

코어닷투데이2026-02-2729

들어가며: 프라이빗 서브넷의 딜레마

이전 VPC 글에서 프라이빗 서브넷의 중요성을 다뤘다. 데이터베이스, 앱 서버는 인터넷에 직접 노출되면 안 되니까 프라이빗 서브넷에 둔다. 완벽하다.

그런데 문제가 생긴다.

프라이빗 서브넷의 EC2 인스턴스가 인터넷에 접근해야 하는 순간이 있다:

  • OS 보안 패치 다운로드 (yum update, apt upgrade)
  • Python/Node.js 패키지 설치 (pip install, npm install)
  • Docker 이미지를 Docker Hub에서 Pull
  • 외부 API 호출 (결제 API, 지도 API, AI API)
  • SSL 인증서 갱신 (Let's Encrypt)

프라이빗 서브넷에는 인터넷 게이트웨이(IGW)로의 라우트가 없다. 그래서 이 서버들은 인터넷에 나갈 수 없다.

퍼블릭 서브넷에 옮기면? 보안이 무너진다. 인터넷에서 누구나 이 서버에 접근할 수 있게 된다.

"외부로 나가는 건 허용하되, 외부에서 들어오는 건 차단할 수 있는 방법은 없을까?"

이것이 NAT(Network Address Translation) 의 핵심 아이디어이고, AWS에서 이를 구현한 것이 NAT Gateway다.


1. NAT란 무엇인가: 편지 비유

주소를 바꿔치기하는 마법

NAT를 가장 쉽게 이해하는 비유: 우편물 전달 대행 서비스.

당신은 비밀 기지(프라이빗 서브넷)에 살고 있다. 집 주소를 외부에 알려주면 안 된다. 하지만 인터넷 쇼핑은 하고 싶다.

당신 (10.0.11.5) → 택배 주문서: "신발 보내주세요"
↓ NAT Gateway에게 전달
NAT Gateway: 보내는 주소를 자기 공개 주소(52.78.xxx.xxx)로 바꿈
↓ 인터넷으로 전송
쇼핑몰: "52.78.xxx.xxx에서 주문이 왔군. 신발을 52.78.xxx.xxx로 보내자"
↓ 응답이 NAT Gateway로 도착
NAT Gateway: "아, 이건 10.0.11.5가 보낸 거였지" → 10.0.11.5로 전달
당신: 신발 수령! 쇼핑몰은 당신의 진짜 주소를 모른다

핵심: 나가는 요청의 출발지 IP를 NAT의 공개 IP로 바꾸고, 돌아오는 응답을 원래 요청자에게 전달한다. 외부에서 보면 NAT Gateway의 IP만 보인다. 프라이빗 서브넷의 실제 IP(10.0.x.x)는 절대 노출되지 않는다.

NAT의 역사: 인터넷 주소 부족에서 시작

NAT는 원래 IPv4 주소 부족 문제를 해결하기 위해 탄생했다. IPv4 주소는 약 43억 개뿐인데, 인터넷에 연결되는 기기는 수백억 개다.

1994년, IETF(Internet Engineering Task Force)는 RFC 1631에서 NAT를 공식 표준으로 정의했다. 핵심 아이디어: 사설 IP(10.x.x.x, 192.168.x.x)를 내부에서 쓰고, 인터넷에 나갈 때만 공인 IP로 변환한다.

가정의 와이파이 공유기도 NAT를 사용한다. 집 안의 스마트폰, 노트북, TV가 모두 사설 IP(192.168.0.x)를 쓰지만, 인터넷에서 보면 공유기의 공인 IP 하나로 나간다.

💡
집의 공유기 = NAT Gateway: 집에서 유튜브를 보는 것은 "나가는 요청"이므로 공유기 NAT를 통해 가능하다. 하지만 외부의 누군가가 당신의 노트북에 직접 접속하는 것은 불가능하다 — 공유기가 그 요청을 어떤 기기로 보내야 할지 모르기 때문이다. AWS NAT Gateway도 정확히 같은 원리다.

2. AWS NAT Gateway vs NAT Instance

두 가지 선택지

AWS에서 프라이빗 서브넷의 인터넷 접근을 구현하는 방법은 두 가지다:

NAT Gateway (관리형)
AWS가 운영 (패치, 가용성, 스케일링 자동)
최대 100Gbps 대역폭
가용영역 내 이중화 자동
$0.045/시간 + $0.045/GB
설정이 간단
비유: 관리형 택배 서비스 (비싸지만 안 맞음)
NAT Instance (자체 관리)
EC2 인스턴스에 NAT 소프트웨어 설치
인스턴스 타입에 따른 대역폭
이중화를 직접 구성해야 함
t4g.nano: ~$3/월
OS 패치, 장애 대응 직접
비유: 직접 택배 가져다주기 (싸지만 내가 해야 함)

비용 차이: 10배

이것이 NAT Gateway의 가장 큰 논쟁 포인트다.

~$32/월 NAT Gateway 시간 비용 $0.045/시간 × 720시간
~$3/월 NAT Instance (t4g.nano) 직접 관리 필요
+$0.045/GB NAT GW 데이터 처리비 통과하는 모든 데이터

고가용성을 위해 AZ 2개에 NAT Gateway를 배치하면 **시간 비용만 월 65.여기에데이터전송비가추가된다.100GBNAT를통과해도65**. 여기에 데이터 전송비가 추가된다. 월 100GB만 NAT를 통과해도 4.50 추가.

소규모 스타트업에서는 EC2 + RDS + Lambda 비용을 합친 것보다 NAT Gateway가 더 비싼 경우가 흔하다.

⚠️
스타트업 비용의 숨은 주범: "AWS 청구서가 예상보다 높은데 원인을 모르겠다"는 스타트업의 절반은 NAT Gateway 비용이 원인이다. 특히 ECR에서 Docker 이미지를 Pull할 때, NAT를 통과하는 데이터 전송비가 누적된다. VPC Endpoint를 설정하면 이 비용을 즉시 절감할 수 있다.

3. NAT Gateway의 작동 원리

네트워크 흐름 상세

프라이빗 서브넷의 EC2가 https://pypi.org에서 Python 패키지를 설치하는 경우:

EC2 (10.0.11.5) → "pypi.org에 GET 요청"
↓ 라우트 테이블: 0.0.0.0/0 → nat-gw-xxx
NAT Gateway (퍼블릭 서브넷)
↓ 출발지 IP를 10.0.11.5 → 52.78.xxx.xxx로 변환
인터넷 게이트웨이 (IGW)
pypi.org: "52.78.xxx.xxx에서 요청 왔다. 응답 보내자"
↓ 응답이 52.78.xxx.xxx(NAT GW)로 돌아옴
NAT Gateway: "이건 10.0.11.5의 요청이었지"
↓ 목적지를 52.78.xxx.xxx → 10.0.11.5로 역변환
EC2 (10.0.11.5): 패키지 다운로드 완료!

라우트 테이블 설정

프라이빗 서브넷의 라우트 테이블:

목적지타겟의미
10.0.0.0/16localVPC 내부 통신은 직접
0.0.0.0/0nat-gw-xxxxx나머지 모든 트래픽은 NAT Gateway로

퍼블릭 서브넷의 라우트 테이블:

목적지타겟의미
10.0.0.0/16localVPC 내부 통신은 직접
0.0.0.0/0igw-xxxxx나머지 모든 트래픽은 인터넷 게이트웨이로

차이점: 프라이빗은 0.0.0.0/0NAT Gateway, 퍼블릭은 0.0.0.0/0IGW.


4. NAT Gateway 비용 최적화: 실전 전략

전략 1: VPC Endpoint로 NAT 트래픽 줄이기

NAT Gateway 비용의 가장 큰 부분은 데이터 전송비다. AWS 서비스와의 통신을 NAT가 아닌 VPC Endpoint로 우회하면 비용이 대폭 줄어든다.

AWS 서비스Endpoint 유형비용효과
S3Gateway Endpoint무료S3 트래픽을 NAT에서 분리
DynamoDBGateway Endpoint무료DynamoDB 트래픽 분리
ECRInterface Endpoint~$7/월Docker Pull 트래픽 분리
CloudWatchInterface Endpoint~$7/월로그/메트릭 전송 분리
SQSInterface Endpoint~$7/월메시지 큐 트래픽 분리
즉시 적용할 것: S3와 DynamoDB의 Gateway Endpoint는 무료이고 설정이 1분이면 끝난다. 이것만 추가해도 NAT를 통과하는 트래픽의 상당 부분이 줄어든다. 특히 S3에서 대용량 파일을 자주 가져오는 서비스라면 효과가 크다.

전략 2: NAT Instance로 대체 (소규모)

개발/테스트 환경이나 트래픽이 적은 서비스에서는 NAT Instance가 10배 저렴하다.

hljs language-bash
# fck-nat: 커뮤니티가 만든 경량 NAT Instance AMI
# t4g.nano (~$3/월)로 NAT 기능 수행

fck-nat (커뮤니티 오픈소스)는 NAT Gateway의 높은 비용에 대한 커뮤니티의 대답이다. ARM 기반 t4g.nano 인스턴스에서 동작하며, 월 $3 미만으로 NAT 기능을 제공한다.

💡
"fck-nat"의 탄생 배경: 이름에서 알 수 있듯이, NAT Gateway의 높은 비용에 대한 개발자 커뮤니티의 불만에서 탄생했다. GitHub에서 수천 개의 스타를 받았으며, AWS 커뮤니티에서도 소규모 환경에서의 대안으로 자주 추천된다. 단, 프로덕션 대규모 서비스에서는 여전히 NAT Gateway가 안전한 선택이다.

전략 3: AZ 하나만 NAT Gateway (비프로덕션)

프로덕션에서는 AZ별로 NAT Gateway가 필요하지만 (한 AZ의 NAT가 죽으면 해당 AZ의 프라이빗 서브넷이 인터넷 불가), 개발/테스트 환경에서는 AZ 하나에만 NAT Gateway를 두고 다른 AZ의 트래픽을 여기로 보내면 비용이 절반.

전략 4: NAT가 필요 없는 아키텍처

가장 근본적인 해결: NAT 자체가 불필요한 아키텍처를 설계.

접근 방식설명
VPC Endpoint 최대 활용AWS 서비스와의 통신에 NAT 불필요
Lambda (VPC 밖)Lambda를 VPC에 연결하지 않으면 NAT 불필요
ECR Pull through cacheECR에 이미지를 캐시하여 Docker Hub 직접 접근 불필요
SSM Agent 기반 접근SSH 대신 SSM으로 접속하면 NAT 불필요

5. NAT Gateway 관련 보안

NAT는 보안 기능이 아니다

흔한 오해: "NAT가 있으니까 안전하다." NAT는 주소 변환 기술이지 보안 기술이 아니다. 보안은 보안 그룹, NACL, WAF가 담당한다.

하지만 NAT의 주소 변환 자체가 부수적으로 보안 효과를 준다:

  • 프라이빗 서브넷의 실제 IP가 외부에 노출되지 않음
  • 외부에서 프라이빗 서브넷으로의 직접 연결 불가능

NAT 관련 보안 사고

2019
Capital One: NAT/VPC 설계 미흡이 원인 중 하나
SSRF 공격으로 내부 서비스에 접근. NAT Gateway를 통한 아웃바운드 트래픽 모니터링이 부재했다면 더 빨리 탐지할 수 있었을 것
2021
데이터 유출 경로로 NAT 악용
공격자가 내부에 침입한 후, NAT Gateway를 통해 데이터를 외부로 유출. 아웃바운드 트래픽 모니터링의 중요성을 부각
모범 사례
아웃바운드 트래픽도 모니터링
VPC Flow Logs로 NAT를 통과하는 트래픽을 기록. 비정상적 대량 아웃바운드 전송 감지 시 알람
🔒
아웃바운드도 감시하라: 대부분의 보안 모니터링은 "외부→내부(인바운드)" 공격에 집중한다. 하지만 데이터 유출은 "내부→외부(아웃바운드)"로 일어난다. NAT Gateway를 통과하는 아웃바운드 트래픽의 양과 목적지를 VPC Flow Logs로 모니터링하고, 이상 패턴(예: 평소 1GB/일인데 갑자기 100GB/일)이 감지되면 알람을 울리도록 설정하라.

6. NAT Gateway vs 유사 개념 비교

헷갈리기 쉬운 네트워크 구성 요소들

구성 요소방향역할위치
인터넷 게이트웨이(IGW)양방향VPC ↔ 인터넷 연결VPC 레벨
NAT Gateway아웃바운드만프라이빗 → 인터넷 (주소 변환)퍼블릭 서브넷
VPC Endpoint내부 전용VPC → AWS 서비스 (인터넷 불필요)VPC 레벨
Bastion Host인바운드 (SSH)관리자 → 프라이빗 서버 접속퍼블릭 서브넷
VPN Gateway양방향회사 네트워크 ↔ VPCVPC 레벨
Transit Gateway양방향VPC ↔ VPC, VPC ↔ 온프레미스리전 레벨
💡
기억할 공식: IGW = "퍼블릭 서브넷의 인터넷 연결", NAT GW = "프라이빗 서브넷의 아웃바운드 인터넷", VPC Endpoint = "인터넷 없이 AWS 서비스 접근", Bastion = "관리자의 프라이빗 서버 접속 통로".

NAT Gateway vs NAT Instance 상세 비교

기준NAT GatewayNAT Instance
관리AWS 관리 (패치, 가용성)직접 관리 (OS 패치, 장애 대응)
대역폭최대 100Gbps (자동 확장)인스턴스 타입에 따라 (t4g.nano: ~5Gbps)
가용성AZ 내 자동 이중화직접 이중화 구성 필요
비용 (시간)0.045/시간( 0.045/시간 (~32/월)t4g.nano: ~$3/월
비용 (데이터)$0.045/GBEC2 네트워크 비용만
보안 그룹적용 불가 (NACL만)보안 그룹 적용 가능
포트 포워딩불가가능 (iptables)
모니터링CloudWatch 자동직접 설정
추천 환경프로덕션개발/테스트, 소규모

7. 실전 아키텍처: NAT Gateway 배치

표준 프로덕션 아키텍처

고가용성 NAT Gateway 배치
인터넷
IGW
퍼블릭 (AZ-a) NAT GW-a, ALB
퍼블릭 (AZ-c) NAT GW-c, ALB
프라이빗 (AZ-a) → NAT GW-a 사용
프라이빗 (AZ-c) → NAT GW-c 사용

각 AZ의 프라이빗 서브넷은 같은 AZ의 NAT Gateway를 사용한다. AZ-a의 NAT Gateway가 죽어도, AZ-c의 서비스는 영향을 받지 않는다.

비용 절감 아키텍처 (비프로덕션)

퍼블릭 서브넷 (AZ-a만): NAT Gateway 1개
프라이빗 서브넷 (AZ-a, AZ-c): 모두 AZ-a의 NAT GW 사용

비용이 절반이지만, AZ-a의 NAT Gateway가 죽으면 모든 프라이빗 서브넷이 인터넷 접근 불가. 개발/테스트 환경에서만 사용.


8. 실제 사례

스타트업의 NAT Gateway 비용 충격

한 시드 단계 스타트업의 실제 사례:

  • EC2 비용: 월 $120
  • RDS 비용: 월 $80
  • **NAT Gateway 비용: 월 95(시간95** (시간 65 + 데이터 전송 $30)
  • 전체 AWS 비용의 **32%**가 NAT Gateway

VPC Endpoint(S3, ECR)를 추가하고 데이터 전송 패턴을 개선한 후: NAT 비용 9595 → 38 (60% 절감).

Netflix: 대규모 NAT 트래픽 관리

Netflix는 수천 대의 EC2에서 외부 API(결제, CDN origin fetch)를 호출한다. NAT Gateway의 100Gbps 대역폭 한계에 가까워지는 경우를 대비해, 여러 NAT Gateway에 트래픽을 분산하고 VPC Endpoint를 적극 활용한다.

한국 기업 사례

  • 토스: 금융 서비스의 외부 API 호출(카드사, 은행)에 NAT Gateway 사용. VPC Flow Logs로 모든 아웃바운드 트래픽 감사
  • 쿠팡: ECR Image Pull 트래픽이 NAT 비용의 주범. ECR VPC Endpoint 도입으로 대폭 절감
  • 당근마켓: 개발 환경에 NAT Instance(fck-nat)를 도입하여 비용 최적화

9. NAT Gateway의 미래

IPv6와 NAT의 종말?

IPv6에서는 주소가 사실상 무한하므로 NAT 자체가 불필요해진다. 모든 기기가 고유한 공인 IPv6 주소를 가질 수 있다.

AWS는 IPv6 전용 서브넷Egress-only Internet Gateway(IPv6에서의 NAT 역할)를 지원한다. 장기적으로 IPv6 전환이 완료되면 NAT Gateway는 사라질 수 있다. 하지만 IPv4가 여전히 지배적인 현재, NAT Gateway는 당분간 필수다.

NAT Gateway에 보안 그룹 지원? (커뮤니티 요청)

현재 NAT Gateway에는 보안 그룹을 적용할 수 없다 (NACL만 가능). AWS 커뮤니티에서 가장 많이 요청하는 기능 중 하나가 "NAT Gateway에 보안 그룹 지원"이다. 아웃바운드 트래픽의 목적지를 세밀하게 제어하고 싶은 수요가 크다.


마치며: "나가는 것은 쉽지만, 들어오는 것은 어렵다"

NAT Gateway의 본질을 한 문장으로: "프라이빗 서브넷의 리소스가 인터넷에 나갈 수는 있지만, 인터넷에서 들어올 수는 없게 해주는 것."

이 시리즈에서 구축한 아키텍처에서 NAT Gateway의 위치:

서비스NAT 필요 여부이유
ALB퍼블릭 서브넷에 위치
EC2/ECS (앱 서버)외부 API 호출, 패키지 설치
RDS보통 불필요 (AWS 내부 통신은 VPC Endpoint)
Lambda (VPC 연결 시)외부 API 호출
Lambda (VPC 미연결)기본적으로 인터넷 접근 가능

NAT Gateway는 필수지만 비싸다. VPC Endpoint를 먼저 최대한 활용하고, 정말 인터넷이 필요한 트래픽만 NAT를 거치게 하는 것이 비용 최적화의 핵심이다.

코어닷투데이의 인프라에서도 이 원칙을 따른다. AI 추론 서버는 프라이빗 서브넷에서 안전하게 운영되고, S3와 DynamoDB는 Gateway Endpoint로 직접 접근하며, 외부 AI API 호출만 NAT Gateway를 통과한다. 보안과 비용의 균형 — 이것이 실전 NAT 전략이다.