로드 밸런서 — ELB 4 종
로드 밸런서 — ELB 4 종
여러 백엔드 서버에 트래픽을 분산하고, 죽은 서버를 빼고, 인증서를 한 자리에서 관리하는 일은 거의 모든 웹 서비스의 공통 자리입니다. AWS 의 그 자리가 ELB (Elastic Load Balancing) 입니다 — 시기마다 다른 모양으로 4 종이 등장했습니다.
1. ELB 4 종에 대한 이야기
| 종류 | 출시 | 계층 | 자리 |
|---|---|---|---|
| Classic LB (CLB) | 2009 | L4 + L7 (혼합) | 옛 표준. 신규 비권장. |
| Application LB (ALB) | 2016 | L7 (HTTP · gRPC · WebSocket) | HTTP 기반 워크로드. |
| Network LB (NLB) | 2017 | L4 (TCP · UDP · TLS) | 매우 높은 처리량 · 정적 IP · 비-HTTP. |
| Gateway LB (GWLB) | 2020 | L3 (IP 패킷) | 네트워크 어플라이언스 (방화벽 · IDS). |
신규에는 ALB 또는 NLB 를 고르는 흐름이 권장됩니다.
2. L7 vs L4
L7 (Application Layer) — HTTP 메시지를 해석하고 라우팅합니다.
- URL 경로 기반 라우팅 (
/api/*→ A,/static/*→ B). - Host 헤더 기반.
- 쿠키 · 쿼리 파라미터.
- HTTPS 종단 (TLS termination).
- HTTP 헤더 변형 (
X-Forwarded-For·X-Forwarded-Proto).
ALB 가 이 자리. 응답 시간은 일반적으로 L4 보다 약간 깁니다 (파싱 비용).
L4 (Transport Layer) — TCP/UDP 연결만 봅니다. 페이로드 해석 없음.
- 매우 낮은 지연 · 높은 처리량.
- 정적 IP (Elastic IP 부착 가능).
- 클라이언트 IP 보존 (Proxy Protocol 옵션).
- TLS 종단도 가능 (NLB 의 TLS 리스너).
NLB 가 이 자리. 게임 서버 · MQTT · gRPC 직접 노출 · 소켓 서버.
L3 (Network Layer) — IP 패킷을 그대로 통과시켜 보안 어플라이언스 (방화벽 · IDS · DPI) 가 검사하게 합니다. GWLB 가 그 자리. Geneve 터널 사용.
3. Target Group
LB 뒤에 붙는 백엔드 묶음. 같은 Target Group 안의 인스턴스 · IP · Lambda 가 같은 헬스체크 규칙을 공유합니다.
| 타깃 종류 | 메모 |
|---|---|
| EC2 인스턴스 | EC2 ID 단위 |
| IP | VPC 안 임의 IP (RDS 도 가능) |
| Lambda | ALB 만, 함수 ARN 등록 |
| ALB | NLB 의 타깃으로 ALB (2021~) |
ALB 는 한 LB 에 여러 Target Group 을 둘 수 있고, 리스너 규칙으로 라우팅합니다.
4. Health Check · Sticky Session
Health Check — 지정 경로/포트로 주기적 검사. healthy 한 타깃에만 트래픽을 보냅니다.
- HTTP
/health200 응답 확인. - TCP 연결 확인 (NLB 기본).
- threshold 만큼 연속 성공해야 healthy.
엔드포인트 자체는 가벼워야 합니다. 무거운 헬스체크는 의도치 않은 부하를 만듭니다.
Sticky Session — 같은 클라이언트의 후속 요청을 같은 백엔드로:
- ALB — 자체 발행 쿠키 (
AWSALB) 또는 애플리케이션 쿠키. - CLB —
AWSELB쿠키.
세션 상태가 인스턴스 메모리에 있을 때만 의미. 외부 세션 저장소 (Redis) 가 있으면 sticky 는 불필요.
5. X-Forwarded-For 와 클라이언트 IP
ALB 는 TLS 종단 + 새 TCP 연결을 백엔드로 만듭니다. 백엔드 입장에서 source IP 는 ALB 의 IP. 클라이언트 IP 는 X-Forwarded-For 헤더에 추가됩니다.
NLB 는 기본 모드에서 source IP 를 보존합니다. 다만 SG 평가는 백엔드 SG 가 클라이언트 IP 를 직접 보게 됩니다 (2023 부터 NLB SG 옵션 추가).
6. ACM · TLS 종단
aws acm request-certificate \
--domain-name example.com \
--subject-alternative-names www.example.com \
--validation-method DNS
ALB · NLB (TLS 리스너) 에 인증서를 부착하고 백엔드는 평문 또는 자체 인증서. 내부 통신도 암호화하려면 backend 에 별도 인증서 + LB 에서 SSL passthrough (NLB) 또는 re-encrypt (ALB).
7. 다른 LB · 프록시 비교
| 도구 | 카테고리 | 메모 |
|---|---|---|
| HAProxy (2001) | LB | 매우 빠른 L4/L7. 자체 호스팅 표준. |
| nginx (2004) | 리버스 프록시 + LB | 풍부한 모듈. 정적 파일 · 캐시 강함. |
| traefik (2015) | 리버스 프록시 | 컨테이너 라벨 기반 동적 설정. |
| Caddy (2015) | 리버스 프록시 | 자동 HTTPS 표준. |
| Envoy (2016) | 프록시 | service mesh 기반. xDS API. |
| ALB · NLB · GWLB | 매니지드 | AWS 통합. 운영 부담 적음. |
비교의 결정 요인:
- 운영 부담 — 매니지드 (ELB) vs 자체 호스팅 (HAProxy · nginx).
- 자동 HTTPS — Caddy.
- service mesh — Envoy + Istio · Linkerd.
- 컨테이너 라벨 기반 라우팅 — traefik · Caddy + Docker.
8. ALB + Auto Scaling
Route 53 (Alias) → ALB → Target Group (Auto Scaling Group)
↓
EC2 인스턴스 N 대 (헬스체크)
ASG 가 인스턴스를 늘리면 자동으로 Target Group 에 등록. unhealthy 가 되면 교체.
NLB + 정적 IP — 방화벽이 NLB 의 정적 IP 를 화이트리스트로 잡는 자리에. ALB 는 IP 가 변동되어 동일 흐름이 어렵습니다 (Global Accelerator 결합 또는 NLB → ALB 패턴).
ALB 라우팅 규칙 예시:
Host: api.example.comANDPath: /v1/*→ API Target GroupHost: web.example.com→ Web Target GroupPath: /admin/*AND Cognito 인증 통과 → Admin Target Group
규칙은 우선순위로 평가됩니다. 첫 일치가 적용.
9. 자주 걸리는 자리
idle timeout 미스매치 — ALB 기본 60 초. 백엔드의 keep-alive 가 더 짧으면 연결 재사용 시 1 회성 오류. 백엔드 keep-alive 를 ALB 보다 길게.
헬스체크 경로의 무거움 — DB 까지 검사하는 헬스체크가 의외로 비용을 만듭니다. 가벼운 /health + 별도 deep check 분리.
NLB 의 SG 부재 (옛 동작) — 2023 이전 NLB 는 SG 없음. 2023 이후 SG 옵션 추가.
WebSocket 의 idle timeout — 메시지가 오래 끊기면 연결이 끊깁니다. heartbeat 또는 timeout 늘림.
HTTPS 백엔드의 인증서 검증 — ALB → backend 가 self-signed 면 검증 실패.
ALB 의 호스트 헤더 — 백엔드가 가상 호스트를 본다면 X-Forwarded-Host 또는 정확한 Host 전달 점검.
CLB 잔존 — 옛 인프라의 CLB 는 새 기능 제한. 점진적 ALB 마이그레이션.
하고픈 말
LB 의 90% 자리는 ALB 또는 자체 Caddy/nginx 가 답입니다. NLB 는 정적 IP · 매우 높은 처리량 · 비-HTTP 같은 명확한 이유가 있을 때. CLB 는 새 인프라에 도입하지 않는 흐름이 표준이 됐습니다.
Next
- ecs-fargate
- localstack-and-ministack
ELB 사용자 가이드 · ALB 라우팅 규칙 · ACM · HAProxy · nginx · Envoy · traefik · PROXY protocol v2 를 참고합니다.