
AWS 로드밸런서 완전 정복: CLB, ALB, NLB — 트래픽 분배의 모든 것
서버 1대로 버티던 시절은 끝났다. 사용자가 늘면 서버를 늘려야 하고, 서버를 늘리면 트래픽을 나눠야 한다. CLB에서 ALB, NLB까지 — 로드밸런서의 역사, 작동 원리, 세 가지 타입의 차이, 실전 선택 가이드를 비유와 사례로 풀어본다.

서버 1대로 버티던 시절은 끝났다. 사용자가 늘면 서버를 늘려야 하고, 서버를 늘리면 트래픽을 나눠야 한다. CLB에서 ALB, NLB까지 — 로드밸런서의 역사, 작동 원리, 세 가지 타입의 차이, 실전 선택 가이드를 비유와 사례로 풀어본다.
서비스가 성장하면 반드시 만나는 벽이 있다. 단일 서버의 한계.
웹 서버 1대가 동시에 처리할 수 있는 요청은 한정적이다. Node.js 서버라면 수천 건, Java 서버라면 수백 건. 사용자가 그 이상 몰리면 응답이 느려지다가, 결국 서버가 죽는다.
해법은 두 가지다:
수직 확장에는 한계가 있다 (세상에서 가장 큰 서버도 한계가 있다). 수평 확장이 클라우드 시대의 표준이다. 그런데 서버가 5대가 됐다면 — 사용자의 요청을 어떤 서버로 보내야 할까?
이것이 로드밸런서(Load Balancer) 의 역할이다.
인터넷 초창기, 대형 웹사이트들은 전용 하드웨어 로드밸런서를 사용했다. F5 Networks의 BIG-IP, Citrix의 NetScaler 같은 물리 장비를 데이터센터에 설치했다.
HAProxy(2000)와 NGINX(2004)가 소프트웨어 로드밸런서의 시대를 열었다. 일반 서버에 설치하여 로드밸런싱이 가능해졌다. 비용은 대폭 줄었지만, 여전히 직접 설치·설정·관리해야 했다.
2009년, AWS가 Elastic Load Balancing(ELB) 을 출시했다. 관리형 로드밸런서 — 설치·패치·확장을 AWS가 알아서 한다.
로드밸런서를 이해하는 핵심: 어떤 계층(Layer)에서 동작하는가.
로드밸런서의 가장 중요한 기능 중 하나: 헬스체크(Health Check).
주기적으로 백엔드 서버에 "살아있니?"를 물어본다. 응답이 없거나 에러를 반환하면 해당 서버를 목록에서 제외하고, 나머지 서버로만 트래픽을 보낸다. 서버가 복구되면 다시 목록에 추가한다.
/health 엔드포인트는 단순히 200을 반환하는 것이 아니라, DB 연결, 캐시 연결, 필수 의존성을 확인하고 응답해야 한다. 서버 프로세스는 살아있지만 DB 연결이 끊어진 경우, 단순 200 응답은 "정상"으로 판단해 장애 트래픽을 계속 보내게 된다.2009년 출시된 AWS 최초의 로드밸런서. L4와 L7을 모두 지원하지만 기능이 제한적이다.
CLB의 한계:
AWS는 2023년부터 CLB 대신 ALB/NLB를 공식 권장하며, 신규 생성을 비권장한다.
2016년 출시. HTTP/HTTPS 트래픽에 특화된 L7 로드밸런서. 이 시리즈에서 계속 등장한 ALB가 바로 이것이다.
ALB의 핵심 기능:
1. 경로 기반 라우팅:
/api/* → API 서버 타겟 그룹
/admin/* → 관리자 서버 타겟 그룹
/static/* → S3 (리다이렉트)
/* → 웹 서버 타겟 그룹
하나의 ALB로 여러 서비스에 트래픽을 분배할 수 있다. CLB에서는 서비스마다 별도 LB가 필요했다.
2. 호스트 기반 라우팅:
api.example.com → API 타겟 그룹
www.example.com → 웹 타겟 그룹
admin.example.com → 관리 타겟 그룹
하나의 ALB에서 여러 도메인을 처리할 수 있다.
3. 다양한 타겟:
4. SSL/TLS 종료: HTTPS 암호화/복호화를 ALB에서 처리. 백엔드 서버는 HTTP로 통신하면 되므로, 서버의 CPU 부담이 줄어든다. ACM(AWS Certificate Manager)에서 무료 SSL 인증서를 발급하여 ALB에 연결.
5. 스티키 세션: 같은 사용자의 요청을 항상 같은 서버로 보내는 기능. 세션 기반 웹 앱에서 필요. (하지만 가능하면 세션을 서버 외부(Redis, DynamoDB)에 저장하는 것이 더 좋은 설계)
2017년 출시. TCP/UDP/TLS 트래픽에 특화된 L4 로드밸런서.
ALB와 NLB의 가장 큰 차이:
| ALB | NLB | |
|---|---|---|
| 계층 | L7 (HTTP/HTTPS) | L4 (TCP/UDP/TLS) |
| 성능 | 초당 수만 요청 | 초당 수백만 요청 |
| 지연시간 | 밀리초 | 마이크로초 (~100μs) |
| IP | 동적 IP | 고정 IP (Elastic IP 할당 가능) |
| SSL 종료 | ALB에서 | NLB에서 또는 백엔드에서 |
| 프로토콜 | HTTP, HTTPS, WebSocket | TCP, UDP, TLS |
| 콘텐츠 라우팅 | 경로, 호스트, 헤더 기반 | 포트 기반만 |
| 주요 용도 | 웹 API, 웹사이트 | 게임 서버, IoT, 금융 거래 |
| 비용 | NLCU 기반 | NLCU 기반 (보통 ALB보다 저렴) |
| 기준 | CLB | ALB | NLB |
|---|---|---|---|
| 출시 | 2009 | 2016 | 2017 |
| 계층 | L4 + L7 (제한적) | L7 | L4 |
| 경로 라우팅 | ✗ | ✓ | ✗ |
| 호스트 라우팅 | ✗ | ✓ | ✗ |
| WebSocket | ✗ | ✓ | ✓ (TCP) |
| HTTP/2 | ✗ | ✓ | ✗ |
| gRPC | ✗ | ✓ | ✓ (TCP) |
| 고정 IP | ✗ | ✗ | ✓ |
| Lambda 타겟 | ✗ | ✓ | ✗ |
| 성능 | 낮음 | 중간 | 매우 높음 |
| 지연시간 | ms | ms | μs |
| 현재 상태 | 비권장 | 표준 | 특수 용도 |
로드밸런서는 DDoS 공격의 첫 번째 방어선 역할을 한다. 모든 외부 트래픽이 LB를 거치므로, 여기서 악성 트래픽을 차단할 수 있다.
| 항목 | 비용 (서울) | 설명 |
|---|---|---|
| 시간당 비용 | 18.14/월) | LB가 존재하는 시간 |
| LCU (Load Balancer Capacity Unit) | $0.008/LCU-시간 | 실제 사용량 기반 |
LCU는 다음 4가지 중 가장 높은 값으로 계산된다:
| 시나리오 | ALB | API Gateway (HTTP) | NLB |
|---|---|---|---|
| 기본 비용 (트래픽 0) | ~$18/월 | $0/월 | ~$18/월 |
| 월 100만 요청 | ~$19 | ~$1 | ~$18.5 |
| 월 1억 요청 | ~$25 | ~$100 | ~$20 |
| 월 10억 요청 | ~$80 | ~$1,000 | ~$40 |
소규모: API Gateway가 가장 저렴 (트래픽 없으면 0원) 중규모: ALB가 균형 잡힌 선택 대규모: NLB가 가장 저렴, ALB가 그 다음. API Gateway는 비쌈
이 시리즈에서 반복 등장한 패턴:
CloudFront → ALB → ECS Service (타겟 그룹)
ALB가 ECS 태스크를 타겟 그룹에 자동으로 등록/해제한다. 태스크가 스케일 아웃되면 자동으로 타겟에 추가, 종료되면 자동 제거.
하나의 ALB로 여러 마이크로서비스에 라우팅:
새 버전(그린)을 별도 타겟 그룹에 배포하고, ALB의 리스너 규칙에서 트래픽 가중치를 조절하여 점진적으로 전환:
고정 IP가 필요하면서 HTTP 라우팅도 필요한 경우:
파트너 시스템 → NLB (고정 IP) → ALB (HTTP 라우팅) → ECS
NLB가 고정 IP를 제공하고, 뒤의 ALB가 HTTP 수준의 라우팅을 처리한다.
Netflix는 ALB + NLB 조합으로 전 세계 수억 사용자의 트래픽을 처리한다. 스트리밍 트래픽은 NLB(TCP 수준, 대용량), API 트래픽은 ALB(HTTP 라우팅)로 분리한다.
Slack의 WebSocket 기반 실시간 메시지 전달은 ALB의 WebSocket 지원을 활용한다. 수백만 동시 연결을 ALB가 분배하고, 연결이 끊어지면 자동으로 다른 서버에 재연결한다.
예. 역할이 다르다.
전형적 구성: 사용자 → CloudFront → ALB → ECS/EC2
된다. 경로 기반 + 호스트 기반 라우팅으로 수십 개의 서비스를 하나의 ALB에서 처리할 수 있다. ALB당 최대 100개의 규칙을 설정할 수 있다. 비용 면에서도 서비스마다 ALB를 만드는 것보다 유리하다.
바꿔야 한다. AWS가 공식적으로 CLB 사용 중단을 권고한다. AWS 콘솔에서 마이그레이션 마법사를 제공하므로 비교적 수월하게 전환할 수 있다.
이 시리즈에서 구축한 아키텍처를 다시 보면, ALB는 모든 곳에 있다:
로드밸런서는 사용자에게 보이지 않는다. 사용자는 https://api.example.com에 요청을 보낼 뿐, 그 뒤에서 5대의 서버 중 가장 여유 있는 서버로 트래픽이 분배되고, 죽은 서버는 자동으로 제외되고, 새 서버가 추가되면 자동으로 포함되는 — 이 모든 것이 ALB가 조용히 처리하는 일이다.
코어닷투데이의 AI 서비스에서도 ALB는 필수 인프라다. AI 추론 API에 대한 요청이 ALB를 통해 여러 ECS 태스크에 분배되고, 헬스체크로 비정상 태스크가 자동 제외되며, 트래픽 급증 시 ECS Auto Scaling과 연동하여 자동 확장된다. 보이지 않지만, 없으면 안 되는 교통경찰.