개발하면서 AWS VPC 설정을 하다 보면 "NAT Gateway를 설정해야 한다"는 말을 한 번쯤 들어봤을 거예요. 근데 대체 NAT(Network Address Translation, 네트워크 주소 변환)가 뭘까요?
쉽게 말해, AWS에서 프라이빗 네트워크를 외부와 안전하게 연결해주는 역할을 합니다. VPC 안에 있는 프라이빗 서브넷의 인스턴스들이 인터넷에 접속할 때, 각 인스턴스마다 공인 IP를 할당하는 대신 NAT Gateway를 거쳐 나가게끔 하는 것이죠.
이제 NAT가 왜 필요한지, 그리고 어떻게 동작하는지 살펴보겠습니다. 🚀
AWS에서 공인 IP(Elastic IP)는 비용이 발생합니다.. 만약 VPC 내부의 모든 인스턴스에 공인 IP를 붙이면, 비용이 엄청나게 올라가겠죠? NAT를 쓰면 하나의 공인 IP만으로 여러 인스턴스가 인터넷을 사용할 수 있으니 비용을 절약할 수 있습니다. 💰
VPC 안의 프라이빗 서브넷에 있는 인스턴스들은 보안상 직접 인터넷에 접근하지 못하도록 설정하는 경우가 많아요. 그렇다고 인터넷을 아예 못 쓰게 할 순 없죠. (패키지 설치나 API 호출을 못 하면 개발이 안 됩니다! ) 이럴 때 NAT Gateway가 인터넷과 내부 네트워크 사이에서 안전한 다리 역할을 해줍니다.
NAT를 사용하면 내부 네트워크 구성은 그대로 둔 채, 인터넷 접근 정책을 쉽게 조정할 수 있습니다. VPC 내부의 보안성을 유지하면서도 필요한 리소스만 인터넷을 사용할 수 있도록 설정할 수 있습니다.
📌 설정 예제 (NAT Gateway 생성)
aws ec2 create-nat-gateway --subnet-id subnet-abc123 --allocation-id eipalloc-xyz456
📌 설정 예제 (NAT Instance로 라우팅 설정)
aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef --source-dest-check false
NAT Gateway | NAT Instance | |
---|---|---|
관리 편의성 | AWS가 자동 관리 | 직접 설정 및 유지보수 필요 |
성능 | 자동 확장 (고성능) | 성능 조절 필요 (스펙 선택 중요) |
비용 | 사용량에 따라 비용 증가 | EC2 비용만 부담 (상대적으로 저렴) |
고가용성 | Multi-AZ 지원 | 직접 설정해야 함 |
✅ NAT Gateway: 비용이 들더라도 간편하고 안정적인 운영이 필요할 때
✅ NAT Instance: 저렴한 비용으로 직접 관리할 수 있을 때
1️⃣ VPC를 생성하고 서브넷을 나눈다 (퍼블릭, 프라이빗 서브넷 구분!)
2️⃣ 퍼블릭 서브넷에 NAT Gateway를 생성하고, Elastic IP를 할당한다.
3️⃣ 프라이빗 서브넷의 라우트 테이블을 수정하여, 인터넷 트래픽을 NAT Gateway로 보내도록 설정한다.
📌 라우트 테이블 설정 예제
aws ec2 create-route --route-table-id rtb-123456 --destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-abc123
이렇게 설정하면 프라이빗 서브넷의 인스턴스들이 안전하게 인터넷을 사용할 수 있습니다.
✔ 비용 절감 → 모든 인스턴스에 공인 IP를 붙이는 것보다 효율적
✔ 보안 강화 → 외부에서 내부 네트워크로의 직접 접근 차단
✔ 네트워크 유연성 → 구성 변경 없이 인터넷 사용 가능
✔ AWS에서 가장 많이 쓰는 방식 → NAT Gateway를 활용한 프라이빗 서브넷 구성