이 과제에서는 Application Load Balancer (ALB) 와 Auto Scaling Group (ASG) 를 이용해 자동으로 복구(Self-healing)되고, CPU 부하에 따라 확장(Scale-out)되는 웹 애플리케이션을 구축해보기
| 항목 | 설정 |
|---|---|
| Region | ap-northeast-2 (Seoul) |
| Instance Type | t2.micro |
| Storage | 10GB (gp3) |
| Security Groups | web, alb 두 개 생성 |
| Key Pair | 새로 생성 또는 기존 사용 |
| VPC/Subnet | 기본(Default) VPC 사용 가능 |
alb-cc-sgcc-sg/200EC2 → Load Balancers → Create Load Balancer
Application Load Balancer 선택
설정 입력:
alb-ccNetwork mapping:
Security groups: alb-cc-sg
Listeners:
cc-tgrp 선택Create load balancer
생성 후 DNS 이름 복사
예시: alb-web-123456.ap-northeast-2.elb.amazonaws.com
cc-lt#!/bin/bash
dnf -y install nginx
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" \
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600" -s)
IID=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" \
-s http://169.254.169.254/latest/meta-data/instance-id)
AZ=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" \
-s http://169.254.169.254/latest/meta-data/placement/availability-zone)
echo "<h1>Hello from $IID ($AZ)</h1>" > /usr/share/nginx/html/index.html
systemctl enable nginx
systemctl start nginx
cc-asgcc-lt 선택cc-tgrp웹 브라우저에서 ALB DNS 이름 입력
http://alb-web-xxxxxxxx.ap-northeast-2.elb.amazonaws.com
새로고침할 때마다 화면에 표시되는 “Hello from i-xxxx (AZa)” 메시지가 변경되는지 확인
EC2 → 인스턴스 목록에서 현재 실행 중인 인스턴스 확인
SSH 접속 후 Nginx 중단:
sudo systemctl stop nginx
Target Group에서 해당 인스턴스 상태가 Unhealthy 로 변경됨 확인
Auto Scaling Group이 새 인스턴스 자동 생성
인스턴스에 SSH 접속
아래 명령어로 CPU 부하 발생시킴:
yes > /dev/null &
yes > /dev/null &
CPU 사용률이 50% 이상으로 오르면 Auto Scaling이 새 인스턴스 생성
인스턴스 개수가 2개로 증가하면 성공
부하 중단:
killall yes
CPU 사용률이 떨어지면 일정 시간 후 인스턴스 수가 다시 1개로 감소
사용자가 웹 브라우저 주소창에 ALB의 DNS 주소를 입력했을 때의 흐름
시스템에 문제가 생기거나 부하가 많아졌을 때의 자동화된 흐름
yes 명령어를 실행하여 CPU 사용률을 50% 이상으로 높이기killall yes 명령어로 CPU 부하를 제거하면 CPU 사용률이 다시 낮아짐사용자 요청이 어떻게 2대의 서버로 분산되는지 (Scale-Out 상태 가정)
┌───────────────────────┐
│ Internet User │
│ (브라우저 새로고침 반복) │
└───────────┬───────────┘
│ (HTTP Request)
▼
┌───────────────────────┐
│ Application Load Balancer │
└───────────┬───────────┘
┌────────┴────────┐
│ 요청을 순차적으로 분배 │
▼ ▼
┌───────────────────┐ ┌───────────────────┐
│ EC2 Instance 1 │ │ EC2 Instance 2 │
│ (Availability Zone A) │ │ (Availability Zone B) │
│ 응답: "Hello from i-aaa"│ │ 응답: "Hello from i-bbb"│
└───────────────────┘ └───────────────────┘
설명:
한쪽 서버에 문제가 생겼을 때 시스템이 스스로 복구하는 과정
초기 상태 (정상) 문제 발생! 자동 복구 과정
┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐
│ EC2 Instance 1 │ │ EC2 Instance 1 │ │ EC2 Instance 1 │
│ [상태: Healthy] │ │ [상태: Unhealthy] │ │ [상태: Terminating] │
│ (Nginx 동작 중) │ ────▶ │ (Nginx 중지됨 ☠️) │ ────▶ │ (ASG가 종료시킴) │
└───────────────────┘ └───────────────────┘ └──────────┬────────┘
│ │
(ALB 헬스 체크 실패 감지) │ (ASG가 새 인스턴스 시작)
│ ▼
└──────────────▶ ┌───────────────────┐
│ EC2 Instance 2 │
│ [상태: Healthy] │
│ (새로 생성된 인스턴스) │
└───────────────────┘
설명:
문제 발생: 관리자가 EC2 인스턴스의 웹 서버(Nginx)를 중지
상태 감지: ALB의 대상 그룹이 주기적인 상태 검사(Health Check)를 통해 해당 인스턴스가 비정상(Unhealthy) 상태가 된 것을 감지
자동 복구: Auto Scaling Group(ASG)이 이 비정상 인스턴스를 발견하고, 최소 인스턴스 수(1개)를 유지하기 위해 자동으로 해당 인스턴스를 종료하고 건강한 새 인스턴스를 시작
서버 부하가 증가했을 때 자동으로 서버 수를 늘리는 과정
평상시 상태 부하 증가! 자동 확장 후
┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐
│ EC2 Instance 1 │ │ EC2 Instance 1 │ │ EC2 Instance 1 │ │ EC2 Instance 2 │
│ [CPU: 5%] │ ────▶ │ [CPU: 99% ▲] │ ────▶ │ [CPU: 50%] │ │ [CPU: 50%] │
└───────────────────┘ └──────────┬────────┘ └───────────────────┘ └───────────────────┘
│
(ASG 정책 트리거: CPU > 50%)
│
▼
┌─────────────────────┐
│ Auto Scaling Group │
│ (새 인스턴스 시작) │
└─────────────────────┘
설명:
부하 증가: 인스턴스의 CPU 사용률이 급증하여 ASG에 설정된 목표 값(50%)을 초과
정책 실행: ASG는 CPU 사용률 증가를 감지하고, 설정된 확장 정책(Target Tracking)에 따라 인스턴스 수를 늘리기로 결정
확장 완료: ASG는 시작 템플릿을 이용해 새로운 EC2 인스턴스를 시작하고, 이 인스턴스가 정상 상태가 되면 ALB가 트래픽을 분산하기 시작 -> 결과적으로 전체 시스템의 부하가 낮아짐
증가했던 서버 부하가 다시 줄어들었을 때 서버 수를 원래대로 줄이는 과정
확장된 상태 부하 감소 자동 축소 후
┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐
│ EC2 Instance 1 │ │ EC2 Instance 2 │ │ EC2 Instance 1 │ │ EC2 Instance 1 │
│ [CPU: 50%] │ │ [CPU: 50%] │ ────▶ │ [CPU: 5% ▼] │ ────▶ │ [CPU: 5%] │
└───────────────────┘ └──────────┬────────┘ └───────────────────┘ └───────────────────┘
│
(ASG가 종료시킴)
│
(ASG 정책 트리거: CPU < 50%)
│
┌─────────────────────┐
│ Auto Scaling Group │
│ (인스턴스 1개 종료) │
└─────────────────────┘
설명:
부하 감소: CPU 부하를 유발하던 프로세스가 종료되어 인스턴스들의 평균 CPU 사용률이 목표 값(50%)보다 현저히 낮아짐
정책 실행: ASG는 일정 시간 동안 낮은 CPU 사용률이 유지되는 것을 확인한 후, 인스턴스 수를 줄이기로 결정
축소 완료: ASG는 인스턴스 중 하나를 종료하여 최소 인스턴스 수(1개)로 되돌립니다10. 이를 통해 불필요한 비용을 절감