2016년 8월, Amazon Web Services(AWS)는 HTTP 및 HTTPS 트래픽의 레이어 7 부하 분산을 위한 Application Load Balancer를 출시했습니다새 제품에는 AWS의 기존 레이어 4 및 레이어 7 로드 밸런서인 Elastic Load Balancer에 없던 여러 기능이 추가되었으며, Elastic Load Balancer는 공식적으로 Classic Load Balancer로 이름이 변경되었습니다.
1년 후, AWS는 향상된 레이어 4 로드 밸런싱을 위해 Network Load Balancer를 출시했으며 이에 따라 AWS에서 고가용성의 확장 가능한 애플리케이션을 실행하는 사용자가 선택할 수 있는 옵션은 다음과 같습니다:
이 게시물에서는 ALB의 기능을 살펴보고, 가격과 기능을 NGINX Open Source 및 NGINX Plus와 비교합니다.
참고 –
지원되는 기능에 관한 정보는 2020년 7월 기준으로 정확하지만 변경될 수 있습니다. NGINX Plus와 Classic Load Balancer(이전 명칭: Elastic Load Balancer 또는 ELB)를 직접 비교한 내용과 두 제품을 함께 사용하는 방법에 관한 정보는 다음 이전 블로그 게시물을 참조하세요. 고가용성 NGINX Plus 배포에 NLB를 사용하는 방법에 관한 정보는 다음 이전 블로그 게시물을 참조하세요.
Application Load Balancer의 기능
ALB는 Classic Load Balancer나 NLB와 마찬가지로 AWS에 긴밀하게 통합되어 있습니다. Amazon은 이를 계층 7 로드 밸런서라고 설명하지만, 독립형 계층 7 리버스 프록시 및 로드 밸런서가 제공할 수 있는 폭넓은 기능과 세부 조정, 직접 제어 기능을 모두 제공하지는 않습니다.
ALB는 Classic Load Balancer에는 없는 다음과 같은 기능을 제공합니다:
- 콘텐츠 기반 라우팅 ALB는 요청 URL,
Host헤더와 요청의 필드를 기반으로 하는 콘텐츠 기반 라우팅을 지원합니다. 이러한 필드에는 표준 및 사용자 지정 HTTP 헤더와 메서드, 쿼리 파라미터, 소스 IP 주소가 포함됩니다. (ALB 설명서의 “Classic Load Balancer에서 마이그레이션할 때의 이점”을 참조하세요.) - 컨테이너 기반 애플리케이션 지원. ALB는 Amazon EC2 Container Service(ECS)에서 호스팅되는 컨테이너에 대한 기존 지원을 개선합니다.
- 더 많은 지표. 마이크로서비스별로 지표를 수집할 수 있습니다.
- WebSocket 지원. ALB는 클라이언트와 서버 간의 지속적인 TCP 연결을 지원합니다.
- HTTP/2 지원. ALB는 HTTP/2를 지원하며, 이는 SSL/TLS로 보호되는 콘텐츠를 전송할 때 더 우수한 대안입니다.
(ALB와 Classic Load Balancer의 전체 기능 비교는 AWS 설명서의 ‘제품 비교’를 참조하세요.)
ALB는 Classic Load Balancer의 제한된 기능으로 어려움을 겪던 AWS 사용자에게 중요한 업데이트였으며, 웹 애플리케이션으로 유입되는 트래픽을 보호하고 최적화하며 제어해야 하는 고급 사용자의 요구 사항을 어느 정도 충족했습니다. 하지만 전용 리버스 프록시(예: NGINX)와 로드 밸런서(예: NGINX Plus)가 제공하는 모든 기능을 지원하지는 않습니다.
AWS에서 트래픽을 제어하는 더 나은 접근 방식
사용자는 Amazon ALB 대신 AWS에 NGINX Open Source 또는 NGINX Plus를 배포하여 트래픽을 제어하고 부하를 분산할 수 있습니다. 또한 여러 가용 영역에서 고가용성을 구현하기 위해 Classic Load Balancer 또는 Network Load Balancer를 프런트엔드로 배포할 수도 있습니다. 다음 표에서는 ALB, NGINX, NGINX Plus에서 지원하는 기능을 비교합니다.
참고: 다음 표의 정보는 2020년 7월 기준으로 정확하지만 변경될 수 있습니다.
| Amazon ALB | NGINX Open Source | NGINX Plus | |
|---|---|---|---|
| 로드 밸런싱 방식 및 기능 | 쿠키 기반 세션 지속성, 가중치가 적용된 대상 그룹 및 슬로 스타트를 지원하는 Round_robin 및 least_outstanding_requests 방식 | 가중치가 적용된 업스트림 서버를 사용하는 다양한 로드 밸런싱 방식(Round Robin, Least Connections, Hash, IP Hash, Random 포함) | NGINX Open Source와 동일하며, Least Time 방식, 더 다양한 세션 지속성 방식 및 슬로 스타트 추가 |
| 캐싱 | ❌ 로드 밸런서에서 캐싱을 지원하지 않음 | ✅ 정적 파일 캐싱 및 동적(애플리케이션) 캐싱 | ✅ 정적 및 동적 캐싱과 고급 기능 |
| 상태 확인 | 능동형(비동기 검사에서 반환된 상태 코드를 확인하여 장애 서버 식별) | 수동형(클라이언트 요청에 대한 응답을 확인하여 장애 서버 식별) | 능동형 및 수동형 모두 지원. 능동형 검사는 ALB보다 기능이 풍부하고 구성 가능성이 높음 |
| 고가용성 | HA를 위해 여러 가용 영역에 ALB 인스턴스를 배포할 수 있지만 리전 간 배포는 불가능 | NLB를 사용한 액티브-액티브 HA 및 Elastic IP 주소를 사용한 액티브-패시브 HA | NGINX Open Source와 동일하며, 모든 NGINX Plus 인스턴스에서 원활한 HA를 구현하기 위한 기본 제공 클러스터 상태 공유 기능 추가 |
| IP 제품군의 모든 프로토콜 지원 | ❌ HTTP 및 HTTPS만 지원 | ✅ TCP 및 UDP도 지원하며 수동형 상태 확인 제공 | ✅ TCP 및 UDP도 지원하며 능동형 및 수동형 상태 확인 제공 |
| 로드 밸런서 인스턴스당 여러 애플리케이션 | ✅ | ✅ | |
| 콘텐츠 기반 라우팅 | ✅ 요청 URL, Host 헤더, 표준 및 사용자 지정 HTTP 헤더, 메서드, 쿼리 매개변수, 소스 IP 주소를 포함한 요청 필드를 기반으로 함 | ✅ ALB와 동일한 요소에 더해 쿠키 및 인라인 JavaScript 엔진으로 NGINX JavaScript 모듈을 사용하는 동적 계산을 기반으로 함 | ✅ NGINX Open Source와 동일한 요소에 더해 JWT 클레임 및 키-값 저장소의 값을 기반으로 함 |
| 컨테이너화된 애플리케이션 | Amazon ID, ECS 컨테이너 인스턴스, Auto Scaling 그룹 및 AWS Lambda 함수로 로드 밸런싱 가능 | 수동 구성 또는 구성 템플릿 필요 | SRV 레코드를 포함한 DNS를 사용한 자동 구성. 주요 레지스트리 서비스와 연동 |
| 이식성 | ❌ 모든 환경(개발, 테스트 및 프로덕션)이 AWS에 있어야 함 | ✅ 모든 환경을 어떤 배포 플랫폼에도 구축 가능 | |
| SSL/TLS | ✅ SNI를 지원하는 여러 SSL/TLS 인증서 ❌ SSL/TLS 업스트림 검증을 지원하지 않음 | ✅ SNI를 지원하는 여러 SSL/TLS 인증서 ✅ SSL/TLS 암호화 스위트를 자유롭게 선택 가능 ✅ SSL/TLS 업스트림 완전 검증 | |
| HTTP/2 및 WebSocket | ✅ | ✅ | |
| 인증 기능 | – OIDC, SAML, LDAP, AD IdP 인증 옵션 – AWS Cognito 및 CloudFront와 통합 | 다양한 인증 옵션 | |
| 고급 기능 | ❌ 최소한의 API | ✅ 오리진 서비스, 우선순위 지정, 속도 제한 등 | ✅ NGINX Open Source와 동일하며, RESTful API 및 키-값 저장소 추가 |
| 로깅 및 디버깅 | ✅ Amazon 바이너리 로그 형식 | ✅ 사용자 지정 가능한 로그 파일 및 여러 디버그 인터페이스 | ✅ 완전히 사용자 지정 가능한 로그 파일 및 여러 디버그 인터페이스, NGINX의 완전한 지원 제공 |
| 모니터링 도구 | ✅ Amazon CloudWatch와 통합 | ✅ NGINX Controller* 및 기타 타사 도구 | ✅ NGINX Controller 및 기타 타사 도구, 확장된 보고 통계 세트 |
| 공식 기술 지원 | ✅ 추가 비용으로 제공 | ❌ 커뮤니티 지원만 제공 | ✅ 가격에 포함되며 NGINX에서 직접 제공 |
| 무료 티어 | ✅ 최초 750시간 | ✅ 항상 무료 | ✅ 30일 평가판 구독 |
* NGINX Controller는 이제 F5 NGINX Management Suite입니다.
물론 기능 체크리스트가 아니라, 높은 보안성과 최대 가용성, 완벽한 제어를 바탕으로 애플리케이션을 원활하게 제공하는 데 필요한 역량을 평가하여 로드 밸런싱 솔루션을 선택해야 합니다.
트래픽 급증 처리
Amazon의 Classic Load Balancer(이전 명칭: ELB)는 트래픽 급증에 제대로 대응하지 못했습니다. 로드 밸런서 인스턴스의 규모는 현재 트래픽 수준에 맞춰 자동으로 조정되었으며, 트래픽이 급증하면 ELB가 이에 대응하여 추가 용량을 배포하는 데 수 분이 걸릴 수 있었습니다. 사용자는 트래픽 급증에 앞서 추가 리소스를 요청하기 위해 양식을 작성하는 수동 절차(“사전 워밍업”이라고 함)를 이용해야 했습니다. ALB는 NGINX를 기반으로 하므로 ALB 인스턴스가 훨씬 더 많은 트래픽을 처리할 수 있지만, 트래픽 급증에 대응하는 확장 이벤트가 여전히 발생할 수 있습니다. 또한 트래픽이 급증하면 Load Balancer Capacity Unit(LCU) 사용량이 자동으로 증가하여 비용도 높아집니다.
로드 밸런싱 프록시를 직접 배포하고 확장하면 용량과 비용을 완벽하게 제어할 수 있습니다. NGINX와 NGINX Plus는 표준 Amazon 인스턴스에 배포되며, 당사의 사이징 가이드에서는 용량이 서로 다른 인스턴스 유형의 잠재적인 최대 성능을 확인할 수 있습니다. NGINX Plus의 가격은 모든 인스턴스 크기에 동일하게 적용되므로 트래픽 급증에 대비해 여유 용량을 배포하는 것이 비용 효율적이며, 더 많은 용량이 필요할 때 별도의 양식을 작성하지 않고도 인스턴스를 신속하게 추가 배포할 수 있습니다.
상태 확인을 통한 장애 서버 감지
Amazon ALB를 테스트한 결과, Amazon ALB는 ‘수동형’ 상태 확인을 구현하지 않는 것으로 나타났습니다. 서버가 예상된 상태 코드를 반환하지 않는다는 사실이 비동기 테스트를 통해 확인된 후에야 해당 서버에 장애가 발생한 것으로 감지됩니다.
인스턴스 클러스터의 부하를 분산하도록 ALB 인스턴스를 생성하여 이 사실을 확인했습니다. 상태 확인 주기는 최소값인 5초로, 실패한 상태 확인의 임계값은 최소값인 2회로 구성한 후 ALB에 지속적으로 요청을 보냈습니다. 인스턴스 중 하나를 중지하자 일부 요청에 대해 ALB가 502 Bad Gateway 오류를 몇 초 동안 반환했으며, 이는 상태 확인에서 해당 인스턴스가 중단된 것을 감지할 때까지 계속되었습니다. 패시브 상태 확인(NGINX와 NGINX Plus 모두 지원)을 사용하면 최종 사용자에게 이러한 유형의 오류가 노출되는 것을 방지할 수 있습니다.
ALB의 상태 확인은 HTTP 상태 코드(예: 200 OK 또는 404 Not Found)를 검사하는 방식으로만 인스턴스의 상태를 판단할 수 있습니다. 이러한 상태 확인은 신뢰하기 어렵습니다. 예를 들어 일부 웹 애플리케이션은 서버에서 생성된 오류를 사용자 친화적인 페이지로 대체하며, 일부 오류는 웹 페이지 본문에만 표시됩니다.
NGINX Plus는 수동 상태 확인과 능동 상태 확인을 모두 지원하며, 능동 상태 확인은 ALB의 상태 확인보다 강력하여 상태 코드뿐만 아니라 응답 본문의 내용도 일치 여부를 확인할 수 있습니다.
가격
마지막으로, ALB를 배포할 때 직면하게 되는 가장 큰 문제는 비용입니다. 로드 밸런싱 비용은 Amazon 청구액에서 상당한 비중을 차지할 수 있습니다.
AWS는 요금을 산정하기 위해 복잡한 알고리즘을 사용합니다. 매월 처리할 신규 연결 수, 동시 연결 수, 데이터 양을 정확히 파악하고(이는 예측하기가 매우 어렵습니다), Amazon과 동일한 방식으로 LCU를 계산할 수 있지 않다면 매달 Amazon 청구서를 걱정하게 될 것입니다.
AWS 기반 NGINX Plus는 비용을 완벽하게 예측할 수 있게 해줍니다. 고정된 시간당 비용과 AWS 호스팅 요금만으로 완벽한 지원이 제공되는 훨씬 더 강력한 부하 분산 솔루션을 이용할 수 있습니다.
결론
NGINX Plus는 검증된 레이어 7 부하 분산 솔루션으로, 레이어 4 부하 분산 기능도 제공합니다. Amazon의 Classic Load Balancer 또는 NLB와 함께 사용하면 효과적입니다.
AWS 환경에서 이미 매우 인기 있는 솔루션인 NGINX와 NGINX Plus를 지속적으로 더 많이 활용하시기를 권장합니다. 아직 NGINX Plus 사용자가 아니라면 지금 30일 무료 평가판을 시작하거나 사용 사례에 대해 논의하려면 문의해 주세요.
작성자 소개

관련 블로그 게시물
시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.
F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.
Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.
진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.
NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.
Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.