AWS Elastic Load Balancer 정리

Published: by Creative Commons Licence

AWS Elastic Load Balancer 정리

웹 서비스나 API를 운영할 때 한 대의 서버에 모든 요청이 몰리면 응답이 느려지고, 서버가 죽으면 서비스 전체가 중단된다. 로드 밸런서(Load Balancer) 는 들어오는 네트워크 트래픽을 여러 대상(서버, 컨테이너, IP) 으로 나눠 보내는 역할을 한다.

AWS에서는 이 기능을 Elastic Load Balancer(ELB) 라는 관리형 서비스로 제공한다. 서버를 직접 설치·운영할 필요 없이, AWS 콘솔이나 API로 생성하고 헬스 체크(Health Check) · 자동 장애 복구 · 트래픽 분산 을 설정할 수 있다.

이 글은 ELB의 개념, 세 가지 종류(ALB / NLB / GWLB), 핵심 구성 요소(Listener, Target Group 등), 그리고 실무에서 어떤 상황에 무엇을 쓰면 좋은지 한 곳에 정리한다.


0. 개요 한눈에 보기

먼저 ELB가 트래픽을 어떻게 받아서 백엔드로 넘기는지부터 짚고 간다.

┌─────────────┐                    ┌─────────────────────┐                    ┌─────────────┐
│   Client    │ ─── HTTP/HTTPS ──▶ │  Elastic Load       │ ─── 분산 라우팅 ──▶ │  EC2 / ECS  │
│ (브라우저 등) │                    │  Balancer (ELB)     │                    │  / IP 대상   │
└─────────────┘                    └─────────────────────┘                    └─────────────┘
                                              │
                                              ▼
                                   비정상 대상은 자동 제외
                                   정상 복구 시 다시 트래픽 전달
구성 요소 역할
Listener 클라이언트 요청을 어떤 포트·프로토콜로 받을지 정의 (예: HTTPS 443)
Listener Rule URL 경로, 호스트명 등 조건에 따라 어느 Target Group으로 보낼지 결정
Target Group 실제 트래픽을 받을 대상(EC2, IP, Lambda 등) 묶음
Health Check 대상이 정상인지 주기적으로 확인 → 비정상이면 트래픽 중단
ELB 종류 OSI 계층 대표 용도
ALB (Application Load Balancer) Layer 7 (HTTP/HTTPS) 웹/API, 경로·호스트 기반 라우팅
NLB (Network Load Balancer) Layer 4 (TCP/UDP) 초저지연, 고정 IP, 대용량 TCP
GWLB (Gateway Load Balancer) Layer 3 (IP) 방화벽·IDS 등 가상 어플라이언스 삽입

ELB는 단일 DNS 이름 하나로 여러 대상에 트래픽을 분산한다. 클라이언트는 백엔드 서버 IP를 직접 알 필요가 없다.


1. Load Balancer란 무엇인가?

1-1. 기본 개념

로드 밸런서는 네트워크 트래픽을 여러 대상으로 분산하는 서비스다.

효과 설명
가용성(Availability) 한 대가 죽어도 나머지 대상이 요청을 처리 → 서비스 중단 최소화
확장성(Scalability) 서버를 추가하면 로드 밸런서가 자동으로 트래픽 분산
유지보수 특정 인스턴스를 Target Group에서 빼면 무중단 배포·롤링 업데이트 가능

로드 밸런서 없이 운영할 때

Client ──▶ EC2 #1 (과부하 / 장애 시 서비스 전체 다운)

로드 밸런서를 사용할 때

                    ┌──▶ EC2 #1
Client ──▶ ELB ────┼──▶ EC2 #2
                    └──▶ EC2 #3

1-2. Elastic Load Balancer (ELB)

Elastic Load Balancer는 AWS가 제공하는 관리형(Managed) 로드 밸런서 서비스다.

특징 설명
관리형 서비스 서버 설치·패치·용량 계획을 AWS가 담당
다양한 대상 EC2, ECS/Fargate, Lambda, IP 주소, ALB(중첩) 등
자동 장애 복구 헬스 체크로 비정상 대상 감지 → 해당 대상으로 라우팅 중단
자동 복구 대상이 다시 정상으로 감지되면 트래픽 재개
가용 영역(AZ) 여러 AZ에 걸쳐 배치해 단일 AZ 장애에도 견딤
[ELB가 하는 일]

