본문으로 건너뛰기
김신건의 로그

[AWS] ALB vs NLB: L7 vs L4 로드 밸런서

· 수정 · 📖 약 1분 · 311자/단어 #aws #alb #nlb #load-balancer #cloud
AWS ALB NLB, ALB, NLB, Application Load Balancer, Network Load Balancer, AWS Load Balancer, ELB

정의

ALBNLB(Classic ELB)
LayerL7 (HTTP)L4 (TCP/UDP)L4 + L7 (legacy)
라우팅path / host / headerport단순
TLS terminationOO (TLS listener)O
WebSocketOO부분
gRPCOOX
처리량매우 큼보통
Static IPNO예 (EIP)NO
Latency중간 (ms)극저지연 (µs)중간
가격LCU (요청 + 데이터)LCU시간 + GB

ALB (Application Load Balancer)

flowchart LR
    Client -->|HTTP| ALB
    ALB -->|/api/* | Tg1["Target Group 1<br/>(api pods)"]
    ALB -->|/web/*| Tg2["Target Group 2<br/>(web pods)"]
    ALB -->|host: admin.x.com| Tg3["Target Group 3<br/>(admin)"]

기능:

  • Path-based / Host-based / Header / Query routing
  • WebSocket / HTTP/2 (gRPC)
  • WAF 통합
  • Cognito / OIDC 인증 (앞단)
  • Lambda 직접 target
  • IP 또는 instance target

NLB (Network Load Balancer)

flowchart LR
    Client -->|TCP/UDP| NLB["NLB<br/>(static IP, AZ 별)"]
    NLB --> Tg[Target Group]
    Tg --> EC2[(EC2 / IP)]

기능:

  • 극저지연: 마이크로초.
  • static IP: AZ 별 EIP 고정 (방화벽 허용 친화).
  • millions of conn.
  • TLS termination 옵션.
  • TCP / UDP / TLS listener.

IMPORTANT

gRPC, WebSocket idle 대응NLB 가 ALB 보다 안정. 정 idle timeout 길게.

선택 트리

flowchart TD
    Q1{프로토콜}
    Q1 -->|HTTP / HTTPS / gRPC| Q2{L7 라우팅 필요?}
    Q1 -->|TCP / UDP| NLB[NLB]
    Q2 -->|예| ALB[ALB]
    Q2 -->|아니오 + 극저지연| NLB
    Q2 -->|아니오 + 일반| ALB

Target Group

TargetType: instance | ip | lambda
HealthCheck:
  Protocol: HTTP
  Path: /health
  Interval: 30s
  HealthyThreshold: 2
  UnhealthyThreshold: 3

Sticky Session

Stickiness:
  Type: lb_cookie     # ALB 가 쿠키 박음
  Duration: 1d

또는 application-controlled (app 이 cookie 박음).

WAF 통합 (ALB 만)

flowchart LR
    Client --> WAF[AWS WAF]
    WAF --> ALB
    ALB --> Target
    Note[ALB 앞단 WAF: SQLi, XSS, rate limit, bot]

ALB → Lambda

TargetType: lambda
Targets:
  - { Id: arn:aws:lambda:us-east-1:123:function:myFunc }

API Gateway 대신 ALB + Lambda 도 가능. 더 cheap, REST API 만.

흔한 함정

WARNING

  1. ALB Idle Timeout 60s = WebSocket / SSE 가 silent close. ping/pong 또는 timeout 늘림.
  2. NLB + auto-scaling = NLB 의 target deregistration delay. 트래픽 차단 후 수십 초 까지 일부 요청.
  3. HTTP/2 → 백엔드는 HTTP/1.1 = ALB 가 down-grade. gRPC backend 는 NLB 또는 HTTP/2 enable.
  4. NLB cross-zone disabled = AZ 간 불균등 분포. enable 권장 (가격 약간 더).

관련 위키

이 글의 용어 (4개)
[AWS] Route 53: DNS, routing policies, health checkscloud
정의 Route 53 = AWS 의 글로벌 DNS + health check + 라우팅 정책. 단순 DNS 뿐 아니라 글로벌 트래픽 분산. Hosted Zone Alias Rec…
[AWS] VPC: subnet, route, NAT, peeringcloud
정의 VPC (Virtual Private Cloud) = AWS 안의 논리적 격리 네트워크. CIDR 정의 + subnet 분할 + 라우팅. 구조 Subnet 종류 | 종류 |…
[K8s] Ingress: L7 라우팅, TLS termination, Gateway APIkubernetes
정의 Ingress = 클러스터 외부 HTTP/HTTPS 트래픽 → 내부 Service 라우팅. L7 LB 역할. Service 의 LoadBalancer 다수 대안. [!IMP…
[Network] Load Balancer: L4 vs L7, 알고리즘, sticky sessionnetwork
정의 Load Balancer 는 트래픽을 여러 백엔드로 분산 하는 인프라. 수평 확장 + 가용성 + 무중단 배포 의 토대. L4 vs L7 | 구분 | L4 (Transport…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기