01
목표 아키텍처
CH02~CH09에서 배운 모든 서비스를 하나의 서비스로 연결합니다. 사용자가 도메인에 접속하면 CloudFront → ALB → EC2(Spring Boot) → RDS로 이어지는 완전한 3티어 웹 서비스입니다.
🏗 최종 아키텍처 전체 구성
🌐 사용자 → https://www.example.com
↓ Route 53 ALIAS
☁ CloudFront
정적 파일 캐싱 · OAC · HTTPS
↙ /api/* 제외
정적 파일
정적 파일
↘ /api/*
ALB 오리진
ALB 오리진
🗄 S3
React 빌드 결과물
⚖️ ALB
HTTPS · 헬스 체크
↓ ALB → EC2
🌐 VPC
퍼블릭 서브넷
ALB
NAT Gateway
NAT Gateway
프라이빗 서브넷
EC2 (Spring Boot)
RDS (MySQL)
RDS (MySQL)
↓ CloudWatch 모니터링 · CodePipeline CI/CD
비용 추산 — 실습 전에 반드시 확인
ALB: 시간당 $0.0225 · EC2 t3.medium: $0.052 · RDS db.t4g.micro: $0.018 · NAT Gateway: $0.059
동시 가동 1시간 기준 약 $0.15~0.20, 하루 방치 시 $3~5+
반드시 당일 실습 완료 후 전체 삭제하세요.
ALB: 시간당 $0.0225 · EC2 t3.medium: $0.052 · RDS db.t4g.micro: $0.018 · NAT Gateway: $0.059
동시 가동 1시간 기준 약 $0.15~0.20, 하루 방치 시 $3~5+
반드시 당일 실습 완료 후 전체 삭제하세요.
실습 01
네트워크 기반 구성
- VPC 생성: CIDR
10.0.0.0/16 - 퍼블릭 서브넷 2개: AZ 2a(
10.0.1.0/24), AZ 2c(10.0.3.0/24) - 프라이빗 서브넷 2개: AZ 2a(
10.0.2.0/24), AZ 2c(10.0.4.0/24) - IGW 생성 및 연결
- 퍼블릭 라우팅 테이블:
0.0.0.0/0 → IGW - 보안 그룹 3개: ALB용(80·443 전체), EC2용(8080을 ALB SG에서만), RDS용(3306을 EC2 SG에서만)
실습 02
백엔드 배포 (Spring Boot)
- RDS 생성: 프라이빗 서브넷 · Multi-AZ 비활성 · 백업 보존 0일
- EC2 생성: 프라이빗 서브넷 · IAM 역할(S3·SSM 권한) · EC2용 보안 그룹
- Session Manager로 EC2 접속: SSH 포트 없이 접속
- Java 설치 · Spring Boot 배포: application.yml에 RDS 연결 정보 환경변수로
- ALB 생성: 퍼블릭 서브넷 2개 · ACM 인증서 · 대상 그룹에 EC2 등록
- Route 53:
api.example.com → ALB ALIAS - HTTPS 확인:
curl https://api.example.com/health
실습 03
프론트엔드 배포 (S3 + CloudFront)
- S3 버킷 생성: 퍼블릭 액세스 차단 유지
- 빌드 및 업로드:
npm run build→ dist/ 업로드 - us-east-1 ACM 인증서 발급:
www.example.com - CloudFront 배포: S3 오리진 · OAC · SPA 오류 처리(403/404 → index.html)
- Route 53:
www.example.com → CloudFront ALIAS - CORS 설정: Spring Boot에서
https://www.example.com허용 - 전체 기능 확인: 로그인 · 파일 업로드 · API 호출
실습 04
운영 연결 (CloudWatch + CI/CD)
- CloudWatch 경보: EC2 CPU 70% · RDS 커넥션 80% · ALB 5XX 에러
- SNS 이메일 알림: 경보 시 이메일 수신
- CodePipeline 구성: GitHub → CodeBuild → CodeDeploy → EC2
- 테스트 배포: 코드 수정 push → 자동 배포 확인
⚠️ 정리
전체 정리 — 역순 삭제
아래 순서대로 삭제하세요 — 순서가 틀리면 오류 납니다
- CodePipeline · CodeBuild · CodeDeploy 삭제
- CloudWatch 경보 · 대시보드 삭제
- CloudFront 배포 비활성화 후 삭제 (5~15분 소요)
- ALB · 대상 그룹 삭제
- EC2 인스턴스 종료(Terminate)
- RDS 인스턴스 삭제 (스냅샷 생성 체크 해제)
- RDS 클러스터 삭제 (Aurora인 경우)
- NAT Gateway 삭제 (있는 경우)
- 탄력적 IP 릴리스
- S3 버킷 내용 비우기 → 버킷 삭제
- VPC 삭제 (서브넷·IGW·보안 그룹 자동 삭제)
- ACM 인증서 삭제 (서울 · 버지니아 둘 다)
- Route 53 레코드 삭제 → 호스팅 영역 삭제
- EBS 볼륨 · 스냅샷 남은 것 확인 후 삭제
- Cost Explorer에서 다음날 잔여 과금 확인
🎉 종합 실습 완료 — 달성한 것들
네트워크VPC · 퍼블릭/프라이빗 서브넷 · 보안 그룹 3계층
백엔드EC2 + Spring Boot + RDS + S3 파일 업로드
HTTPSALB + ACM 인증서 + HTTP→HTTPS 리다이렉트
프론트엔드S3 + CloudFront + OAC + SPA 라우팅
도메인Route 53 + www·api 서브도메인 분리
운영CloudWatch 경보 + SNS 알림
자동화CI/CD 파이프라인으로 git push → 자동 배포