① 클라이언트 요청 수신 (고정 DNS / IP)
② 헬스 체크로 정상 대상만 선별
③ 설정된 알고리즘으로 대상에 분산 (Round Robin 등)
④ 비정상 대상 감지 시 → 라우팅 제외
⑤ 대상 복구 시 → 다시 라우팅 포함

2. ELB 종류 비교

AWS ELB는 용도에 따라 세 가지로 나뉜다.

2-1. Application Load Balancer (ALB)

Layer 7 (HTTP/HTTPS) 에서 동작한다. URL 경로, 호스트명, HTTP 헤더 등 애플리케이션 수준으로 라우팅할 수 있다.

항목 내용
프로토콜 HTTP, HTTPS, HTTP/2, WebSocket, gRPC
라우팅 경로(/api/*), 호스트(api.example.com), 헤더 기반
대상 EC2, ECS, Lambda, IP, ALB
대표 사용처 REST API, 마이크로서비스, 웹 애플리케이션
                    ┌── /api/*   ──▶ API Target Group (EC2 × 3)
Client ──▶ ALB ────┼── /static/* ──▶ Static Target Group (EC2 × 2)
                    └── default  ──▶ Web Target Group (EC2 × 2)

2-2. Network Load Balancer (NLB)

Layer 4 (TCP/UDP) 에서 동작한다. IP·포트 기준으로 빠르게 전달하며, 초저지연·고처리량이 필요할 때 적합하다.

항목 내용
프로토콜 TCP, UDP, TLS(SNI)
특징 AZ당 고정 Elastic IP 할당 가능
성능 ALB보다 지연 시간이 짧고 초당 연결 수가 많음
대표 사용처 게임 서버, IoT, 실시간 스트리밍, 레거시 TCP 앱
Client ──▶ NLB (고정 IP: 203.0.113.10)
              │
              ├── TCP:8080 ──▶ EC2 #1
              ├── TCP:8080 ──▶ EC2 #2
              └── TCP:8080 ──▶ EC2 #3

2-3. Gateway Load Balancer (GWLB)

Layer 3 (IP) 에서 동작한다. 트래픽을 가상 네트워크 어플라이언스(방화벽, IDS/IPS, 딥 패킷 검사 등)로 보내 인라인 검사 후 다시 원래 경로로 돌려보낸다.

항목 내용
프로토콜 IP (GENEVE 캡슐화)
특징 VPC 트래픽 미러링·보안 어플라이언스 삽입
대표 사용처 서드파티 방화벽, 네트워크 보안 장비 연동
VPC 트래픽 ──▶ GWLB ──▶ 방화벽 EC2 (어플라이언스) ──▶ 검사 후 원 경로

2-4. 세 종류 한눈에 비교

비교 항목 ALB NLB GWLB
OSI 계층 L7 L4 L3
라우팅 기준 URL, Host, Header IP + Port IP (어플라이언스로 전달)
고정 IP ❌ (DNS만) ✅ Elastic IP
WebSocket / gRPC 제한적
Lambda 대상
주 용도 HTTP API·웹 고성능 TCP/UDP 보안 어플라이언스

실무에서 가장 많이 쓰는 것은 ALB(웹/API)와 NLB(TCP 고성능)다. GWLB는 네트워크 보안 아키텍처를 구성할 때 사용한다.


3. ELB 핵심 구성 요소

ELB를 이해하려면 Listener → Rule → Target Group → Target 흐름을 알아야 한다.

3-1. 전체 구조 도식

flowchart LR
    Client[Client] --> Listener[Listener<br/>포트·프로토콜]
    Listener --> Rule[Listener Rule<br/>조건·우선순위]
    Rule --> TG[Target Group<br/>대상 묶음]
    TG --> T1[Target EC2 #1]
    TG --> T2[Target EC2 #2]
    TG --> T3[Target EC2 #3]
    TG -.-> HC[Health Check]
    HC -.-> T1
    HC -.-> T2
    HC -.-> T3

3-2. Listener (리스너)

Listener는 ELB가 어떤 포트·프로토콜로 클라이언트 요청을 받을지 정의한다.

설정 예시 설명
HTTP : 80 비암호화 HTTP 수신
HTTPS : 443 SSL/TLS 종료(termination) 후 백엔드로 전달
TCP : 8080 NLB에서 TCP 포트 수신
ELB DNS: my-alb-1234567890.ap-northeast-2.elb.amazonaws.com

Listener #1: HTTPS 443  ← 클라이언트는 여기로 접속
Listener #2: HTTP  80   ← (선택) HTTP → HTTPS 리다이렉트

HTTPS Listener에서는 ACM(AWS Certificate Manager) 인증서를 연결해 SSL/TLS를 ELB에서 종료할 수 있다. 백엔드 EC2까지 암호화가 필요하면 End-to-End TLS(리스너 + Target Group 모두 HTTPS)도 구성 가능하다.

3-3. Listener Rule (리스너 규칙)

ALB에서는 Listener 아래에 Rule을 둔다. 요청 조건에 따라 어느 Target Group으로 보낼지 결정한다.

규칙 요소 예시
Priority 숫자가 작을수록 먼저 평가 (1, 2, 3 …)
Condition Host = api.example.com, Path = /v1/*
Action Forward → Target Group A, Redirect, Fixed Response
Priority 1:  Host = api.example.com     → Forward → api-tg
Priority 2:  Path  = /admin/*           → Forward → admin-tg
Priority 3:  (default)                  → Forward → web-tg

Default Rule은 항상 존재하며, 다른 규칙에 매칭되지 않은 요청을 처리한다.

3-4. Target Group (타깃 그룹)

Target Group은 트래픽을 받을 대상들의 묶음이다.

대상 유형 설명
instance EC2 인스턴스 ID
ip 사설/공인 IP (온프레미스 포함)
lambda AWS Lambda 함수 (ALB만)
alb 다른 ALB (NLB → ALB 패턴)
Target Group 설정 설명
Protocol / Port 대상에 전달할 프로토콜·포트 (예: HTTP 8080)
Health Check 주기·경로·임계값으로 정상 여부 판단
Load Balancing Algorithm Round Robin, Least Outstanding Requests 등

3-5. Health Check (헬스 체크)

ELB는 Target Group에 설정된 헬스 체크로 대상 상태를 판단한다.

[정상 흐름]
ELB ── GET /health ──▶ EC2 #1  → 200 OK  →  healthy  → 트래픽 전달 O

[비정상 흐름]
ELB ── GET /health ──▶ EC2 #2  → timeout →  unhealthy → 트래픽 전달 X
                                              (다른 healthy 대상으로만 분산)
파라미터 의미
Interval 헬스 체크 간격 (예: 30초)
Timeout 응답 대기 시간
Healthy threshold 연속 N회 성공 시 healthy
Unhealthy threshold 연속 N회 실패 시 unhealthy
Path (HTTP) 체크할 URL (예: /health)
Matcher 성공으로 볼 HTTP 코드 (예: 200)

애플리케이션에 /health 같은 가벼운 헬스 엔드포인트를 두는 것이 일반적이다. DB 연결까지 검사할지는 운영 정책에 따라 결정한다.


4. 트래픽 흐름 (End-to-End)

4-1. ALB 기준 시퀀스

sequenceDiagram
    autonumber
    participant C as Client
    participant ALB as Application LB
    participant TG as Target Group
    participant EC2A as EC2 (healthy)
    participant EC2B as EC2 (unhealthy)

    Note over ALB,TG: 주기적 Health Check
    ALB->>EC2A: GET /health → 200
    ALB->>EC2B: GET /health → timeout
    ALB->>TG: EC2B unhealthy 등록

    C->>ALB: HTTPS GET /api/users
    ALB->>ALB: Listener Rule 평가 (/api/* → api-tg)
    ALB->>EC2A: HTTP GET /api/users
    EC2A-->>ALB: 200 + JSON
    ALB-->>C: 200 + JSON

4-2. 요청이 ELB를 거치는 이유 정리

① Client는 ELB DNS만 알면 됨 (백엔드 IP 변경·스케일 아웃 시에도 DNS 유지)
② ELB가 SSL 종료 → EC2 부하 감소 (선택)
③ 비정상 인스턴스 자동 제외
④ AZ 간 분산으로 단일 장애점 완화
⑤ Auto Scaling Group과 연동 시 인스턴스 증감에 자동 대응

5. 실무 구성 패턴

5-1. ALB + Auto Scaling (가장 흔한 웹/API 패턴)

Internet
    │
    ▼
┌─────────┐     ┌──────────────────┐     ┌─────────────────┐
│   ALB   │────▶│  Target Group    │────▶│  ASG (EC2 × N)  │
│ HTTPS   │     │  (app-servers)   │     │  min / max 설정  │
└─────────┘     └──────────────────┘     └─────────────────┘
구성 설명
ALB Public Subnet, Internet-facing
EC2 Private Subnet (보안 그룹으로 ALB만 허용)
ASG CPU·요청 수에 따라 인스턴스 자동 증감

5-2. NLB + ALB (고정 IP + L7 라우팅)

고정 IP가 필요하지만 HTTP 경로 라우팅도 필요할 때 NLB 앞단 + ALB 뒷단 조합을 쓰기도 한다.

Client ──▶ NLB (Elastic IP) ──▶ ALB ──▶ Target Groups

5-3. Internal ALB (내부 마이크로서비스)

VPC 내부 서비스 A ──▶ Internal ALB ──▶ 서비스 B, C Target Groups
항목 설명
Scheme internal (VPC 내부 DNS만 제공)
용도 BFF → 내부 API, 서비스 간 HTTP 통신

6. 보안·네트워크 체크리스트

항목 권장 사항
Security Group ALB SG: 443(Internet) 허용 / EC2 SG: ALB SG에서 오는 트래픽만 허용
HTTPS Public ALB는 HTTPS Listener + ACM 인증서 사용
Private Subnet EC2는 Private에 두고 ALB만 Public에 배치
WAF ALB 앞에 AWS WAF 연동으로 SQL Injection·봇 차단 검토
Access Log S3에 ALB 액세스 로그 저장 → 트래픽 분석·감사
[보안 그룹 예시]

ALB-SG:  Inbound 0.0.0.0/0 : 443
EC2-SG:  Inbound ALB-SG      : 8080
         (EC2에 443 직접 오픈하지 않음)

7. ALB vs NLB 선택 가이드

상황 추천
REST API, 웹사이트, 경로별 라우팅 ALB
WebSocket, HTTP/2, gRPC ALB
Lambda를 HTTP 대상으로 ALB
초저지연 TCP, 초당 수백만 연결 NLB
AZ별 고정 IP 필요 NLB
UDP 프로토콜 NLB
방화벽·IDS 인라인 삽입 GWLB

8. Classic Load Balancer (CLB) 참고

예전에는 Classic Load Balancer(CLB) 가 있었으나, 현재는 신규 구축 시 ALB 또는 NLB 사용을 권장한다.

구분 CLB ALB / NLB
세대 1세대 (레거시) 2세대 (권장)
L7 라우팅 제한적 ALB에서 풍부한 Rule
기능 기본 분산 고급 라우팅·고정 IP·GWLB 등

기존 CLB가 남아 있다면 마이그레이션 계획을 세우는 것이 좋다.


9. 용어 정리

용어 설명
Load Balancer 트래픽을 여러 대상에 분산하는 장치·서비스
ELB AWS Elastic Load Balancer. ALB·NLB·GWLB 포함
ALB Application Load Balancer. HTTP/HTTPS L7
NLB Network Load Balancer. TCP/UDP L4
GWLB Gateway Load Balancer. 보안 어플라이언스용 L3
Listener ELB가 요청을 수신하는 포트·프로토콜 설정
Target Group 트래픽을 받을 대상(EC2, IP, Lambda 등) 묶음
Health Check 대상 정상 여부를 주기적으로 검사하는 기능
AZ Availability Zone. AWS 데이터센터 격리 단위
Sticky Session 동일 클라이언트를 같은 대상에 묶는 기능 (ALB, 쿠키 기반)

10. 마치며

Elastic Load Balancer는 AWS에서 가용성·확장성·운영 편의를 위해 트래픽을 자동 분산하는 핵심 서비스다.

핵심은 다음 세 가지다.

  1. Listener → Rule → Target Group → Target 구조로 요청이 전달된다.
  2. Health Check로 비정상 대상을 자동 제외하고, 복구 시 다시 포함한다.
  3. ALB(HTTP/API), NLB(고성능 TCP/UDP), GWLB(보안 어플라이언스) 중 용도에 맞게 선택한다.

웹·API 서비스를 EC2나 ECS로 운영한다면 ALB + Target Group + Auto Scaling + Private Subnet 조합이 가장 많이 쓰이는 시작점이다. 트래픽이 늘면 Target Group에 대상만 추가하거나 ASG로 인스턴스를 늘리면 되고, ELB DNS는 그대로 유지된다.


참고