NGINX Bandwidth Limit, RateLimit 차이점

웹 서비스를 운영하다 보면 대규모 트래픽이나 비정상적인 요청 폭주로 인해 서버 리소스가 고갈되거나 서비스 품질이 저하되는 상황을 종종 마주하게 됩니다. 이를 방지하기 위해 다양한 트래픽 제어 기법이 존재하는데, 그중 대표적인 방법이 Bandwidth LimitRate Limit입니다. 이 글에서는 NGINX를 이용하여 Bandwidth Limit와 Rate Limit을 각각 구성해보고, 이 두 방법의 차이점과 적용 사례를 비교하여 살펴보겠습니다.

목차

1. 테스트 환경 구성
2. BandWidth Limit란?
2-1. NGINX BandWidth Limit 구성
3. Rate Limit란?
3-1. NGINX Rate Limit
4. 결론

1. 테스트 환경 구성

  • Ubuntu 22.04
  • NGINX 1.27.4

2. BandWidth Limit이란?

BandWidth( 네트워크 대역폭) : 인터넷에서 네트워크를 통해 전송할 수 있는 데이터의 최대양을 뜻합니다.

NGINX에서는 BandWidth를 Limit(제한)하여 서버의 리소스를 적게 소비할 수 있고 트래픽에 대한 비용을 절감할 수 있습니다.

주로 아래와 같은 목적으로 사용하게 됩니다.

  • 네트워크 트래픽 관리
    동시에 많은 사용자가 접속할 때 서버의 대역폭이 과도하게 소모되지 않도록 제어합니다.
  • 서비스 품질 유지(QoS)
    특정 파일 다운로드나 비디오 스트리밍 시 한 사용자에게 대역폭을 몰아주지 않게 하여 모든 사용자에게 고른 속도를 제공합니다.
  • 악성 봇이나 과도한 다운로드 차단
    자동화된 스크립트나 봇이 과도한 리소스를 다운로드하는 것을 제한할 수 있습니다.

2-1. NGINX BandWidth Limit 구성

각각 테스트용 파일을 다운로드, 정적 컨텐츠을 보여주는 Endpoint를 구성하여 BandWidth Limit을 구성합니다.

server {
    listen       833;
    server_name  localhost;

    location /default/ {
        alias /tmp/file/;
        autoindex on;
        access_log /var/log/nginx/downloads_access.log;
    }
    location /limit/ {
        alias /tmp/file/;
        autoindex on;
        limit_rate 300k; # 초당 300kb로 속도를 제한합니다.
        access_log /var/log/nginx/downloads_limit_access.log;
    }
    location /static/ {
        root   /usr/share/nginx/html;
        rewrite ^/static/?(.*)$ /$1 break;
    }
    location /static/limit {
        root   /usr/share/nginx/html;
        rewrite ^/static/limit/?(.*)$ /$1 break;
        limit_rate 30; # 초당 30byte로 속도를 제한합니다.
    }
}

위와 같이 구성을 진행 한 후 네트워크 속도를 확인합니다.

기본 네트워크 속도는 초당 128MB로 다운로드 받습니다.

BandWidth가 제한된 EndPoint로 요청시 아래와 같이 네트워크 속도가 감소한 것을 확인할 수 있습니다.

정적 컨텐츠도 아래와 같이 네트워크 속도가 제한되어 기본 네트워크 속도 보다 늦게 나오는 것을 확인할 수 있습니다.

(기본 구성 정적 컨텐츠)

(BandWidth Limit 구성 정적 컨텐츠)

3. Rate limit이란?

Rate limit이란 서버의 초당 최대 임계치를 지정하여 클라이언트의 요청 수가 임계치를 넘어갈 경우 접근을 제한하는 정책을 말합니다.

  • 서비스 과부하 방지
    너무 많은 요청이 동시에 들어오면 서버가 감당하지 못해 응답 속도 저하나 다운이 발생할 수 있기 때문에 서버의 안정적인 동작을 보장합니다.
  • DDoS 공격 방어
    악의적인 사용자가 짧은 시간에 수많은 요청을 보내 서비스를 마비시킬 수 있기 때문에 보안적인 방어를 합니다.
  • 공정한 리소스 분배
    일부 사용자가 과도하게 API를 호출하면 다른 사용자에게 불이익이 갈 수 있기 때문에 모든 사용자가 자원을 균등하게 사용하게 합니다.
  • 비용 관리
    API 호출이 과금 대상인 경우, 무제한 호출은 예기치 않은 비용 증가로 이어질 수 있기 때문에 비용 통제를 합니다.
  • API 남용 방지
    봇이나 크롤러 등이 비정상적으로 자주 호출하는 걸 방지해야 하기 때문에 API 오남용을 막습니다.

3-1. NGINX Rate Limit 구성

각각 테스트용 파일을 다운로드, 정적 컨텐츠을 보여주는 Endpoint를 구성하여 Rate limit을 구성합니다.

limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=1r/s; # 초당 1회의 요청만 허용

server {
    listen       822;
    server_name  localhost;

    location /limit/ {
        alias /tmp/file/;
        autoindex on;
        limit_req zone=req_limit_per_ip nodelay;  # rate limit 적용
        limit_req_status 429;
        access_log /var/log/nginx/downloads_limit_access.log;
    }


    location /static/limit {
        root   /usr/share/nginx/html;
        rewrite ^/static/limit/?(.*)$ /$1 break;
        limit_req zone=req_limit_per_ip nodelay;  # rate limit 적용
        limit_req_status 429;
        index  index.html index.htm;
    }
}

위와 같이 구성을 진행 한 후 요청 제한을 확인합니다.

요청이 제한 되는 것을 확인할 수 있습니다.

Download는 원활하게 진행되는 반면 index 페이지는 요청을 통해 제한되는 것을 확인할 수 있습니다.

4. 결론

Bandwidth Limit는 네트워크 대역폭 자체를 제한하여 한 번에 전송되는 데이터의 양을 조절하는 방식입니다. 주로 다운로드 속도 제한, 동시 사용자 품질 유지, 트래픽 비용 절감을 목적으로 사용됩니다. 반면, Rate Limit은 초당 허용하는 요청 횟수 자체를 제한하는 방식으로, 서버 과부하 방지, DDoS 방어, 공정한 리소스 분배 등에 효과적입니다.

두 기능 모두 서버 자원을 보호하고 서비스 품질을 유지하는 데 필수적인 역할을 하지만, 적용 대상과 목적이 다르기 때문에 상황에 따라 적절히 선택하거나 함께 조합하여 사용하는 것이 이상적입니다. NGINX를 활용하면 손쉽게 이 두 가지 기능을 구성하고 운영할 수 있어, 트래픽이 많은 환경에서도 안정적인 서비스를 제공할 수 있습니다.

NGINX에 관련된 더 많은 정보를 알고싶으시다면 NGINX STORE NGINX 카테고리를 방문해주세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required