2편. 서브넷 설계 — 퍼블릭과 프라이빗 구역 나누기

시리즈: AWS로 웹 서버 + DB 직접 구축하기 (VPC 완전 정복) | 2편 / 15편

지난 편에서 my-vpc (10.0.0.0/16) 를 만들었어요. VPC는 만들었지만 아직 텅 빈 상태예요. 이번 편에서는 그 공간을 구역별로 나누는 작업 을 해볼 거예요.

바로 서브넷(Subnet) 이에요.


서브넷이 뭔가요?

서브넷은 VPC라는 큰 공간을 구역별로 나눈 것 이에요.

VPC가 아파트 한 동이라면, 서브넷은 그 동을 층별로 나눈 것과 같아요.

VPC(my-vpc)  =  아파트 한 동 (전체 공간)
서브넷       =  1층, 2층, 3층... (나눈 구역)
EC2, RDS     =  각 층의 호실

왜 나눌까요?

가장 중요한 이유는 보안 이에요.

웹 서버는 외부에서 접속해야 하니까 인터넷에 열려있어야 해요. 반면 DB는 절대 외부에 노출되면 안 되죠.

퍼블릭 서브넷   →  인터넷에서 접근 가능   (웹 서버, 로드밸런서)
프라이빗 서브넷  →  인터넷에서 접근 불가   (DB, 내부 서버)

구역을 나눠놓으면 DB가 외부에 노출될 위험을 원천 차단할 수 있어요.


가용 영역(AZ) — 데이터센터가 여러 개인 이유

서브넷을 만들기 전에 가용 영역(Availability Zone, AZ) 을 알아야 해요.

AWS는 서울 리전에 데이터센터를 4개 운영해요. 각각 완전히 독립된 건물이에요. 전기, 인터넷, 냉각 시스템이 다 따로예요.

ap-northeast-2a  ←  데이터센터 A동
ap-northeast-2b  ←  데이터센터 B동
ap-northeast-2c  ←  데이터센터 C동
ap-northeast-2d  ←  데이터센터 D동

이렇게 만든 이유는 두 가지예요.

첫째, 고객이 너무 많아서. AWS 고객은 수백만 명이에요. 한 건물에 다 넣을 수가 없어요.

우리     →  A동, C동 사용
카카오   →  B동, D동 사용
삼성     →  A동, B동 사용

우리가 안 쓰는 B동, D동은 다른 회사들이 쓰고 있어요.

둘째, 장애 대비. A동에 불이 나도 B, C, D동은 멀쩡해요. 완전히 독립된 건물이니까요.

우리는 왜 4개 중 2개만 쓸까요?

A동이 터졌을 때 C동이 버텨주면 충분해요. 4개를 다 쓰면 안전함은 비슷한데 관리할 게 2배로 늘어요.

2개 쓸 때:  서브넷 4개, 라우팅 테이블 2개...
4개 쓸 때:  서브넷 8개, 라우팅 테이블 4개...  ← 관리 2배

그래서 이번 시리즈에서는 ap-northeast-2a 와 ap-northeast-2c 두 개만 사용할게요.

💡 왜 b가 아니라 c인가요? ap-northeast-2b는 역사적으로 지원되는 인스턴스 타입이 적어서 실무에서 a + c 조합을 쓰는 게 관례가 됐어요.


우리가 만들 서브넷 4개

my-vpc (10.0.0.0/16)
  ├ public-subnet-2a   10.0.1.0/24   AZ: ap-northeast-2a  ← 웹 서버, ALB
  ├ public-subnet-2c   10.0.2.0/24   AZ: ap-northeast-2c  ← 웹 서버, ALB
  ├ private-subnet-2a  10.0.3.0/24   AZ: ap-northeast-2a  ← DB, 내부 서버
  └ private-subnet-2c  10.0.4.0/24   AZ: ap-northeast-2c  ← DB, 내부 서버

VPC IP 범위(10.0.0.0/16) 안에서 서브넷마다 /24로 나눠 썼어요. 서브넷끼리 IP가 겹치면 안 되니까 1, 2, 3, 4로 순서대로 나눴어요.

💡 왜 10.0.0.0이 아니라 10.0.1.0부터 시작하나요? 10.0.0.0도 쓸 수 있어요. 다만 VPC 주소(10.0.0.0/16)와 겹쳐 보여서 헷갈리기 때문에 관례상 10.0.1.0부터 시작해요.


직접 만들어볼까요?

1. 서브넷 메뉴로 이동

왼쪽 사이드바에서 Subnets 클릭.

기본 VPC의 서브넷들이 보일 거예요. 무시하고 진행해요.

오른쪽 상단 주황색 Create subnet 클릭!


2. VPC 선택

화면 맨 위 드롭다운에서 my-vpc 선택.

VPC를 고르면 아래에 Subnet settings 섹션이 나타나요.


3. 서브넷 4개 입력

한 화면에서 여러 개를 한 번에 만들 수 있어요.

