이번에는 ELB에 대해 알아보자!
한줄로 말하면 ELB는 Load Balancing임 트래픽을 분산을 도와줌!🧐

우선 로드밸런싱을 이해하기 위해서 확장성,가용성에 대해 알아보자!ㅎㅁㅎ
1. 확장성(Scalability)
- 애플리케이션 또는 시스템이 부하에 맞추어 적절하게 조절될 수 있는 능력
- 확장성에는 수평적 확장(Scale-Out)과 수직적 확장(Scale-Up)이 있음
✅ 수평적 확장 (Scale-Out)
- 여러 개의 인스턴스를 추가하여 부하를 분산하는 방식
- 탄력적인 확장 가능
- AWS 적용 예시: Auto Scaling Group을 멀티 AZ로 구성하여 트래픽 증가 시 자동 확장
✅ 수직적 확장 (Scale-Up)
- 인스턴스의 크기를 업그레이드하여 성능을 향상시키는 방식
- 하나의 애플리케이션이 처리하는 용량이 증가하는 경우 유용
- AWS 적용 예시: EC2 인스턴스를
t2.micro
→ t2.large
로 업그레이드 (1 vCPU / 1 GiB RAM → 2 vCPU / 8 GiB RAM)
2. 가용성(Availability) & 고가용성(High Availability)
- 가용성: 서비스가 중단되지 않고 계속 운영될 수 있는 능력
- 고가용성(HA, High Availability): 여러 가용 영역(AZ) 및 데이터 센터에 애플리케이션을 배포하여 장애에도 지속적인 운영을 가능하게 함
- AWS 적용 예시:
- 수평적 확장을 통해 인스턴스를 여러 데이터 센터(AZ)에 배포
- 로드 밸런서를 활용하여 트래픽을 분산
3. 로드 밸런서(ELB: Elastic Load Balancer)란?
- ELB는 AWS에서 제공하는 부하 분산(Load Balancing) 서비스
- 애플리케이션의 트래픽을 여러 개의 인스턴스로 분배하여 성능과 가용성을 향상시킴
- 자체적으로 로드 밸런서를 구축하는 것보다 간편하고, 자동 확장 및 복구 기능 제공
- 트래픽을 여러 가용 영역(AZ)과 백엔드 서버에 분산하여 장애 발생 시에도 지속적인 서비스 운영 가능
ELB를 사용해야 하는 이유
- 여러 개의 서버에 트래픽을 분산하여 부하를 줄임
- 인스턴스에 대한 헬스 체크(Health Check) 수행
- 여러 가용 영역(AZ) 간의 가용성 제공
- 퍼블릭 트래픽과 프라이빗 트래픽을 분리
✅ 헬스 체크(Health Check)란?
- 로드 밸런서가 백엔드 인스턴스가 정상적으로 요청을 받을 수 있는지 확인하는 기능
- 일반적으로 특정 포트 번호 + 루트 경로로 확인 (예:
example.com:443/health-check
)
- HTTP 상태 코드 기반으로 정상/비정상 판별
4. AWS 로드 밸런서(ELB) 종류 및 사용처
1️⃣ CLB (Classic Load Balancer)
- 지원 프로토콜: HTTP, HTTPS, TCP, SSL
- 오래된 방식으로 현재는 ALB, NLB가 더 많이 사용됨
2️⃣ ALB (Application Load Balancer)
- L7(Application Layer)에서 동작하며, HTTP/HTTPS 트래픽을 처리
- 트래픽을 요청의 경로나 호스트명 기반으로 라우팅 가능
- 사용 사례:
- URL 기반 라우팅이 필요한 경우:
example.com/api
→ API 서버, example.com/images
→ 이미지 서버
- 마이크로서비스 아키텍처: 여러 개의 서비스(API, 이미지 처리, 인증 서버 등)를 하나의 ALB에서 관리 가능
- WebSocket을 사용하는 서비스: 실시간 채팅, 알림 시스템 등에 활용
- AB 테스트나 버전 관리가 필요한 경우: 특정 요청을 A/B 그룹으로 나누어 트래픽을 분산할 수 있음
➡ 예제
example.com/api
요청은 API 서버로,
example.com/images
요청은 이미지 서버로,
example.com/chat
요청은 WebSocket 서버로 보내는 구조 가능
3️⃣ NLB (Network Load Balancer)
- L4(Network Layer)에서 동작하며, TCP/UDP 기반 트래픽을 처리
- ALB보다 빠른 응답 속도 제공 (ALB 400ms vs. NLB 100ms 이하)
- 사용 사례:
- 낮은 지연 시간이 중요한 금융 거래 서비스
- 대량의 실시간 데이터 처리 (IoT, 게임 서버 등)
- TCP/UDP 기반의 애플리케이션 트래픽 처리
4️⃣ GWLB (Gateway Load Balancer)
- 보안 장비(방화벽, IDS/IPS) 트래픽을 분산할 때 사용
- L3(Layer 3)에서 동작하며, 보안 솔루션 및 네트워크 트래픽 제어 목적
- 사용 사례:
- 트래픽을 특정 방화벽 장비로 전달해야 하는 환경
- 클라우드 내 보안 어플라이언스를 사용해야 하는 경우
5. 추가 개념
✅ Sticky Session (고정 세션)**
- 동일한 클라이언트의 요청을 항상 같은 인스턴스로 보내도록 설정
- CLB, NLB, ALB에서 지원
- 하지만, 특정 인스턴스에 트래픽이 집중될 수 있는 단점이 있음
✅ Cross-Zone Load Balancing
여러 가용 영역(AZ)에 걸쳐 트래픽을 균등하게 분배하는 기능
왜 필요한가?
- AWS에서 로드 밸런서를 사용할 때, 가용 영역(AZ)별로 배포된 인스턴스 개수가 다를 수 있음
- 일반적인 로드 밸런서는 각 AZ에 있는 인스턴스 개수만큼 트래픽을 분배하지만, Cross-Zone Load Balancing을 활성화하면 전체 인스턴스에 트래픽을 고르게 분산함!
- AZ 간 트래픽을 공유하여 부하를 분산
- ALB: 기본적으로 활성화되어 있으며, 추가 비용 없음
- NLB/GWLB: 기본적으로 비활성화, 활성화 시 AZ 간 데이터 전송 비용 발생
✅ SSL/TLS
- SSL (Secure Sockets Layer): 클라이언트와 로드 밸런서 간 암호화된 통신을 제공
- TLS (Transport Layer Security): SSL의 후속 버전으로 더 안전한 암호화 방식 제공
Tip
SSL와 TLS는 같은 역할을 수행함 하지만 SSL경우 보안 취약점이 더많아서 TLS를 쓰는 것이 좋다!
AWS 및 도메인 SSL 인증서 설정 시
AWS에서 SSL 인증서를 설정하면 사실상 TLS를 사용함
AWS ACM(AWS Certificate Manager)에서도 TLS 기반의 인증서만 발급 가능
Let’s Encrypt, DigiCert, GlobalSign 등의 인증서 제공업체도 SSL이라는 이름을 쓰지만 실제로는 TLS를 지원
[정리]
✅ SSL 인증서를 구매하거나 설정하더라도, 내부적으로는 TLS가 적용됨
✅ "SSL 인증서"라는 말이 남아 있지만, 실제로는 TLS를 사용하고 있음
✅ TLS 1.2 또는 TLS 1.3을 사용하는 것이 가장 안전함
✅ Connection Draining (연결 종료 대기)
사용 중인 서버가 꺼지거나 제거될 때, 기존 요청을 안전하게 처리하고 종료하는 기능
예제 상황
EC2 인스턴스가 트래픽을 처리하고 있음
이 인스턴스를 종료하거나, Auto Scaling이 축소되면서 제거될 예정
갑자기 종료하면 현재 진행 중인 요청(예: 결제, 파일 업로드 등)이 끊어질 위험
Connection Draining이 활성
- 인스턴스가 정지되거나 Unhealthy한 상태가 될 때, 기존 연결을 안전하게 종료하는 기능
- 요청을 즉시 끊지 않고 1초 ~ 3600초(기본 30초) 동안 대기 후 종료
- 설정을
0초
로 하면 즉시 종료됨
- 요청이 몇 초 이내에 끝나는지 확인 후 적절한 값 설정 필요