시리즈: AWS로 웹 서버 + DB 직접 구축하기 (VPC 완전 정복) | 1편 / 15편
안녕하세요! 😊
이번 시리즈에서는 AWS VPC를 처음부터 직접 만들면서 웹 서버와 데이터베이스를 연결하는 인프라를 구축해볼 거예요.
“VPC가 뭔지는 들어봤는데 솔직히 잘 모르겠어요” “AWS 설정할 때 기본값만 눌렀어요”
저도 처음엔 그랬어요. 그래서 이번 시리즈는 모르는 채로 시작해서 직접 만들어보면서 이해하는 방식 으로 진행할게요.
콘솔 화면에서 어떤 버튼을 누르고, 뭘 입력하고, 어떤 화면이 나오는지 최대한 자세하게 설명할게요. 따라하기만 해도 완성되도록요!
15편 동안 만들 최종 아키텍처
시작하기 전에, 우리가 15편에 걸쳐 완성할 모습을 먼저 봐요.
사용자 브라우저
↓ https://example.com
[Route 53] ← 도메인을 ALB 주소로 연결
↓
[ACM] ← HTTPS 인증서 (자물쇠 🔒)
↓
[ALB] ← 로드밸런서: 트래픽을 여러 서버로 분산
↙ ↘
[EC2-A] [EC2-B] ← 웹 서버 (Auto Scaling으로 자동 증감)
↓
[RDS] ← MySQL DB (외부에서 직접 접근 불가)
별도 구성:
[NAT GW] ← 프라이빗 서버가 인터넷으로 나가는 출구
[Bastion] ← 개발자가 프라이빗 서버에 접속하는 관문
[CloudWatch]← 모니터링 & 이상 시 알람
지금은 이게 다 뭔지 몰라도 괜찮아요. 1편부터 하나씩 만들다 보면 퍼즐 조각이 맞춰지듯 이해가 돼요.
시리즈 전체 구성
| 편 | 주제 | 만드는 것 |
|---|---|---|
| 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 Host | bastion-host |
| 11편 | ALB 로드밸런서 | my-alb |
| 12편 | Auto Scaling | my-asg |
| 13편 | ACM + HTTPS | SSL 인증서 |
| 14편 | CloudWatch 모니터링 | 알람, 대시보드 |
| 15편 | 완성 아키텍처 & 비용 최적화 | 전체 정리 |
시작 전 준비사항
AWS 계정
AWS 계정이 없다면 aws.amazon.com 에서 무료로 가입할 수 있어요. 가입 시 신용카드가 필요하지만,
프리 티어 범위 내에서는 요금이 거의 발생하지 않아요.
💡 프리 티어란? AWS 신규 가입 후 12개월(1년) 동안 일부 서비스를 무료로 사용할 수 있어요.
이번 시리즈에서 주로 쓰는 EC2 t2.micro, RDS db.t3.micro가 여기 포함돼요.⚠️ 가입 후 1년이 지나면 프리 티어가 종료돼요.
EC2, RDS 등 모든 서비스에 요금이 부과되기 시작하니, 실습 후에는 꼭 리소스를 삭제하세요.단, NAT 게이트웨이와 ALB는 프리 티어 자체가 없어요. (기간 무관) 실습 후 삭제하면 전체 실습 기준 몇 천 원 이내예요.
리전 설정
AWS 콘솔에 로그인하면 오른쪽 상단에 현재 리전이 표시돼요.
이번 시리즈는 서울 리전(ap-northeast-2) 을 기준으로 진행해요.
리전이 다르면 나중에 만든 리소스가 보이지 않을 수 있으니 꼭 확인하세요!
오른쪽 상단 클릭 → 아시아 태평양(서울) ap-northeast-2 선택
VPC란 무엇인가요?
이제 본격적으로 시작해볼게요.
VPC(Virtual Private Cloud) 는 AWS 안에 만드는 나만의 가상 네트워크 예요.
조금 더 풀어서 설명하면, AWS 데이터센터 안에 다른 사람들과 공유하는 공간이 있는데,
그 안에서 “여기서부터 여기까지는 내 영역이야” 라고 울타리를 치는 거예요.
현실 세계로 비유하면 이렇게 생각해볼 수 있어요.
AWS 전체 = 거대한 아파트 단지 (수백 개 동이 있는) VPC = 내가 분양받은 아파트 한 동 EC2, RDS 등 = 그 동 안의 각 호실
단지 안에 수많은 동이 있고, 각 동은 서로 독립적이에요. 101동 주민이 102동 내부를 들여다볼 수 없는 것처럼, 다른 사람의 VPC에서 내 VPC 안을 볼 수 없어요.
이게 VPC의 핵심이에요 — 격리된 나만의 네트워크 공간.
기본 VPC가 이미 있는데요?
AWS 계정을 처음 만들면 기본 VPC(Default VPC) 가 이미 만들어져 있어요.
그냥 이걸 써도 되지 않냐고 생각할 수 있는데, 실무에서는 직접 만들어 쓰는 경우가 훨씬 많아요.
이유는:
- 기본 VPC는 보안 설정이 느슨해요 (모든 서브넷이 퍼블릭)
- 프로젝트/팀마다 VPC를 분리해서 관리하는 게 깔끔해요
- 네트워크 구조를 내가 원하는 대로 설계할 수 있어요
이번 시리즈에서는 기본 VPC를 건드리지 않고 새로 만들 거예요.
CIDR — IP 주소 범위 정하기
VPC를 만들 때 딱 하나 결정해야 할 게 있어요.
“이 네트워크 안에서 쓸 IP 주소 범위를 얼마나 크게 만들 것인가” 예요.
이걸 CIDR(사이더, Classless Inter-Domain Routing) 표기법으로 표현해요.
10.0.0.0/16
처음 보면 낯설지만 구조는 간단해요.
10.0.0.0— 시작 IP 주소/16— 앞에서부터 16비트는 고정, 나머지는 자유롭게 사용
슬래시 뒤의 숫자가 작을수록 사용 가능한 IP 수가 많아져요.
| CIDR 표기 | 사용 가능한 IP 수 | 용도 |
|---|---|---|
| 10.0.0.0/8 | 약 16,000,000개 | 너무 큰 경우 |
| 10.0.0.0/16 | 약 65,536개 | VPC 권장 크기 |
| 10.0.0.0/24 | 약 256개 | 서브넷에 사용 |
| 10.0.0.0/28 | 약 16개 | 너무 작은 경우 |
이번 시리즈에서는 VPC를 10.0.0.0/16 으로 만들고, 그 안을 /24 크기로 쪼개서 서브넷으로 사용할 거예요.
💡 왜 10.0.0.0 을 쓰나요? 10.x.x.x, 172.16.x.x, 192.168.x.x 는
인터넷에서 사용하지 않는 사설 IP 대역 이에요. VPC처럼 내부 네트워크에서 자유롭게 써도 돼요.
충돌 걱정 없이 가장 넓은 범위인 10.0.0.0/16 을 많이 사용해요.
직접 만들어볼까요? — VPC 생성
설명은 이 정도면 충분해요. 이제 직접 만들어볼게요!
1단계 — VPC 서비스로 이동
AWS 콘솔 상단 검색창에 VPC 를 입력하면 서비스 목록에 VPC 가 나와요. 클릭!
화면 왼쪽에 여러 메뉴가 있는 사이드바가 보이면 제대로 들어온 거예요.
2단계 — VPC 목록 확인
왼쪽 사이드바에서 Your VPCs 를 클릭하세요.
지금 이미 default 라고 적힌 VPC가 하나 있을 거예요. 이게 AWS가 자동으로 만들어준 기본 VPC예요. 건드리지 말고 새로 만들게요.
오른쪽 상단 주황색 Create VPC 버튼 클릭!
3단계 — 생성 옵션 선택
화면 상단에 선택지가 나와요.
○ VPC only ← 이걸 선택
○ VPC and more
VPC only 를 선택하세요.
💡 VPC and more 는요? 서브넷, 인터넷 게이트웨이 등을 한 번에 자동으로 만들어주는 옵션이에요. 편리하지만, 이번 시리즈에서는 하나씩 직접 만들면서 이해하는 게 목적이라 VPC only 로 진행할게요.
4단계 — 세부 설정 입력
각 항목을 아래와 같이 입력하세요.
Name tag : my-vpc
이름은 나중에 여러 VPC가 생겼을 때 구분하기 위한 거예요. my-vpc 로 입력해주세요.
IPv4 CIDR : 10.0.0.0/16
직접 입력하거나, 드롭다운에서 선택할 수 있어요. 10.0.0.0/16 을 입력하세요.
IPv6 CIDR : No IPv6 CIDR block
IPv6는 이번 실습에서 사용하지 않아요. 기본값 그대로 두세요.
Tenancy : Default
테넌시(Tenancy)는 물리 서버 공유 방식을 결정해요.
- Default — 다른 AWS 고객과 물리 서버를 공유 (일반적)
- Dedicated — 나만의 물리 서버 사용 (매우 비쌈)
특별한 이유가 없으면 Default 로 두세요.
5단계 — 생성 완료
아래로 스크롤하면 우측에 미리보기 다이어그램 이 보일 거예요. my-vpc가 표시되고 있으면 설정이 잘 된 거예요.
오른쪽 하단 주황색 Create VPC 버튼 클릭!
6단계 — 생성 결과 확인
성공하면 이런 화면이 나와요.
✅ The following VPC was created:
vpc-xxxxxxxxxxxxxxxxx | my-vpc
초록색 체크 표시와 함께 VPC ID가 표시되면 성공이에요!
View VPC 버튼을 클릭해서 방금 만든 VPC의 상세 정보를 볼 수 있어요.
생성된 VPC 살펴보기
Your VPCs 목록으로 돌아오면 이제 두 개의 VPC가 보여요.
| Name | VPC ID | IPv4 CIDR | State |
|---|---|---|---|
| – | vpc-xxx… | 172.31.0.0/16 | Available |
| my-vpc | vpc-yyy… | 10.0.0.0/16 | Available |
위가 기본 VPC, 아래가 방금 만든 my-vpc 예요.
my-vpc 를 클릭하면 상세 정보가 펼쳐지는데, 지금은 대부분 비어있어요. DNS resolution과 DNS hostnames가 Enabled 인지 확인하세요.
💡 DNS hostnames가 비활성화돼 있다면?
Actions→Edit VPC settings클릭Enable DNS hostnames체크 →Save이 설정이 켜져 있어야 나중에 EC2에 도메인 이름이 자동 부여돼요.
지금 만든 것과 앞으로 할 것
VPC를 만들었지만 지금은 텅 빈 네트워크 공간이에요.
EC2를 올릴 수도, 인터넷에 연결할 수도 없는 상태예요.
앞으로 이 공간 안에 하나씩 채워나갈 거예요.
현재 상태:
my-vpc (10.0.0.0/16) ✅ 생성 완료
└ (비어있음)
앞으로 채울 것:
├ 서브넷 (2편) — 구역 나누기
├ 인터넷 게이트웨이 (3편) — 인터넷 연결
├ 보안 그룹 (4편) — 방화벽
├ EC2 (5~6편) — 웹 서버
├ RDS (7~8편) — DB 서버
└ ... (9~15편)
혹시 잘못 만들었다면? — VPC 삭제하는 법
이름을 틀리게 입력하거나 다시 만들고 싶다면:
Your VPCs → 삭제할 VPC 체크 → Actions → Delete VPC
⚠️ VPC 안에 서브넷 등 다른 리소스가 있으면 삭제가 안 돼요.
지금 단계에서는 아무것도 없으니 바로 삭제할 수 있어요.
이번 편 정리
| 개념 | 설명 |
|---|---|
| VPC | AWS 안에 만드는 나만의 가상 네트워크 |
| CIDR | VPC에서 사용할 IP 주소 범위 (10.0.0.0/16) |
| /16 | 약 65,536개의 IP 주소를 사용 가능 |
| Tenancy | 물리 서버 공유 방식, 보통 Default |
| DNS hostnames | EC2에 도메인 이름을 자동 부여하는 설정 |
이번 편에서 만든 것:
- ✅ my-vpc (10.0.0.0/16, 서울 리전)
다음 편 👉 2편. 서브넷 설계 — 퍼블릭과 프라이빗 구역 나누기