이번 Ch.2 에서는 온프레미스 Vagrant 환경에서 구축한 인프라를 AWS로 마이그레이션 한 이후 배포 과정까지를 다뤄보려고 한다.
백엔드는 PHP에서 FastAPI로 전환하고, 프론트엔드는 Next.js(v0.dev)로 구축한다.
기존 온프레미스에서 직접 구성했던 DNS, SSL, 로드밸런서, DB Replication 등을 AWS 관리형 서비스로 대체한다.
AWS 아키텍쳐

간단하게 온프레미스 환경과 비교를 해보자.
| 온프레미스 | AWS | 변경 내용 |
| BIND(dns VM) | Route 53 | AWS 관리형 DNS |
| Nginx L7 + 자체서명 SSL(lb_external) | CloudFront + ALB + ACM | SSL 자동 발급/갱신, CDN 추가 |
| Nginx L4 (lb_internal) | 제거 | RDS 단일 엔드포인트로 대체 |
| Apache + PHP (web1, web2) | EC2 + FastAPI | 백엔드 언어 전환 |
| NFS (storage VM) | 제거 | Github Actions CI/CD로 대체 |
| MySQL Replication (수동) | RDS Multi-AZ | 자동 동기 복제 + Failover |
| iSCSI LUN (storage VM) | EBS (RDS 내부 자동 관리) | AWS가 자동 관리 |
| 자체서명 인증서 | ACM | 공인 인증서 자동 발급/갱신 |
| index.html (Vanlia JS) | S3 + CloudFront + Next.js(Static Export) | 프레임워크 기반으로 재구축. 정적 파일로 배포 |
| 방화벽 + SELinux | Security Group + VPC | AWS 관리형 네트워크 보안 |
CloudFront는 왜 넣냐? 할 수도 있는데
- 현재 목표는 영어/한국어를 모두 지원하는 사이트를 만드는 것이므로... (확률은 낮겠지만) CloudFront로 다국 서비스 지원을 하고 싶어서다.
NAT Gateway가 추가되었는데, EC2가 프라이빗 서브넷에 위치하므로 인터넷에서 직접 접근이 불가능하다. EC2가 패키지 설치 등 아웃바운드 인터넷 접근이 필요할 때 NAT Gateway를 통해 나간다. 반대 방향은 당연히 차단.
VPC 서브넷 구조
| 서브넷 | CIDR | AZ | 포함 리소스 |
| Public Subnet AZ-a | 10.0.1.0/24 | AZ-a | ALB 노드, NAT Gateway |
| Public Subnet AZ-b | 10.0.2.0/24 | AZ-b | ALB 노드 |
| Private Subnet AZ-a | 10.0.11.0/24 | AZ-a | EC2 web1, RDS Primary |
| Private Subnet AZ-b | 10.0.12.0/24 | AZ-b | EC2 web2, RDS Standby |
Security Group 설계
| 대상 | 인바운드 | 아웃바운드 |
| ALB | 0.0.0.0/0 (80, 443) | EC2 Security Group (8000) |
| EC2 | ALB Security Group (8000) | RDS Security Group (3306), NAT Gateway |
| RDS | EC2 Security Group (3306) | 없음 |
EC2는 ALB에서 오는 트래픽만 받고, RDS는 EC2에서 오는 트래픽만 받도록 설정을 해, 외부에서 접근이 불가능하도록 한다.
진행 순서
0단계 — v0.dev를 이용한 프론트엔드 구현 & FastAPI를 이용한 백엔드 구현
1단계 — Route 53: 도메인 구매 및 호스팅 영역 생성
2단계 — ACM: SSL 인증서 발급 (us-east-1 리전에서)
3단계 — VPC: VPC, 서브넷 4개, Internet Gateway 생성
4단계 — NAT Gateway: Elastic IP 할당 후 Public Subnet AZ-a에 생성, 라우팅 테이블 설정
5단계 — RDS: DB 서브넷 그룹 생성 후 MySQL Multi-AZ 인스턴스 생성
6단계 — EC2: AZ-a, AZ-b에 각각 생성, FastAPI 설치 및 실행
7단계 — ALB: 타겟 그룹 생성 → EC2 등록 → HTTPS 리스너 연결 → HTTP 리다이렉트 설정
8단계 — S3: 버킷 생성 → Next.js Static Export 설정 → 빌드 → 업로드
9단계 — CloudFront: S3, ALB 두 오리진 설정, ACM 인증서 연결
10단계 — Route 53: sesac.cloud.com → CloudFront Alias 레코드 등록
'Infra > Project' 카테고리의 다른 글
| [세미 프로젝트] AWS SAA 기출문제 풀이 플랫폼 - DNS 서버 (0) | 2026.02.26 |
|---|---|
| [세미 프로젝트] AWS SAA 기출문제 풀이 플랫폼 - LoadBalancer(External) 구성 (0) | 2026.02.25 |
| [세미 프로젝트] AWS SAA 기출문제 풀이 플랫폼 - Web 서버 (2) | 2026.02.25 |
| [세미 프로젝트] AWS SAA 기출문제 풀이 플랫폼 - LoadBalancer(internal) 구성 (0) | 2026.02.25 |
| [세미 프로젝트] AWS SAA 기출문제 풀이 플랫폼 - DB 서버 (0) | 2026.02.25 |