이번 포스팅에서는 지난 포스팅보다 Elastic Load Balancer(ELB), EC2 Auto Scaling에 대해 좀 더 깊게 다루어 보겠다.
본격적으로 ELB에 대해 살펴보기 전에, 먼저 OSI(Open Systems Interconnection) 7계층에 대해 간단히 짚고 넘어가자.
ELB는 네트워크의 특정 계층에서 동작하기 때문에, 이를 제대로 이해하려면 OSI 7계층에 대한 기본적인 개념을 알고 있는 것이 좋다.
OSI 모델은 네트워크 지식의 기본 중의 기본이니, 가볍게라도 꼭 읽고 넘어가자
네트워크 통신 과정을 7단계로 나눠서 설명한 모델
각 계층은 서로 역할을 분리해서, 통신 시스템을 표준화하고 쉽게 이해하게끔 만든 것
아래는 OSI 7계층을 표로 정리한 것이다. 이후 설명할 ELB와 연관이 있는 계층은 별도로 표시해두었다.
| 계층 | 이름 | 설명 | 예시 |
|---|---|---|---|
| 7 | 응용 계층 (Application) ⭐ | 사용자와 가장 가까운 계층. 애플리케이션이 네트워크와 상호작용 | HTTP, HTTPS |
| 6 | 표현 계층 (Presentation) | 데이터 형식 변환, 암호화/복호화 처리 | JPEG, TLS, SSL |
| 5 | 세션 계층 (Session) | 세션 관리, 연결 유지 | 로그인 세션 |
| 4 | 전송 계층 (Transport) ⭐ | 데이터 전송의 신뢰성 보장, 포트번호 기반 통신 | TCP, UDP |
| 3 | 네트워크 계층 (Network) | 목적지 IP 결정, 라우팅을 통해 다른 네트워크 간의 통신 관리 | IP, ICMP |
| 2 | 데이터 링크 계층 (Data Link) | MAC 주소 기반 전송, 프레임 처리 | Ethernet, 스위치 |
| 1 | 물리 계층 (Physical) | 전기 신호, 하드웨어 연결 | 랜선, 허브 |
Elastic Load Balancer(ELB)는 특정 리소스에 트래픽이 몰릴 경우 이를 여러 대상으로 분산시켜 과부하를 막아주는 AWS의 트래픽 분산 서비스이다.
Application Load Balancer
- OSI 7계층인 응용 계층에서 동작
- HTTP나 HTTPS의 트래픽을 처리하는데 사용
- HTTPS 사용 시 SSL/TLS 인증서를 배포해야 함
- 주로 웹 애플리케이션이나 서비스에 적합
Network Load Balancer
- OSI 4계층인 전송 계층에서 동작
- 주로 TCP, UDP, TLS에 대한 트래픽을 처리
- 대용량 트래픽을 신속하게 처리하는데 적합
- 고정 IP 주소 할당 가능
- 리스너 규칙 설정 없음
- TLS 프로토콜 사용 시 SSL/TLS 인증서 배포해야 함
Gateway Load Balancer
- 주로 OSI 3~4계층에서 동작
- 3계층에선 Gateway Load Balancer Endpoint
- 4계층에선 Gateway Load Balancer
- GENEVE protocol을 사용하여 트래픽을 캡슐화하여 보안 인스턴스에 전송
- GENEVE protocol이란 네트워크 트래픽을 캡슐화하여 다른 네트워크로 전달하기 위한 터널링 프로토콜
- 보안 중심 아키텍처를 설계할 때 주로 사용
ELB는 크게 Listenter와 Target Group으로 구성된다.
Listener는 특정 프로토콜과 포트를 지정하여 규칙을 생성하고, 들어오는 트래픽이 이 규칙들과 부합하는지 판단하여 타겟그룹으로 트래픽을 전달할지 판단한다.
Listener 규칙 (ALB 기준)
- host-header
- 요청의 도메인 or 서브도메인 기반 라우팅
- path-pattern
- 요청의 URL 경로 기반 라우팅 (예: /audio, /video)
- http-header
- 요청의 HTTP 헤더 값 기반 라우팅
- http-request-method
- 요청의 HTTP 메서드 (GET, POST 등) 기반 라우팅
- query-string
- 요청 URL의 쿼리 파라미터 기반 라우팅
- source-ip
- 요청을 보낸 클라이언트 IP 기반 라우팅
Target Group은 리스너를 통해 들어온 트래픽이 최종적으로 전달되는 대상이다 아래는 Target Group으로 지정할 수 있는 대상들이다.
- EC2 인스턴스
- EC2 Auto Scaling Group
- IP address
- Lambda함수(ALB만 연결 가능)
- Application Load Balancer(NLB만 연결 가능)
AWS콘솔에서 Target Group생성 시 설정하는 속성에 대해 상세히 살펴보자. 아래 사진은 ALB의 Target Group 생성 시 설정해야 하는 항목들이다.

