18.3 AWS EC2, S3, RDS를 활용한 클라우드 인프라
1. 핵심 AWS 서비스 역할 정의
| 서비스 | 역할 |
|---|---|
| EC2 (Elastic Compute Cloud) | 스프링 부트 애플리케이션 서버 가상 머신 |
| RDS (Relational Database Service) | 관리형 MySQL/PostgreSQL 데이터베이스 |
| ElastiCache for Redis | 관리형 Redis 캐시/세션 서버 |
| S3 (Simple Storage Service) | 정적 파일, 이미지, 배포 JAR 파일 보관 |
| ALB (Application Load Balancer) | 트래픽 분산 및 SSL Termination |
| Route 53 | 도메인 네임 서버 (DNS) |
| ACM (Certificate Manager) | HTTPS 인증서 무료 발급/자동 갱신 |
2. 실무 추천 아키텍처
인터넷
│
▼
Route 53 (DNS: myapp.com → ALB)
│
▼
ALB (SSL Termination - HTTPS 443 → 내부는 HTTP 8080으로 포워드)
│ │
▼ ▼
EC2 인스턴스 EC2 인스턴스 ← 오토스케일링 그룹 (트래픽에 따라 자동 증설/축소)
│
├──► RDS MySQL (Private Subnet - 외부 접근 불가)
└──► ElastiCache Redis (Private Subnet)
3. EC2 초기 설정 스크립트
신규 EC2 인스턴스에 Docker를 설치하고 애플리케이션을 올리는 준비 스크립트입니다.
#!/bin/bash
# Ubuntu 22.04 기준 EC2 초기화 스크립트
# Docker 설치
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker ubuntu # ubuntu 사용자를 docker 그룹에 추가 (sudo 없이 docker 명령 실행)
# 환경 변수 파일 생성 (운영 설정 보관)
cat > /home/ubuntu/.env <<EOF
SPRING_DATASOURCE_URL=jdbc:mysql://rds-endpoint:3306/tododb
SPRING_DATASOURCE_USERNAME=admin
SPRING_DATASOURCE_PASSWORD=REPLACE_ME
SPRING_DATA_REDIS_HOST=elasticache-endpoint
EOF