우당탕탕

AWS VPC 서브넷 구성 처음 할 때 헷갈렸던 개념과 꼭 확인할 체크리스트 본문

Tech/AWS

AWS VPC 서브넷 구성 처음 할 때 헷갈렸던 개념과 꼭 확인할 체크리스트

모찌모찝 2026. 6. 8. 11:29

제가 처음 AWS VPC 서브넷을 직접 구성할 때, 생각보다 개념이 헷갈리고 설정 하나하나가 까다로워서 꽤 고생했거든요. 특히 서브넷의 역할, 라우팅 테이블, 그리고 퍼블릭·프라이빗 서브넷 차이 때문에 멘붕이 와서 제대로 이해하는 데 시간이 꽤 걸렸어요.

그래서 이번 글에서는 제가 직접 막혔던 부분과 함께, AWS VPC 서브넷을 처음 구성할 때 반드시 체크해야 하는 항목들을 ✅ 체크리스트 형태로 정리해봤습니다. 이 글만 읽으면 VPC 서브넷 구성할 때 헷갈렸던 개념과 실무 설정이 한 방에 해결될 거예요.

개발 환경 / 버전 정보

이번 실습은 AWS 관리 콘솔과 AWS CLI 버전 aws-cli/2.13.15를 사용했습니다. 콘솔 UI는 2024년 6월 기준 최신이며, 리전은 서울(ap-northeast-2) 기준입니다.

AWS VPC 서브넷 개념에서 제가 헷갈렸던 부분들

사실 이 부분이 처음에는 매우 추상적이고 생소했어요. ‘서브넷이 뭐지? 왜 서브넷마다 CIDR 블록을 나누고 라우팅 테이블은 또 왜 따로 지정하지?’ 이런 생각이 들었죠. 저는 크게 세 가지 개념이 혼란스러웠는데요:

  • 퍼블릭 서브넷과 프라이빗 서브넷 차이 - 인터넷 게이트웨이 연결 여부와 NAT 게이트웨이 사용을 헷갈렸어요.
  • 라우팅 테이블과 서브넷 연결 - 라우팅 테이블 하나를 여러 서브넷에 동시에 연결 가능한지, 아니면 서브넷마다 독립적으로 가져야 하는지 고민됐죠.
  • 보안 그룹과 네트워크 ACL의 차이 - 기본값 설정과 서브넷 수준의 제약 조건 적용 위치를 혼동했습니다.

이 세 가지를 확실히 이해하니 구성도 훨씬 수월해지더라고요.

서브넷 구성 기본 플로우와 핵심 설정 방법

서브넷을 구성할 땐 크게 이렇게 진행하면 되는데, 제가 직접 하면서 맞닥뜨린 설정값과 명령어도 함께 적어둘게요.

  • 1. VPC 생성: CIDR 블록(예: 10.0.0.0/16) 지정
  • 2. 서브넷 생성: VPC 내에서 CIDR 블록(예: 10.0.1.0/24) 할당, 리전존 선택
  • 3. 인터넷 게이트웨이(IGW) 생성 및 VPC에 연결 (퍼블릭 서브넷용)
  • 4. 라우팅 테이블 생성 및 인터넷 게이트웨이 라우트 추가
  • 5. 라우팅 테이블에 서브넷 연결
  • 6. NAT 게이트웨이 생성 (프라이빗 서브넷의 인터넷 아웃바운드용)
  • 7. 보안 그룹과 네트워크 ACL 설정

이번에는 CLI 명령어도 넣어서 만드는 과정을 보여드릴게요.

# 1. VPC 생성
aws ec2 create-vpc --cidr-block 10.0.0.0/16 --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=MyVPC}]'

# 2. 서브넷 생성 (퍼블릭)
aws ec2 create-subnet --vpc-id vpc-xxxxxxxx --cidr-block 10.0.1.0/24 --availability-zone ap-northeast-2a --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=PublicSubnet}]'

