클라우드의 확장성, 탄력성, 고가용성 이란?
확장성
애플리케이션을 스케일(확장)한다는 것은 큰 부하(트래픽)에 적응하여 그것을 처리 가능하다는 뜻.
클라우드 확장성 2가지
- 수직 확장
- AWS에서 수직 확장이 가능하다는 것은 EC2 인스턴스의 크기를 증가할 수 있다는 뜻. DB와 같은 분산되지 않는 시스템에서 사용하는 방식.
- 이러한 하드웨어 확장 방식에는 한계가 존재한다.
- 수평 확장
- EC2 인스턴스의 사이즈를 늘리는 대신, 인스턴스 또는 시스템의 숫자를 늘리는 것이다.
현대적인 애플리케이션이라면, 수평확장성을 염두에 두고 설계 및 개발을 진행해야한다. AWS에서는 이것이 매우 쉽게 가능하다. AWS EC2와 ASG 덕분이다.
고가용성
- 수평확장과 잘 어울린다.
- 애플리케이션을 최소 두 군데에서 실행하는 것을 의미한다.
- 목적 : 데이터 센터의 손실과 같은 재앙 상황에서 살아남는 것이다.
탄력성
- 수요 ( 수신하는 로드 ) 에 따라 시스템을 확장 및 축소하는 클라우드의 특성.
확장성 vs 탄력성 ( vs 민첩성 )
이 단어들의 차이를 명확히 파악하자.
- 확장성 : 시스템에 더 큰 부하를 수용하게 하는 것.
- 탄력성 : 수요에 따라 시스템이 자동으로 확장 및 축소 되는 것.
- 민첩성 : 리소스를 매우 빠르게 생성 및 삭제하는 것.
ELB - Elastic Load Balancing
ELB는 Elastic Load Balancing의 약자로, 로드 밸런서를 포함한다.
로드 밸런서란? -> 인터넷 트래픽을 다운 스트림의 여러 서버로 전달하는 서버를 뜻한다. 부하 분산 기능이다.
ELB 특징
- AWS에서 관리하며 여기에 로드 밸런서가 존재한다. 로드 밸런서 뒤에는 여러 개의 EC2 인스턴스가 존재한다.
- 애플리케이션에 대한 DNS 호스트 이름인 단일 액세스 지점을 노출한다.
- 정기적으로 인스턴스 상태를 확인하고 문제가 있는 곳으로는 트래픽을 보내지 않는다.
- HTTPS를 제공한다.
- AWS가 ELB의 모든 것을 책임진다. (ELB 업그레이드, 유지보수, 고가용성 등등)
- 개발자가 해야할 건 유일하게 ELB 동작에 관한 몇가지 구성하는 것 뿐이다.

해당 이미지는 ELB 서비스를 활용한 아키텍처이다. User는 ELB에 의해 노출되는 경로로 요청을 진행하게 되고, 이때 ELB에 의해 각각의 연결되어있는 EC2 인스턴스에 부하가 분산된다.
ELB 종류
ELB에는 4가지 종류가 존재하며, 각각의 종류를 상황에 맞게 ELB를 선택하면 좋다.
- ALB (Application Load Balancer)
- HTTP,HTTPS 전용 ELB, 계층 7 유형의 로드밸런서이다. 정적 DNS(URL)를 제공한다.
- NLB (Network Load Balancer)
- 계층 4 유형의 로드밸런서이다. TCP,UDP를 포함, 초고속 성능을 가진다. 정적 IP를 제공한다. 낮은 지연시간으로 초당 수백만개의 요청을 처리한다.
- GLB (Gateway Load Balancer)
- 계층 3 유형의 로드밸런서이다. 트래픽을 EC2 인스턴스에서 과니하는 방화벽으로 라우팅하여 침입감지, 심층 패킷 검사 등을 실행한다.
- CLB (Classic Load Balancer)