등록 취소 지연 (Deregistration delay / Connecting Draining)
- Auto Scaling 축소, 수동 제거 등으로 인스턴스가 타겟 그룹에서 등록 취소 될 때, 해당 인스턴스로 더 이상 새로운 요청을 보내지 않도록 하는 기능
- 이미 진행 중인 요청이 있었다면, 설정된 시간 동안은 연결을 유지하며 처리를 유예
고정 세션 (Stickiness Sessions / Session Affinity)
- 동일한 클라이언트가 항상 동일한 인스턴스로 요청을 보낼수 있도록 유지해주는 기능
- 세션 데이터를 잃지 않으려는 상태 저장 애플리케이션에 적합
- ALB에 사용 시 클라이언트에서 쿠키를 지원해야 함
교차 영역 로드 밸런싱(Cross-Zone Load Balancing)
- 로드 밸런서가 자신이 속한 가용 영역(AZ) 뿐만 아니라, 다른 가용 영역의 인스턴스에도 트래픽을 분산시킬 수 있도록 하는 기능
- 활성화 시, 예를 들어 가용 영역 A에만 요청이 들어와도, B, C 영역의 인스턴스에도 균등하게 트래픽을 분산시킬 수 있음
- 비활성 시, 각 가용 영역으로 들어온 요청은 그 영역 안에 있는 인스턴스에게만 전달됨
느린 시작 기간(Slow start duration)
- 새로 등록된 인스턴스에는 트래픽을 점진적으로 늘려서 천천히 보낼 수 있는 기능
- 인스턴스가 새로 추가되면 갑자기 많은 트래픽을 받게 되고, 인스턴스가 과부하를 겪을 수 있어 필요한 기능
알고리즘
- 라운드 로빈 (Round Robin)
- 요청을 순차적으로 모든 인스턴스에 고르게 분산
- 최소 연결 (Least Outstanding Requests)
- 현재 요청이 가장 적게 처리되고 있는 인스턴스로 새 요청을 전송
등록 취소시 연결 종료 (Connection termination on deregistration)
- 대상이 등록 해제 될 때, 기존 연결을 바로 종료할지 여부
프록시 프로토콜 v2
- 클라이언트의 원래 IP 주소 및 포트 정보를 NLB ➡️ 대상 서버로 전달하는 데이터 헤더
- 대상 서버가 클라이언트의 진짜 IP를 알 수 있음
클라이언트 IP 주소 보존 (Preserve client IP addresses)
- 들어오는 모든 트래픽의 클라이언트 IP를 애플리케이션으로 전달
Auto Scaling은 애플리케이션의 수요에 따라 인스턴스 수가 확장되거나 축소하는 기능이다.
이 때 인스턴스가 확장되면 Scale out, 축소 되면 Scale in이라고 불린다.
아래에서는 Auto Scaling을 사용할 때 설정해야 할 동적 조정 정책, 조정 휴지와 인스턴스 워밍업, 웜 풀, 유지 관리 정책 등의 기본 개념을 간단히 알아보자.
대상 추적 조정(Target Tracking Scaling)
- 지정한 지표의 설정값을 기준으로 Auto Scaling 그룹을 자동 조정 (예: 평균 CPU 사용률, ALB요청 수 등)
단계 조정 (Step Scaling)
- CloudWatch 알림 기준값을 기준으로 초과/미달한 정도에 따라 단계적으로 인스턴스 수를 조정
- 크기 조정 중 및 상태 확인 교체 중이어도 추가 알림에 즉시 응답
단순 조정 (Simple Scaling)
- CloudWatch 알림 기준값을 기준으로 초과/미달한 정도에 따라 인스턴스 수를 조정
- 크기 조정 및 상태확인 교체 중에는 알림에 응답하지 않음
Auto Scaling에서는 인스턴스가 너무 자주 생성되거나 종료되는 걸 방지하기 위해 스케일링 타이밍을 조절하는 기능들을 제공한다.
대표적으로 조정 휴지(Scaling Cooldowns)와 인스턴스 워밍업(Instance Warm-up)이 있다.
조정 휴지 (Scaling Cooldowns)
- Simple Scaling 정책에서만 사용되는 대기 시간
- 스케일링 작업이 실행된 후 일정 시간 동안 추가적인 스케일링 작업을 일시적으로 차단
인스턴스 워밍업 (Instance Warm-up)
- Stemp Scaling, Target Tracking Scaling 정책에서만 적용
- 인스턴스가 새로 시작되면 워밍업 시간을 가짐 (기본적으론 활성화 X)
- 워밍업 기간동안 지표 계산 및 스케일링 범위에서 제외 됨
종료 전 시작
- 정상 인스턴스를 종료하기 전에, 새 인스턴스를 먼저 시작
- 가용성이 최우선으로 보장되어야 하는 애플리케이션에 적합
종료 및 시작
- 기존 인스턴스를 먼저 종료한 후, 새 인스턴스를 시작
- 항상 지정된 용량을 초과하지 않음
- 가용성보다 비용관리가 우선인 애플리케이션에 적합
사용자 지정 동작
- 인스턴스 교체 로직을 사용자가 직접 지정
웜 풀 (Warm Pool)🏊
EC2 인스턴스는 부팅과 초기화 과정에서 시간이 걸리기 때문에 트래픽 급증 시 빠르게 대응하기 위한 준비된 인스턴스를 미리 대기시켜 두는 공간 (웜풀에 있는 EC2 인스턴스들은 하이버네이트 상태로 대기)