# 3. 인터넷 게이트웨이 생성 및 연결
aws ec2 create-internet-gateway --tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=MyIGW}]'
aws ec2 attach-internet-gateway --internet-gateway-id igw-xxxxxxxx --vpc-id vpc-xxxxxxxx

# 4. 라우팅 테이블 생성 및 라우트 추가
aws ec2 create-route-table --vpc-id vpc-xxxxxxxx --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=PublicRT}]'
aws ec2 create-route --route-table-id rtb-xxxxxxxx --destination-cidr-block 0.0.0.0/0 --gateway-id igw-xxxxxxxx

# 5. 라우팅 테이블에 서브넷 연결
aws ec2 associate-route-table --subnet-id subnet-xxxxxxxx --route-table-id rtb-xxxxxxxx

# 6. NAT 게이트웨이 생성 (Elastic IP 필요)
aws ec2 allocate-address --domain vpc
aws ec2 create-nat-gateway --subnet-id subnet-xxxxxxxx --allocation-id eipalloc-xxxxxxxx

# 7. 프라이빗 서브넷용 라우팅 테이블 생성 후 NAT 라우트 추가
aws ec2 create-route-table --vpc-id vpc-xxxxxxxx --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=PrivateRT}]'
aws ec2 create-route --route-table-id rtb-yyyyyyyy --destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-xxxxxxxx
aws ec2 associate-route-table --subnet-id subnet-yyyyyyyy --route-table-id rtb-yyyyyyyy

코드를 쭉 따라가다 보면 서브넷 별로 라우팅 테이블을 연결하고, 인터넷 혹은 NAT 게이트웨이 경로를 정확히 지정해야 한다는 게 감이 오실 거예요.

서브넷 구성할 때 꼭 확인해야 할 ✅ 체크리스트

  • 서브넷 CIDR 범위 중첩 여부 - VPC 전체 CIDR과 서브넷 CIDR이 겹치면 안 돼요.
  • 서브넷별 라우팅 테이블 연결 여부 - 각 서브넷이 적절한 라우팅 테이블과 연결되어야 합니다. 한 서브넷에 여러 라우팅 테이블은 연결할 수 없어요.
  • 인터넷 게이트웨이 연결과 라우트 설정 유무 - 퍼블릭 서브넷은 라우팅 테이블에 0.0.0.0/0 -> IGW 라우팅이 꼭 있어야만 인터넷 연결됩니다.
  • NAT 게이트웨이 생성 및 프라이빗 서브넷 라우팅에 반영 - 프라이빗 서브넷이 인터넷 아웃바운드 하려면 NAT 설정 필수에요.
  • 보안 그룹과 네트워크 ACL 설정 - 인바운드, 아웃바운드 규칙을 꼼꼼히 확인해서 예상치 못한 트래픽 차단 없도록 합니다.
  • 서브넷 생성 리전(가용 영역) 일치 여부 - 서브넷이 속한 가용 영역이 기대하는 리전과 맞는지 꼭 확인하세요.
  • Elastic IP 할당 및 NAT 게이트웨이와 연결 - NAT 게이트웨이는 고정 IP 필요해서 꼭 Elastic IP 할당 후 연결해 줘야 합니다.

제가 직접 설정할 때, 하나만 빠져도 인터넷 연결이 안 되거나 EC2 인스턴스가 외부와 통신 불가능해져서 한참 헤맸던 경험이 있어요. 특히 라우팅 테이블 연결과 NAT 게이트웨이 설정이 가장 까다로웠습니다.

여기서 삽질했던 부분들

가장 골치 아팠던 에러는 퍼블릭 서브넷에 있는 EC2가 인터넷 연결이 안 되는 경우였어요. 콘솔에서 보니까 보안 그룹도, 서브넷도 문제없는데 인터넷 연결이 안 되길래 한참을 구글링했습니다.

Instance unreachable: could not connect via SSH

# 문제 원인
라우팅 테이블에 0.0.0.0/0 경로가 IGW(인터넷 게이트웨이)로 안 되어 있었음
서브넷과 라우팅 테이블 연결도 안 되어 있었음

