반응형
NLB의 ALPN(Application-Layer Protocol Negotiation) 기능은 TLS 연결에서 클라이언트와 서버가 어떤 애플리케이션 프로토콜(HTTP/1.1, HTTP/2, gRPC 등)을 사용할지 협상하는 메커니즘입니다.
즉, 클라이언트가 서버로 TLS 핸드셰이크를 할 때 "난 HTTP/2 또는 HTTP/1.1을 지원한다"라고 알리고, 서버(NLB 뒤의 Target 그룹)가 지원하는 프로토콜을 골라주는 방식이에요.
1. ALPN 기본 개념
- TLS 확장(extension) 중 하나.
- 애플리케이션 계층 프로토콜을 TLS 핸드셰이크 중에 미리 결정.
- Upgrade 헤더 방식보다 빠르고 안전하게 프로토콜 협상 가능.
예:
- 브라우저(클라이언트)가 HTTP/2 + HTTP/1.1 지원을 선언.
- 서버가 HTTP/2를 지원한다면, ALPN으로 HTTP/2를 선택.
- 서버가 HTTP/2를 지원하지 않으면 HTTP/1.1로 자동 fallback.
2. AWS NLB와 ALPN
AWS **Network Load Balancer(NLB)**는 TLS Listener를 설정할 때 ALPN 정책을 지정할 수 있습니다.
- 정책 옵션:
- HTTP2Preferred → HTTP/2 우선, 지원 안 되면 HTTP/1.1
- HTTP2Only → 반드시 HTTP/2만 허용
- None → ALPN 비활성화 (HTTP/1.1만 사용)
- 동작 방식:
- 클라이언트(TLS ClientHello) → ALPN 확장에 지원 프로토콜 전달.
- NLB Listener에서 설정된 ALPN 정책 확인.
- Target 그룹과의 연결은 TCP 레벨이므로, 실제 애플리케이션 계층 프로토콜은 NLB에서 협상된 결과를 그대로 전달.
3. 왜 중요한가?
- 성능 최적화: gRPC나 HTTP/2는 다중 스트림과 헤더 압축 덕분에 HTTP/1.1보다 효율적.
- 호환성: ALPN을 쓰면 클라이언트와 서버 간에 호환 가능한 최적의 프로토콜을 자동 선택.
- TLS 기반 서비스 필수 요소: gRPC over TLS, HTTP/2 over TLS 등을 사용할 때 반드시 필요.
4. 실제 예시
예를 들어,
- gRPC 서비스를 NLB 뒤에 두고, Listener를 TLS + ALPN HTTP2Only로 설정하면, 클라이언트는 gRPC 통신을 위해 반드시 HTTP/2로 연결해야 함.
- 반대로 HTTP2Preferred로 두면 브라우저나 클라이언트가 HTTP/2를 지원하지 않더라도 HTTP/1.1로 fallback 가능.
👉 정리하면,
NLB의 ALPN은 TLS에서 HTTP/1.1, HTTP/2, gRPC 같은 프로토콜을 협상해서 선택하는 기능이고, 성능 최적화와 호환성 확보를 위해 필수적인 역할을 합니다.
반응형
'CLOUD > AWS' 카테고리의 다른 글
| Spot 인스턴스 안정성 확보: ASG + Capacity-Optimized + Capacity Rebalancing 활용하기 (0) | 2025.09.22 |
|---|---|
| EKS kubectl 연결 오류 해결기: NAT 교체 이후 발생한 함정 (0) | 2025.09.22 |
| CORS “보여주기 vs 읽기”, 프리플라이트, S3·CloudFront 정리 (1) | 2025.08.28 |
| [AWS IAM] 사용자에게 S3 전체 버킷 조회 + 객체 Get/Put/Delete 권한 부여하기 (1) | 2025.08.26 |
| CloudFront + S3로 이미지 서빙하기: 한 배포, 여러 도메인, 경로 기반 라우팅 (3) | 2025.08.25 |
댓글