[서브넷 1번]

Subnet name            : public-subnet-2a
Availability Zone      : ap-northeast-2a
IPv4 subnet CIDR block : 10.0.1.0/24

Add new subnet 클릭 → [서브넷 2번]

Subnet name            : public-subnet-2c
Availability Zone      : ap-northeast-2c
IPv4 subnet CIDR block : 10.0.2.0/24

Add new subnet 클릭 → [서브넷 3번]

Subnet name            : private-subnet-2a
Availability Zone      : ap-northeast-2a
IPv4 subnet CIDR block : 10.0.3.0/24

Add new subnet 클릭 → [서브넷 4번]

Subnet name            : private-subnet-2c
Availability Zone      : ap-northeast-2c
IPv4 subnet CIDR block : 10.0.4.0/24

4개 입력 후 오른쪽 하단 주황색 Create subnet 클릭!


4. 생성 확인

✅ 4 subnets created
   subnet-xxx | public-subnet-2a
   subnet-xxx | public-subnet-2c
   subnet-xxx | private-subnet-2a
   subnet-xxx | private-subnet-2c

목록 상단 검색창에 my-vpc 로 검색하면 방금 만든 것들만 볼 수 있어요.


퍼블릭 서브넷 — 퍼블릭 IP 자동 할당 켜기

퍼블릭 서브넷에 EC2를 올릴 때 자동으로 인터넷용 IP를 받도록 설정할게요. 이걸 안 하면 나중에 EC2마다 수동으로 IP를 설정해야 해서 번거로워요.

public-subnet-2a 클릭 → 상단 Actions → Edit subnet settings 클릭

Auto-assign IP settings
  □ Enable auto-assign public IPv4 address

체크 ✅ 후 Save 클릭!

public-subnet-2c 도 동일하게 설정해주세요.

⚠️ private-subnet-2a, private-subnet-2c는 이 설정을 켜지 마세요! 프라이빗 서브넷에 퍼블릭 IP가 붙으면 보안 설계가 무너져요.


“퍼블릭”이라고 이름 붙였는데 아직 인터넷이 안 돼요

서브넷 이름에 “public”이라고 써도 아직 인터넷에 연결된 게 아니에요. 이름은 그냥 우리가 구분하려고 붙인 것뿐이에요.

실제로 인터넷이 연결되려면:

  1. 인터넷 게이트웨이(IGW) 를 만들고 VPC에 붙이고
  2. 라우팅 테이블 에서 인터넷으로 가는 경로를 설정해야 해요

이건 다음 편에서 바로 할 거예요!


현재 상태

my-vpc (10.0.0.0/16)
  ├ public-subnet-2a  (10.0.1.0/24) ✅ AZ-2a
  ├ public-subnet-2c  (10.0.2.0/24) ✅ AZ-2c
  ├ private-subnet-2a (10.0.3.0/24) ✅ AZ-2a
  └ private-subnet-2c (10.0.4.0/24) ✅ AZ-2c

아직 인터넷 연결은 안 된 상태

혹시 CIDR 입력이 잘못됐다면?

서브넷은 생성 후 CIDR 변경이 안 돼요. 잘못 만들었다면 삭제하고 다시 만들어야 해요.

서브넷 선택 → Actions → Delete subnet

안에 EC2 같은 리소스가 없어야 삭제 가능해요. 지금은 바로 삭제할 수 있어요.


이번 편 정리

이름CIDRAZ용도
public-subnet-2a10.0.1.0/24ap-northeast-2a웹 서버, ALB
public-subnet-2c10.0.2.0/24ap-northeast-2c웹 서버, ALB
private-subnet-2a10.0.3.0/24ap-northeast-2aDB, 내부 서버
private-subnet-2c10.0.4.0/24ap-northeast-2cDB, 내부 서버

이번 편에서 만든 것:

  • ✅ 서브넷 4개
  • ✅ 퍼블릭 서브넷 2개에 퍼블릭 IP 자동 할당 설정

다음 편 👉 3편. 인터넷 게이트웨이 & 라우팅 테이블 — 인터넷에 연결하기

시리즈 전체 구성

주제만드는 것
1편전체 설계도 & VPC 만들기 my-vpc
2편서브넷 설계 ← 지금 여기퍼블릭/프라이빗 서브넷 4개
3편인터넷 게이트웨이 & 라우팅 테이블IGW, 라우팅 테이블
4편보안 그룹 설계web-sg, rds-sg
5편EC2 웹 서버 배포web-server-1
6편Nginx로 웹 서버 구성웹 페이지
7편RDS 생성my-database
8편EC2 → RDS 연결DB 연결 확인
9편NAT 게이트웨이my-nat-gateway
10편Bastion Hostbastion-host
11편ALB 로드밸런서my-alb
12편Auto Scalingmy-asg
13편ACM + HTTPSSSL 인증서
14편CloudWatch 모니터링알람, 대시보드
15편완성 아키텍처 & 비용 최적화전체 정리