이 문제를 해결하려면 아래처럼 라우팅 테이블에 인터넷 게이트웨이 경로를 추가하고, 서브넷에 해당 라우팅 테이블을 연결해야 합니다.

aws ec2 create-route --route-table-id rtb-xxxxxxxx --destination-cidr-block 0.0.0.0/0 --gateway-id igw-xxxxxxxx

aws ec2 associate-route-table --subnet-id subnet-xxxxxxxx --route-table-id rtb-xxxxxxxx

심화: NAT 게이트웨이와 프라이빗 서브넷 인터넷 통신

프라이빗 서브넷에서 외부 인터넷으로 나가려면 NAT 게이트웨이가 꼭 필요한데요. 이게 없으면 인스턴스가 인터넷 아웃바운드가 안 돼서 업데이트나 외부 API 호출이 실패합니다.

제가 가장 헷갈렸던 부분 중 하나는 'NAT 게이트웨이는 퍼블릭 서브넷에 생성해야 한다'는 점이었어요. 프라이빗 서브넷에 만들면 동작 안 해서 한참 삽질했죠.

아래는 NAT 게이트웨이 만들 때 Elastic IP까지 하는 명령어인데, Elastic IP 할당 후 NAT 게이트웨이 생성 순서 꼭 지키세요.

# Elastic IP 할당
aws ec2 allocate-address --domain vpc

# NAT 게이트웨이 생성
aws ec2 create-nat-gateway --subnet-id subnet-publicxxxxxx --allocation-id eipalloc-xxxxxxxx

그리고 프라이빗 서브넷 라우팅 테이블에 NAT 게이트웨이를 향하는 0.0.0.0/0 경로를 넣어야죠.

자주 물어보시는 것들

Q. 하나의 라우팅 테이블을 여러 서브넷에 연결해도 되나요?

A. 네, 가능합니다. 서브넷과 라우팅 테이블은 1:N 관계라서 라우팅 테이블 하나를 여러 서브넷에 연결할 수 있어요. 다만 서브넷별 라우팅 경로가 다르면 별도로 라우팅 테이블을 만들어 연결해야 합니다.

Q. 보안 그룹과 네트워크 ACL 차이는 뭔가요?

A. 보안 그룹은 인스턴스 단위로 동작하는 상태 저장 필터이고, 네트워크 ACL은 서브넷 단위의 상태 비저장 필터입니다. 보통 보안 그룹이 주로 사용되지만, 추가로 서브넷 레벨에서 제한을 걸 때 네트워크 ACL을 씁니다.

Q. 퍼블릭 서브넷 만들었는데도 인터넷 연결이 안 돼요!

A. 퍼블릭 서브넷은 기본적으로 인터넷 게이트웨이가 연결된 라우팅 테이블이 있어야 하고, 서브넷이 해당 라우팅 테이블과 연결되어야 합니다. 또한 EC2 인스턴스 보안 그룹과 NACL 규칙도 인바운드/아웃바운드 모두 허용되어야 하고, 퍼블릭 IP가 할당되었는지 확인도 필수입니다.

이런 질문들이 저도 처음 공부할 때 가장 많이 찾아봤던 것들이라 자세히 답변해 봤어요.

결국 VPC와 서브넷을 다루면서 가장 중요한 건 각 설정들이 서로 유기적으로 맞물려 있다는 점이에요. 하나라도 빠지면 연결이 끊기거든요. 그래서 이번 체크리스트랑 CLI 예제를 꼼꼼히 따라가면 저처럼 헤매지 않고 깔끔하게 서브넷 구성을 끝낼 수 있을 겁니다.

참고로 이 글에서 다룬 기본 구성 외에도, 고가용성 NAT 게이트웨이 구성이나 트래픽 모니터링, 더 복잡한 라우팅 정책 등은 차차 익혀도 늦지 않으니 여기선 꼭 기본만 확실히 하세요!

Comments