Udemy - Stephane Maarek AWS SAA 강의를 듣고 메모 목적으로 남김
1. 확장성(Scalability)과 고가용성(High Availability)
- 수직 확장 (Vertical Scalability / Scale Up, Down):
- 인스턴스의 크기(사양)를 키우는 방식 (예:
t2.micro -> t2.large).
- 데이터베이스(RDS, ElastiCache 등)처럼 분산되지 않은 시스템에서 주로 사용됨. 물리적 한계가 존재함.
- 수평 확장 (Horizontal Scalability / Scale Out, In / 탄력성):
- 처리하는 인스턴스(서버)의 개수 자체를 늘리거나 줄이는 방식.
- 현대 웹 애플리케이션 아키텍처의 핵심이며, 클라우드 환경에서 매우 쉽게 구현 가능.
- 고가용성 (High Availability):
- 시스템이 하나의 데이터 센터(AZ) 장애를 견딜 수 있도록, 최소 2개 이상의 가용 영역(Multi-AZ)에 걸쳐 애플리케이션을 실행하는 아키텍처.
- 수평 확장과 뗄 수 없는 관계.
2. ELB (Elastic Load Balancer) 개요 및 특징
- 개념: 들어오는 인터넷/네트워크 트래픽을 여러 하위 서버(EC2 인스턴스 등)로 분산시켜주는 AWS의 관리형 로드 밸런서.
- 장점:
- AWS가 고가용성, 유지 보수, 업그레이드를 직접 관리함.
- 애플리케이션에 접속할 수 있는 단일 DNS(접속 지점)를 제공함.
- 서버 상태를 파악하는 상태 확인(Health Check)을 통해 정상적인 서버로만 트래픽을 보냄.
- HTTPS(SSL/TLS 종료) 지원, 쿠키를 이용한 고정 세션(Stickiness) 지원.
- 퍼블릭(외부용) 및 프라이빗(내부용) 트래픽 분리 구성 가능.
- 보안 그룹 (Security Groups) 아키텍처:
- ELB 보안 그룹: 외부(0.0.0.0/0)의 HTTP(80)/HTTPS(443) 트래픽 허용.
- EC2 보안 그룹: 외부에서 직접 접근하는 것을 막고, ELB의 보안 그룹에서 오는 트래픽만 허용하도록 설정해야 가장 안전함.
3. AWS 로드 밸런서의 종류
1) Classic Load Balancer (CLB - v1, 구형)
- Layer 4(TCP) 및 Layer 7(HTTP/HTTPS) 모두 지원.
- 최신 기능이 부족하여 현재는 사용을 권장하지 않음.
2) Application Load Balancer (ALB - v2)
- 작동 계층: Layer 7 (HTTP, HTTPS, WebSocket 전용).
- 특징:
- 마이크로서비스 및 컨테이너(Docker, ECS) 환경에 최적화. (포트 매핑 지원)
- HTTP를 HTTPS로 자동 리디렉션 지원.
- 클라이언트의 실제 IP 주소를
X-Forwarded-For 헤더에 담아 전달함 (EC2는 ELB의 IP만 보임).
- 고급 라우팅:
- 경로(Path) 기반:
example.com/users, example.com/posts
- 호스트 이름(Hostname) 기반:
a.example.com, b.example.com
- 쿼리 문자열/헤더 기반:
?platform=mobile
- 대상 그룹 (Target Groups): ALB가 라우팅하는 목적지. (EC2 인스턴스, ECS 작업, Lambda 함수, 프라이빗 IP 등)
3) Network Load Balancer (NLB - v2)
- 작동 계층: Layer 4 (TCP, UDP, TLS).
- 특징:
- 초당 수백만 건의 요청을 처리할 수 있는 초고성능, 극저지연(초저지연) 로드 밸런서.
- 가용 영역(AZ)당 1개의 고정 퍼블릭 IP(또는 Elastic IP)를 할당받음. (ALB는 고정 IP 부여 불가, DNS만 제공)
- 프리티어에 포함되지 않음 (과금 주의). 극단적인 네트워크 성능이나 고정 IP가 필요할 때 사용.
4) Gateway Load Balancer (GWLB)
- 작동 계층: Layer 3 (네트워크 계층, IP 프로토콜).
- 특징: 타사 네트워크 가상 어플라이언스(방화벽, 침입 탐지 및 방지 시스템 등)를 배포하고 확장/관리하기 위해 사용. (GENEVE 프로토콜 사용)
4. 로드 밸런서 주요 고급 기능
- 고정 세션 (Sticky Sessions / Session Affinity):
- 동일한 클라이언트의 요청이 항상 동일한 EC2 인스턴스로 전달되도록 고정하는 기능 (ALB, CLB에서 사용). 쿠키(Cookie)를 통해 작동함.
- 단점: 트래픽이 특정 인스턴스에 몰려 불균형을 초래할 수 있음.
- 교차 영역 로드 밸런싱 (Cross-Zone Load Balancing):
- 트래픽을 모든 가용 영역(AZ)에 있는 인스턴스 전체에 고르게 분산시키는 기능.
- ALB는 기본 활성화(AZ 간 데이터 전송 무료), NLB/GWLB는 기본 비활성화 상태임.
- SNI (Server Name Indication):
- 하나의 로드 밸런서(ALB, NLB)에서 여러 개의 SSL/TLS 인증서를 호스팅할 수 있게 해주는 기능. 대상 클라이언트가 접속하려는 호스트 이름을 바탕으로 알맞은 인증서를 로드함.
- 연결 등록 취소 지연 (Connection Draining / Deregistration Delay):
- 인스턴스가 비정상 상태가 되거나 대상 그룹에서 등록 해제될 때, 현재 처리 중인 활성 요청이 완료될 때까지 기다려주는 시간 (기본 300초). 이 시간 동안 새로운 요청은 해당 인스턴스로 가지 않음.
5. Auto Scaling Group (ASG)
- 개념: 애플리케이션의 부하에 맞춰 EC2 인스턴스의 개수를 자동으로 확장(Scale Out) 및 축소(Scale In)하는 서비스.
- 핵심 기능:
- 시작 템플릿(Launch Template)을 사용하여 어떤 인스턴스(AMI, 크기, 보안 그룹 등)를 띄울지 정의.
- 최소(Min), 최대(Max), 희망(Desired) 용량을 설정하여 비용과 성능을 통제.
- 로드 밸런서(ELB)와 연결되어 새 인스턴스를 자동으로 타겟 그룹에 등록.
- ELB 상태 확인(Health Check)과 연동하여 비정상 인스턴스를 즉시 교체.
6. ASG 스케일링 정책 (Scaling Policies)
- 동적 스케일링 (Dynamic Scaling):
- 대상 추적 스케일링 (Target Tracking): 가장 쉽고 권장됨. 특정 지표(예: 평균 CPU 40%)를 설정하면 ASG가 알아서 맞춤.
- 단계 / 단순 스케일링 (Step / Simple): CloudWatch 경보(Alarm)를 바탕으로 "CPU 70% 초과 시 2대 추가" 처럼 구체적인 룰을 설정.
- 예약된 스케일링 (Scheduled Actions): 트래픽 급증이 예상되는 특정 시간(예: 금요일 오후 6시)에 미리 용량을 확장해두는 방식.
- 예측 스케일링 (Predictive Scaling):
- 머신 러닝을 이용해 과거 트래픽 패턴을 분석하고 향후 수요를 예측하여 사전에 인스턴스를 스케일링함.
7. ASG 고급 기능
- 스케일링 휴지기 (Scaling Cooldowns):
- 확장이 일어난 직후, 새 인스턴스가 부팅되고 지표가 안정화될 때까지 추가적인 스케일링을 막는 시간 (기본 300초).
- 인스턴스 새로 고침 (Instance Refresh):
- 새로운 AMI나 시작 템플릿 버전이 나왔을 때, ASG 내의 기존 인스턴스들을 무중단으로 안전하게 순차적으로 교체하는 기능 (최소 정상 백분율 설정 가능).