해당 이미지의 ELB 서비스 종류에 대한 각각의 아키텍처를 참고하면 이해가 잘된다.
ASG - Auto Scaling Group
우리는 로드밸런서를 통해 트래픽을 여러 EC2 인스턴스로 분산시키는 과정을 알아보았다. 그럼 이 여러 EC2 인스턴스는 어떻게 자동으로 만들 수 있을까????
정답 : ASG
- AWS의 ASG를 사용하면 된다.
- 스케일 업,다운(수직확장) 또는 아웃,인(수평확장)의 역할을 해내어 각 상황에 맞게 EC2 인스턴스를 최소, 최대로 보장한다.
- 그래서 ELB와 ASG는 보통 함께 작용하여 대규모 트래픽에 대한 시너지를 낸다.
- ASG는 항상 최적의 용량에서 실행된다. 엄청난 탄력성을 지닌다. 이것은 클라우드의 기본 원칙과도 같다.

ASG는 EC2 인스턴스의 최소 개수와 평균 개수, 최대 개수를 세팅하여 EC2 인스턴스를 운영한다.

ELB 서비스와의 시너지를 알아보자. 트래픽이 발생하면 트래픽의 규모에 따라 EC2 인스턴스를 ASG가 자동으로 스케일 아웃 했다가 스케일 인 했다가 하는 등 탄력적으로 관리하게 된다.
ASG - 전략
ASG 전략에는 총 4가지가 존재한다.
- 단순,단계 스케일링
- 예를 들어, CPU사용량이 5분 동안 70%를 넘으면 ASG 용량에 유닛(EC2) 2개를 추가 or 10분 동안 30% 미만이라면 ASG에서 유닛(EC2) 1개를 제거.
- 대상 추적 스케일링
- ASG의 모든 EC2 인스턴스의 평균 CPU 사용율을 40%로 유지하고자 한다면 이를 위해 자동으로 조정하는 것.
- 예약 스케일링
- 변경 사항을 미리 아는 것, 사용자 패턴을 기반으로 확장을 예약하는 전략이다.
예를 들어, 사람들이 금요일 5pn에 축구경기 베팅을 한다고 하면 금요일 5pm에 맞춰서 EC2 인스턴스 최소 용량을 10까지 높이는 방식.
- 예측 스케일링
- 머신 러닝을 활용하여 트래픽을 미리 예측하는 방식. 과거 트래픽을 확인하는 알고리즘이 있고 과거의 패턴을 기반으로 트래픽을 예측한다.
- 그래서 예측을 기반으로 올바른 수의 EC2 인스턴스를 자동으로 세팅한다.
따라서, 시간에 따른 패턴이 존재하고, 스케일링 유형 별 전략을 신경 쓰고 싶지 않다면 예측 스케일링이 정답이다. 매우 유용하다!
ELB 및 ASG - 요약
- 각 단어의 뜻과 차이
고가용성 : 여러 가용영역에 걸쳐서 애플리케이션을 보유
확장성 : 수직 - 인스턴스 크기 조절, 수평 - 인스턴스 개수 조절
탄력성 : 수용에 따라 확장 및 축소할 수 있는 기능
민첩성 : 리소스를 미우 빠르게 생성 및 삭제하는 기능
-
ELB
로드밸런서는 ELB서비스에 있고, 이를 통해 EC2 인스턴스에 트래픽 분산이 가능하다. 여러 가용영역에 분산되어 운영도 가능하다.
EC2 상태를 확인한다.
4가지 타입이 존재한다.
-
ASG
애플리케이션을 구성하는 EC2 인스턴스의 탄력성을 구현할 수 있어서 부하를 여러 A~Z에 걸쳐 분산하고 적절히 스케일링 할 수 있다.
따라서, 시스템 수요에 따라 이러한 EC2 인스턴스를 스케일링하고 비정상 인스턴스를 교체할 수 있다.
ASG와 ELB는 긴밀하게 통합되어 있다.