AWS에서 동적 웹 애플리케이션 배포하는 방법 (초보자 친화 가이드)
Source: Dev.to
AWS에 동적 웹 애플리케이션을 배포하는 것은 처음에 많은 서비스가 얽혀 있어 압도적으로 느껴질 수 있습니다. 이 가이드는 클라우드 컴퓨팅과 DevOps를 배우는 초보자에게 완벽한 간단하고 실용적인 접근 방식을 단계별로 안내합니다.
동적 웹 애플리케이션이란?
정적 웹사이트와 달리 동적 웹 애플리케이션은:
- 사용자 입력을 처리합니다
- 데이터베이스에 연결합니다
- 실시간으로 콘텐츠를 생성합니다
일반적인 예로는 로그인 시스템, 대시보드, 전자상거래 사이트, 그리고 PHP로 구축된 웹 앱 등이 있습니다.
AWS Services We’ll Use
배포는 EC2, VPC, 보안 그룹, S3, IAM, RDS, 애플리케이션 로드 밸런서(ALB), Auto Scaling 및 관련 네트워킹 구성 요소와 같은 핵심 AWS 서비스에 의존합니다.
Source: …
단계별 배포
1. 리전 선택
애플리케이션을 호스팅할 AWS 리전을 선택합니다.
2. VPC 생성
VPC에 DNS 호스트 이름을 활성화합니다.
3. 보안 그룹 설정
| 보안 그룹 | 목적 | 인바운드 규칙 |
|---|---|---|
| EICE‑sg (EC2 Instance Connect Endpoint) | 연결 엔드포인트 | SSH (VPC CIDR 로 제한) |
| ALB‑sg | Application Load Balancer | HTTP & HTTPS (전체 허용) |
| web‑sg | 웹 서버 | HTTP & HTTPS (ALB‑sg 로부터 허용), SSH (EICE‑sg 로 제한) |
| db‑sg | 데이터베이스 | MySQL (web‑sg 로부터 허용) |
| dms‑sg | 데이터 마이그레이션 | SSH (EICE‑sg 로 제한) |
4. EC2 Instance Connect Endpoint 생성
- 프라이빗 서브넷(예:
private-app-az2)에 배치합니다. - EICE‑sg 를 연결합니다.
5. S3 버킷 생성
애플리케이션 코드를 버킷에 업로드합니다.
6. IAM 정책 생성
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret"
],
"Resource": "*"
}
]
}
연습용으로 모든 리소스를 허용해도 되지만, 실제 운영 환경에서는 ARN을 제한하세요.
7. IAM 역할 생성
- 신뢰 엔터티: EC2.
- 앞서 만든 정책을 연결합니다.
- 역할에 의미 있는 이름을 지정합니다(예:
WebAppS3AccessRole).
8. DB 서브넷 그룹 생성
VPC와 서로 다른 AZ에 있는 두 개의 프라이빗 서브넷을 선택합니다.
9. RDS MySQL 인스턴스 시작
- Standard create → MySQL (최신 엔진 버전).
- Free Tier 를 선택합니다.
- DB 인스턴스 식별자와 초기 데이터베이스 이름을 설정합니다.
- 인증 정보를 위해 AWS Secrets Manager 를 활성화합니다.
- 앞서 만든 Subnet group 과 db‑sg 를 사용합니다.
- AZ를 선택하고 필요에 따라 추가 설정을 구성합니다.
10. 데이터 RDS 로 마이그레이션
- 프라이빗 서브넷(
private-app-az2)에 dms‑sg 를 적용한 임시 EC2 인스턴스(키 페어 없음)를 시작합니다. - 7단계에서 만든 IAM 역할을 연결합니다.
- 콘솔을 통해 접속하고 마이그레이션 스크립트를 실행합니다.
- 스크립트는 다음 위치에 있습니다:
마이그레이션이 끝나면 임시 EC2 인스턴스를 종료합니다.
11. 웹 서버 배포
- 프라이빗 서브넷에 web‑sg 를 적용한 또 다른 EC2 인스턴스(키 페어 없음)를 시작합니다.
- S3 접근 역할을 연결합니다.
- 배포 스크립트(위 GitHub 저장소와 동일)를 실행해 S3에서 코드를 가져오고 애플리케이션을 시작합니다.
12. 대상 그룹 생성
- 유형: Instance
- VPC: 생성한 VPC
- 헬스 체크 경로: 기본값(또는 사용자 정의) – HTTP 상태 코드
200,301,302포함. - 웹 서버 인스턴스를 등록합니다.
13. Application Load Balancer 설정
- VPC와 두 개의 퍼블릭 서브넷(각 AZ당 하나)을 선택합니다.
- ALB‑sg 를 연결합니다.
- 리스너:
- HTTP → HTTPS(전체 URL) 로 리다이렉트.
- HTTPS → 앞서 만든 대상 그룹으로 포워드; SSL 인증서를 연결합니다.
14. DNS 구성
ALB를 가리키는 DNS A (Alias) 레코드(예: www.example.com)를 생성합니다.
이제 도메인 이름을 통해 웹 애플리케이션에 접근할 수 있습니다.
15. 트래픽 급증 대비 – Auto Scaling
- 실행 중인 웹 서버 인스턴스에서 AMI 를 생성합니다(작업 → 이미지 → 이미지 생성).
- Launch Template: AMI, 인스턴스 유형, 보안 그룹, IAM 역할 등을 정의합니다.
- Auto Scaling Group:
- VPC: 프라이빗 서브넷을 선택합니다.
- ALB와 대상 그룹을 연결합니다.
- 헬스 체크 및 원하는 용량(최소/최대/desired)을 설정합니다.
Auto Scaling 그룹은 트래픽이 증가하면 추가 인스턴스를 자동으로 시작하고, 부하가 감소하면 인스턴스를 종료합니다.
최종 생각
AWS를 배우는 가장 쉬운 방법은 실제 프로젝트를 만드는 것입니다. 동적 웹 애플리케이션을 배포하는 것은 클라우드 서비스가 어떻게 함께 작동하는지 이해하기 위한 훌륭한 초보자 연습입니다. 한번 시도해 보고, AWS, Docker, 그리고 클라우드 컴퓨팅에 관한 실용적인 포스트를 계속 기대해 주세요.