NGINX Open Source와 당사의 애플리케이션 전송 플랫폼인 NGINX Plus에 흥미로운 새 기능인 UDP 로드 밸런싱이 추가되었음을 기쁘게 알려드립니다. 이 새로운 기능은 기존 TCP 및 HTTP 기능을 기반으로 하며, NGINX를 더욱 폭넓은 인터넷 애플리케이션과 기기를 위한 강력하고 사용하기 쉬우며 일관된 프런트엔드로 만들어 줍니다. 전 세계에서 가장 사용량이 많은 애플리케이션 중 절반 이상을 지원하는 로드 밸런싱 기능을 사물 인터넷(IoT)을 구축하는 새로운 사용자층으로 확장하게 되어 매우 기쁩니다.
UDP 부하 분산 지원을 추가하는 이유는 무엇인가요?
대부분의 인터넷 애플리케이션은 네트워크 통신에 HTTP를 사용합니다. SOAP 및 REST와 같은 고급 프로토콜은 HTTP를 기반으로 하며, TLS를 이용한 보안, Gzip을 이용한 압축, HTTP/2를 이용한 성능 향상 등 다양하고 강력한 확장 기능을 활용할 수 있습니다.
하지만 많은 애플리케이션은 용도에 따라 여러 프로토콜을 사용해야 하며, 핵심 인터넷 프로토콜 중 상당수는 HTTP보다 먼저 등장했습니다. 따라서 완전한 로드 밸런싱 및 리버스 프록시 솔루션은 TCP 기반과 UDP 기반을 모두 포함한 광범위한 프로토콜을 지원해야 합니다.
UDP는 일반적으로 DNS(도메인 이름을 주소로 변환하는 데 사용), syslog(간단한 로깅에 사용), RADIUS(인증에 사용)처럼 트랜잭션 방식이 아닌 경량 프로토콜에 사용됩니다. 이러한 프로토콜에는 엄격한 신뢰성 요건이 없습니다. UDP 메시지(데이터그램)가 유실되더라도 클라이언트가 제한 시간이 지난 후 메시지를 안전하게 다시 전송할 수 있기 때문입니다. 하지만 이러한 프로토콜이 제공하는 서비스는 인터넷 서비스가 올바르게 작동하는 데 매우 중요합니다. 또한 UDP는 대역폭 요구 사항이 낮아 새로운 IoT 애플리케이션에서 선호되는 프로토콜 중 하나로 부상하고 있습니다.
1년 전, NGINX는 TCP 부하 분산을 도입하여 사용자 커뮤니티와 기업 고객에게 제공했습니다. 이제 UDP 부하 분산을 추가하여 부하 분산 기능을 확장하게 되어 기쁘게 생각합니다. NGINX와 NGINX Plus를 통해 사용자는 이제 UDP 기반 서비스를 안정적이고 확장 가능하며 뛰어난 성능으로 제공할 수 있습니다.
UDP 로드 밸런싱은 어떻게 작동하나요?
NGINX는 관리자가 정의한 하나 이상의 주소(IP 주소 및 포트)에서 UDP 네트워크 트래픽(DNS, syslog, RADIUS 등의 프로토콜)을 수신합니다. 클라이언트가 원하는 서비스에 대한 요청을 어디로 보내야 하는지 알 수 있도록 이러한 주소가 공개됩니다.
HTTP 및 TCP 부하 분산과 마찬가지로, UDP 부하 분산 구성에서는 업스트림 그룹(UDP 기반 서비스를 제공하는 오리진 서버 집합)과 서버 간 트래픽 부하 분산에 사용할 알고리즘(예: 라운드 로빈, 최소 연결 또는 소스 IP 주소 기반 해시)을 정의합니다. 또한 각 UDP 포트에 대한 가상 서버를 정의하고, 관련 서비스를 제공하는 업스트림 그룹을 지정하는 proxy_pass 지시어를 설정합니다:
# Load balance UDP‑based DNS traffic across two serversstream {
upstream dns_upstreams {
server 192.168.136.130:53;
server 192.168.136.131:53;
}
server {
listen 53 udp;
proxy_pass dns_upstreams;
proxy_timeout 1s;
proxy_responses 1;
error_log logs/dns.log;
}
}NGINX가 포트에서 UDP 데이터그램(여기서는 포트 53의 DNS 쿼리)을 수신하면, 구성된 부하 분산 알고리즘(여기서는 기본 라운드 로빈)을 사용하여 업스트림 그룹에서 이를 처리할 서버를 선택합니다. 필요한 경우 NGINX는 서버의 응답을 기다린 후 해당 응답과 제한 시간 내에 수신된 후속 패킷을 클라이언트에 다시 전달합니다.
서버가 요청에 응답하지 않으면 NGINX는 해당 서버를 ‘실패’ 상태로 표시하고 일시적으로 데이터그램 전송을 중단합니다. NGINX는 몇 초마다 소량의 실제 트래픽을 전송하여 서버가 복구되었는지 상태를 확인합니다.
NGINX Plus R9에는 HTTP 및 TCP 트래픽에 대한 상태 확인과 유사한 UDP 서비스용 애플리케이션 상태 확인(‘비동기’ 또는 ‘합성’ 상태 확인이라고도 함)이 포함될 예정입니다. NGINX Plus가 업스트림 서버에 특수 UDP 요청을 보내도록 구성하고, 서버가 정상으로 간주되기 위해 반환해야 하는 응답 유형을 정의할 수 있습니다.
UDP 부하 분산에서 지원되는 기타 기능으로는 트랜잭션을 웹 서버 형식의 액세스 로그에 기록하는 기능, IP 주소 기반 액세스 제어 목록, 다양한 속도 제한 기능 등이 있습니다.
NGINX Plus R9에서는 상태 모듈에서 제공하는 실시간 활동 모니터링 통계에 UDP 메트릭이 포함되며, 현재 HTTP 및 TCP 서버에서와 마찬가지로 HTTP 기반 API와 DNS를 사용하여 UDP 업스트림 그룹을 즉시 재구성할 수 있습니다.
UDP 부하 분산 활용 사례
UDP 로드 밸런싱은 고가용성과 수평적 확장이라는 두 가지 주요 사용 사례를 지원합니다. UDP는 설계상 데이터의 종단 간 전송을 보장하지 않으므로 클라이언트 소프트웨어가 네트워크 수준의 오류와 재전송을 처리해야 합니다. UDP 기반 프로토콜은 일반적으로 한 쌍의 서버를 지정합니다. 클라이언트가 기본 서버에 연결할 수 없는 경우, 정해진 제한 시간 동안 기다린 후 다른 서버에 연결을 시도해야 합니다. 이로 인해 UDP 트랜잭션이 상당히 지연될 수 있습니다.
UDP 서버 앞단에 고가용성과 안정성을 갖춘 로드 밸런서로 NGINX 또는 NGINX Plus를 배포하면 이러한 지연을 없애거나 줄일 수 있습니다. 클라이언트는 NGINX 또는 NGINX Plus 로드 밸런서로 UDP 요청을 전송하며, 로드 밸런서는 UDP 서버의 상태와 가용성을 모니터링하여 장애가 발생했거나 과부하 상태인 서버로 요청을 보내지 않습니다. 따라서 클라이언트에서는 연결 또는 요청 실패가 발생하지 않으며, 요청 재시도에 따른 시간 초과도 겪지 않습니다.
NGINX 또는 NGINX Plus를 로드 밸런서로 사용하면 UDP 애플리케이션을 확장하여 대량의 트래픽을 처리할 수도 있습니다. 일반적인 UDP 배포에서 클라이언트가 인식하는 UDP 서버는 최대 2대이지만, 높은 수요를 충족하도록 확장하려면 훨씬 더 많은 UDP 서버가 필요합니다. 이 시나리오에서 클라이언트는 알려진 1~2개의 NGINX 또는 NGINX Plus 인스턴스로 UDP 요청을 전송하며, 이러한 인스턴스는 실제로 부하를 처리하는 데 필요한 더 많은 UDP 서버에 요청을 분산합니다.
NGINX 및 NGINX Plus를 사용한 UDP 로드 밸런싱은 데이터를 전송하고 선택적으로 하나 이상의 응답을 기다리는 모든 UDP 기반 애플리케이션에 적합합니다. 또한 NGINX는 IoT 환경에서 사용되는 것과 같은 독점 UDP 기반 프로토콜의 부하도 분산할 수 있습니다.
시작하기
당사 릴리스에서 UDP 부하 분산 기능이 제공되는 구체적인 시점은 다음과 같습니다:
- 현재 – UDP 부하 분산을 위한 첫 번째 버전의 코드를 오픈 소스 NGINX 소프트웨어 저장소에 커밋했습니다. 얼리 어답터와 당사의 구현을 테스트하려는 분들은 소스를 복제하여 UDP 부하 분산 기능을 갖춘 NGINX 바이너리를 빌드할 수 있습니다. nginx 메일링 리스트를 통해 의견을 보내주시기 바랍니다.
- 2016년 3월 28일 주간 – NGINX 버전 1.9.13이 출시되며 UDP 로드 밸런싱 기능이 포함됩니다(해당 버전을 기반으로 사전 빌드된 바이너리에도 포함됩니다).
- 2016년 4월 – NGINX Plus 릴리스 9(R9)에는 UDP 로드 밸런싱이 포함됩니다. 당사의 상용 애플리케이션 전송 플랫폼인 NGINX Plus는 오픈 소스의 UDP 로드 밸런싱 기능을 확장하여 안정적이고 확장 가능한 UDP 기반 서비스를 구축하고 모니터링하기 위한 추가 기능을 제공합니다.
NGINX와 NGINX Plus는 광범위한 인터넷 프로토콜을 위한 완전한 로드 밸런싱 및 애플리케이션 전송 플랫폼을 제공합니다. HTTP 기반 애플리케이션, 하위 수준의 TCP 애플리케이션 또는 UDP 기반 프로토콜 중 무엇을 제공하든, 하나의 경량 애플리케이션인 NGINX와 NGINX Plus를 통해 고가용성, 안정성, 확장성 및 성능을 확보할 수 있습니다. 새로운 UDP 로드 밸런싱 기능과 이 기능이 완전히 새로운 다양한 장치에 고성능 로드 밸런싱과 완벽한 애플리케이션 전송을 제공할 잠재력에 큰 기대를 걸고 있습니다.
릴리스 9에서 UDP 부하 분산 기능이 출시되기 전에 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에게서 알아보세요.