Availability(고가용성) & Scalability(확장성) 정리
Availability(고가용성)
- 정의: 시스템 또는 애플리케이션이 항상 작동 가능하고, 장애 발생 시에도 지속적으로 서비스가 제공될 수 있는 능력.
- 특징
- 일반적으로 **수평 확장(horizontal scaling)**과 함께 적용됨.
- **다중 가용 영역(Multi-AZ)**을 활용하여 최소 2개 이상의 데이터 센터에서 운영함.
- RDS Multi-AZ 배포는 패시브 방식(장애 발생 시 자동으로 다른 AZ로 전환).
- EC2 Auto Scaling Group과 로드 밸런서를 사용하여 여러 AZ에 걸쳐 애플리케이션을 실행함.
Scalability(확장성)
- 정의: 시스템이 증가하는 부하를 처리하기 위해 적절하게 확장될 수 있는 능력.
- 종류
- 수직 확장(Vertical Scaling)
- 단일 인스턴스의 크기를 증가시켜 성능을 향상시키는 방법.
- 예: t2.micro → t2.large 업그레이드.
- RDS, ElastiCache 같은 AWS 서비스에서 사용됨.
- 하드웨어 한계로 인해 확장 가능 범위가 제한됨.
- 수평 확장(Horizontal Scaling)
- 애플리케이션 인스턴스를 여러 개 추가하여 성능을 향상시키는 방법.
- 분산 시스템 환경에서 자주 사용되며, AWS EC2 Auto Scaling Group과 로드 밸런서로 구현 가능.
- 클라우드 환경에서 매우 일반적인 방식.
- 수직 확장(Vertical Scaling)
고가용성과 확장성의 차이점
- 고가용성: 장애 발생 시에도 시스템이 지속적으로 운영될 수 있도록 설계.
- 확장성: 부하 증가에 대응하여 시스템을 확장할 수 있도록 설계.
- 예를 들어 콜센터를 운영할 때:
- 고가용성: 뉴욕과 샌프란시스코 두 개의 센터를 운영하여 한 곳에 장애가 발생해도 계속 운영 가능.
- 확장성:
- 수직 확장: 기존 직원(오퍼레이터)에게 더 많은 콜을 받을 수 있도록 장비를 업그레이드.
- 수평 확장: 더 많은 직원을 추가하여 콜을 처리.
AWS에서의 적용 예시
- EC2 고가용성 & 확장성
- 수직 확장: 인스턴스 크기 조정 (예: t2.nano → u-12tb1.metal).
- 수평 확장: Auto Scaling Group & Load Balancer 사용.
- 고가용성: Multi-AZ Auto Scaling Group & Load Balancer 적용.
- RDS 고가용성 & 확장성
- 고가용성: RDS Multi-AZ 배포로 장애 발생 시 자동 전환.
- 읽기 확장성(Read Scalability): RDS Read Replica를 사용하여 읽기 성능 향상.
- EFS(Elastic File System)
- 다중 AZ 지원으로 고가용성 보장.
- 자동 크기 조정으로 확장성 제공.
로드 밸런싱 (Load Balancing) 정리
로드 밸런서란?
로드 밸런서는 트래픽을 여러 서버(EC2 인스턴스)로 분산하여 부하를 관리하는 서비스이다. AWS에서는 Elastic Load Balancer(ELB)를 제공하며, 여러 유형이 존재한다.
로드 밸런서를 사용하는 이유
- 부하 분산 → 여러 서버에 트래픽을 분산하여 과부하 방지
- 단일 접속 지점 제공 → DNS를 통해 접근 가능
- 자동 장애 감지 및 복구 → 인스턴스 장애 발생 시 정상 인스턴스로 트래픽 우회
- 정기적인 헬스 체크 수행 → 인스턴스의 정상 상태 여부를 모니터링
- SSL 종료 (HTTPS 처리) → 보안 강화를 위해 HTTPS 트래픽을 ELB에서 처리
- 세션 유지(Stickiness) 지원 → 사용자가 동일한 인스턴스로 연결될 수 있도록 설정 가능
- 고가용성 지원 → 여러 가용 영역(AZ)에서 트래픽을 분산하여 가용성을 높임
- 퍼블릭 트래픽과 프라이빗 트래픽을 분리 가능
헬스 체크란?
- 헬스 체크(Health Check)는 로드 밸런서가 백엔드 EC2 인스턴스의 정상 상태를 확인하는 기능이다. 헬스 체크를 통해 비정상적인 인스턴스를 감지하고, 트래픽을 정상 인스턴스로 우회할 수 있다.
헬스 체크가 필요한 이유
-
- 문제가 있는 인스턴스를 자동 감지하여 트래픽을 차단
- Auto Scaling과 연동하여 비정상 인스턴스를 자동 교체 가능
- 웹 애플리케이션, API 서버, 데이터베이스 등의 가용성을 높이는 핵심 기능
헬스 체크의 동작 방식
-
- 로드 밸런서가 정해진 주기(Interval)마다 헬스 체크 요청을 보냄
- 지정된 포트와 엔드포인트(/health 등)에 접속하여 상태 확인
- 응답 코드가 200(OK)이면 정상(Healthy), 다른 응답이거나 응답이 없으면 비정상(Unhealthy)으로 판단
- 비정상 상태가 연속적으로 감지되면, 해당 인스턴스를 트래픽 분배 대상에서 제외
- 다시 정상 상태로 감지되면, 트래픽을 다시 전달
헬스 체크 설정 항목
-
- 프로토콜(Protocol) → HTTP, HTTPS, TCP
- 포트(Port) → EC2 인스턴스에서 헬스 체크를 받을 포트 (예: 80, 443, 8080)
- 헬스 체크 경로(Path) → /health, /status 같은 엔드포인트 설정
- 정상/비정상 임계값
- Healthy Threshold → 정상 상태로 판단할 요청 성공 횟수
- Unhealthy Threshold → 비정상 상태로 판단할 요청 실패 횟수
- 체크 주기(Interval) → 헬스 체크 요청 간격 (초 단위)
- 타임아웃(Timeout) → 인스턴스가 응답을 반환해야 하는 최대 시간
Elastic Load Balancer(ELB) 유형
Classic Load Balancer (CLB) (시험x)
2009년 출시된 1세대 로드 밸런서L4 (TCP, SSL) & L7 (HTTP, HTTPS) 지원고정된 DNS 이름 제공 (xxx.region.elb.amazonaws.com)현재는 ALB/NLB 사용이 권장됨
Application Load Balancer (ALB)
- 2016년 출시된 2세대 로드 밸런서
- OSI 7계층 (Layer 7)에서 동작 → HTTP, HTTPS, WebSocket 트래픽 처리
- 고급 라우팅 기능 지원
- 경로 기반 라우팅 (example.com/users → 사용자 서버, example.com/posts → 게시글 서버)
- 호스트 기반 라우팅 (one.example.com → 서버 A, two.example.com → 서버 B)
- 쿼리 문자열 및 헤더 기반 라우팅
- 마이크로서비스 및 컨테이너 환경(Amazon ECS)에서 적합
- 포트 매핑 기능 제공 → Amazon ECS에서 동적 포트로 트래픽을 라우팅 가능
Network Load Balancer (NLB)
- 2017년 출시된 2세대 로드 밸런서
- OSI 4계층 (Layer 4)에서 동작 → TCP, UDP 트래픽 처리
- 고성능, 초저지연 (millions of requests per second)
- 고정된 IP 할당 지원 → 특정 IP를 화이트리스트(허용 목록)로 등록 가능
- DNS 이름 및 Elastic IP 할당 가능
- 금융 서비스, VoIP, 게임 서버 등 실시간 연결이 필요한 애플리케이션에 적합
Gateway Load Balancer (GWLB)
- 2020년 출시된 3세대 로드 밸런서
- OSI 3계층 (Layer 3)에서 동작 → IP 패킷 기반 트래픽 처리
- 보안 장비(Firewall, IDS/IPS, Deep Packet Inspection 등)와 함께 사용
- Transparent Network Gateway 역할 수행 → 보안 어플라이언스와 트래픽을 연결
ELB와 보안 (Security Groups)
- 로드 밸런서는 보안 그룹을 활용하여 트래픽을 제어할 수 있음
- Load Balancer Security Group → 외부에서 오는 HTTP/HTTPS 트래픽을 허용
- Application Security Group → 로드 밸런서에서만 허용된 트래픽만 받도록 설정
Sticky Sessions (Session Affinity)
- 클라이언트가 항상 동일한 백엔드 인스턴스로 연결되도록 설정하는 기능
- CLB, ALB, NLB에서 지원됨
- 쿠키 기반 세션 유지
- 커스텀 쿠키 (애플리케이션에서 설정 가능)
- 로드 밸런서에서 자동 생성하는 쿠키 (AWSALB, AWSELB)
- 사용 사례 → 로그인 세션 유지가 필요한 애플리케이션 (예: 전자상거래, 채팅 앱)
- 단점 → 특정 인스턴스에 부하가 집중될 수 있음
Cross-Zone Load Balancing (AZ 간 부하 분산)
- 여러 가용 영역(AZ)에 걸쳐 트래픽을 균등하게 분산하는 기능
- ALB → 기본적으로 활성화 (비활성화 가능)
- NLB, GWLB → 기본적으로 비활성화 (활성화 시 추가 요금 발생)
- CLB → 기본적으로 비활성화 (활성화 가능, 추가 요금 없음)
로드 밸런서 활용 예시
- 웹 서버 여러 대를 운영하는 경우, 트래픽을 균등하게 분산
- 마이크로서비스 아키텍처에서 API 요청을 특정 서비스로 라우팅
- TCP/UDP 기반의 금융 거래 시스템에서 빠른 트래픽 분산이 필요할 때
- EC2 Auto Scaling과 함께 사용하여 트래픽 증가 시 자동으로 인스턴스를 추가/제거
SSL/TLS (보안 및 암호화) 정리
SSL/TLS란?
SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 클라이언트와 로드 밸런서 간의 트래픽을 암호화하여 보안을 강화하는 프로토콜이다.
- SSL은 이전 버전이며, 현재는 TLS가 표준이지만 여전히 "SSL 인증서"라는 용어가 널리 사용됨.
- 공인된 **인증 기관(CA, Certificate Authority)**에서 발급한 인증서를 사용해야 함.
- 예: Comodo, Symantec, GoDaddy, GlobalSign, Digicert, Let's Encrypt
AWS에서 SSL/TLS 관리
- AWS **Certificate Manager(ACM)**를 사용하여 인증서를 관리 가능
- 사용자가 직접 인증서를 업로드할 수도 있음
- HTTPS 리스너를 설정하면 기본적으로 하나의 인증서를 지정해야 하며, 여러 개의 인증서 추가 가능
- SNI(Server Name Indication) 기능을 활용하여 여러 도메인에 대한 SSL 인증서 적용 가능
Server Name Indication (SNI)
- 하나의 로드 밸런서에서 여러 개의 SSL 인증서를 사용할 수 있도록 지원하는 프로토콜
- 클라이언트가 SSL 핸드셰이크 시 접속하려는 도메인(hostname)을 전달하면, 서버가 해당 도메인에 맞는 인증서를 제공
- ALB, NLB, CloudFront에서 지원 (CLB에서는 지원되지 않음)
ELB와 SSL 인증서
로드 밸런서 유형SSL 인증서 지원SNI 지원
Classic Load Balancer (CLB) | 단일 SSL 인증서만 지원 | ❌ |
Application Load Balancer (ALB) | 다중 SSL 인증서 지원 | ✅ |
Network Load Balancer (NLB) | 다중 SSL 인증서 지원 | ✅ |
- CLB → 여러 개의 SSL 인증서를 사용하려면 여러 개의 CLB를 생성해야 함
- ALB, NLB → SNI를 사용하여 여러 SSL 인증서를 적용 가능
Connection Draining (Deregistration Delay)
로드 밸런서에서 연결 해제 중인 인스턴스가 진행 중인 요청을 마칠 수 있도록 대기하는 기능
- CLB → "Connection Draining"
- ALB & NLB → "Deregistration Delay"
- 기본값은 **300초(5분)**이며, 1~3600초(1시간)까지 설정 가능
- 짧은 요청이 많은 서비스의 경우, 대기 시간을 낮게 설정하는 것이 유리함
Auto Scaling Group (ASG) & Load Balancer 연동
**Auto Scaling Group(ASG)**은 트래픽 변화에 따라 EC2 인스턴스 수를 자동으로 조정하는 기능
- 트래픽 증가 시 → EC2 인스턴스를 자동으로 추가 (Scale Out)
- 트래픽 감소 시 → EC2 인스턴스를 자동으로 제거 (Scale In)
- 최소/최대 인스턴스 개수를 지정 가능
- 비정상 인스턴스가 감지되면 자동으로 교체
https://velog.velcdn.com/images/pingu_9/post/4c927a68-263a-4fb1-9b35-17395b790132/image.png
Auto Scaling Group (ASG) 주요 속성
- Launch Template → 인스턴스 유형, AMI, EBS 볼륨, 보안 그룹, IAM 역할 포함
- Scaling Policies (확장 정책)
- Target Tracking Scaling → 예: 평균 CPU 사용률을 40%로 유지
- Simple/Step Scaling → 예: CPU가 70% 이상이면 2개 추가, 30% 미만이면 1개 제거
- Scheduled Scaling → 예: 매주 금요일 오후 5시에 최소 인스턴스를 10개로 증가
- Predictive Scaling → AI 기반 트래픽 예측 후 사전 확장
CloudWatch Alarms와 Auto Scaling 연동
- CloudWatch 알람을 활용하여 ASG 확장 가능
- CPUUtilization(평균 CPU 사용률), RequestCountPerTarget(요청 수), 네트워크 트래픽(In/Out) 등을 기준으로 확장
Auto Scaling에서 고려할 좋은 메트릭(Good metrics to scale on)
- CPUUtilization (CPU 사용률)
- EC2 인스턴스들의 평균 CPU 사용률이 일정 임계값을 초과하면 인스턴스를 추가하고, 낮아지면 제거.
- 예: 평균 CPU 사용률이 70%를 초과하면 2개 추가, 30% 미만이면 1개 제거
- RequestCountPerTarget (타겟당 평균 요청 수)
- 로드 밸런서(ALB, NLB)에서 각 백엔드 인스턴스가 처리하는 요청 수를 기준으로 확장.
- 예: EC2 한 대당 평균 요청 수가 1000건을 초과하면 확장, 500건 미만이면 축소
- Network In/Out (네트워크 트래픽)
- 애플리케이션이 CPU가 아닌 네트워크 사용량이 많은 경우 트래픽 양을 기준으로 확장.
- 예: EC2 한 대당 초당 500MB 이상의 네트워크 트래픽이 발생하면 확장
- Custom Metrics (사용자 정의 메트릭)
- CloudWatch를 통해 애플리케이션 맞춤형 지표를 추가하고 이를 기준으로 확장 가능.
- 예: 웹사이트의 활성 사용자 수, DB 쿼리 응답 시간, 메시지 대기열(SQS) 길이 등을 기준으로 확장.
Auto Scaling Cooldown (확장 안정화)
- 새로운 인스턴스가 추가된 후 일정 시간 동안 추가 확장을 방지하는 기능
- 기본값은 300초(5분)이며, AMI 최적화로 부팅 시간을 단축하면 대기 시간도 줄일 수 있음
'자격증 > aws' 카테고리의 다른 글
EC2 인스턴스 스토리지 (0) | 2025.02.24 |
---|---|
EC2 기초 (0) | 2025.02.23 |
IAM (0) | 2025.02.21 |