본문 바로가기
Nginx

[NGINX]Nginx에서 로드밸런서 사용하기 Feat. HTTPS

by 임혁진 2025. 4. 19.

웹 트래픽이 늘어나면서, 하나의 서버만으로 감당할 수 없는 상황이 종종 발생합니다. 이때 필요한 것이 바로 로드밸런싱(Load Balancing) 입니다.
Nginx는 가볍고 빠른 성능 덕분에 리버스 프록시 서버이자 로드밸런서로 많이 사용됩니다


 

로드밸런싱이란?

여러 서버(백엔드 서버, 앱 서버)에 클라이언트 요청을 분산시켜주는 방식

로드밸런서를 통해 다음과 같은 효과를 얻을 수 있습니다:

  • 성능 향상: 부하 분산으로 서버 과부하 방지
  • 확장성: 백엔드 서버를 쉽게 늘릴 수 있음
  • 고가용성: 하나의 서버가 죽어도 서비스 지속 가능

Nginx 설정 예시 (nginx.conf)

http {
    upstream backend_servers {
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
        server 127.0.0.1:8083;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend_servers;
        }
    }
}

로드밸런싱 방식

Nginx는 기본적으로 Round Robin 방식을 사용하지만, 아래와 같은 다양한 로드밸런싱 방식을 지원합니다.

1.  Round Robin (기본값)

요청을 서버 순서대로 분산

upstream backend {
    server app1.example.com;
    server app2.example.com;
}

2.Least Connections (가장 적은 연결 수)

upstream backend {
    least_conn;
    server app1.example.com;
    server app2.example.com;
}

3.  IP Hash (고정 사용자 분배)

IP 기반으로 요청 분산 – 세션이 필요한 서비스에 적합

upstream backend {
    ip_hash;
    server app1.example.com;
    server app2.example.com;
}

 


✅ 서버 상태에 따른 제어

  • max_fails: 실패한 요청 수 제한
  • fail_timeout: 실패 시 재시도 시간 제한
  • backup: 예비 서버 설정
upstream backend {
    server app1.example.com max_fails=3 fail_timeout=30s;
    server app2.example.com;
    server app3.example.com backup;
}

HTTPS와 로드밸런싱

로드밸런서가 SSL 종료(SSL termination)를 수행하면 백엔드는 HTTP로 통신할 수 있어 성능 개선 효과를 볼 수 있습니다.

server {
    listen 443 ssl;
    ssl_certificate     /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {
        proxy_pass http://backend;
    }
}

여기서 궁금증이 생기신 분들이 있을 겁니다.

※왜 성능이 좋아질까?

먼저, HTTPS가 왜 느린가?

HTTPS = HTTP + TLS(SSL)

즉, 데이터를 암호화하고 복호화하는 과정이 추가됨.

 클라이언트와 서버 사이에 TLS 핸드셰이크 → 암호화된 데이터 전송 → 복호화
이 모든 과정은 CPU 연산이 필요함. → 부하 발생


로드밸런서에서 SSL 종료(SSL Termination)란?

SSL 종료는 클라이언트와 로드밸서 사이의 HTTPS 연결을 로드밸서에서 끝내고,
그 다음 백엔드 서버로는 HTTP로 평문 통신하는 방식이야.

즉,

[클라이언트] --HTTPS--> [로드밸서] --HTTP--> [백엔드 서버]

왜 성능이 좋아질까?

1. 백엔드 서버가 SSL 처리 안 해도 됨

  • 암복호화 작업은 CPU에 부담을 줘
  • 로드밸서가 대신 처리하면 백엔드는 가벼운 HTTP 처리만 하면 됨
  • CPU 사용량 감소 → 처리 속도 증가

2. TLS 핸드셰이크 생략

  • TLS는 연결 시 핸드셰이크 과정이 필요해서 시간도 오래 걸려
  • 백엔드에서 HTTP로 통신하면 이 핸드셰이크가 아예 없음
  • ➜ 응답 지연(latency) 감소

3. 백엔드 서버의 스케일링 효율 증가

  • HTTPS 처리는 리소스 많이 잡아먹음 → 서버 확장 시 비용 증가
  • HTTP만 처리하면 상대적으로 가벼운 인스턴스로 확장 가능

 성능 수치로 보면?

  • CPU 사용률: 약 20~50% 감소 (HTTPS → HTTP 전환 시)
  • 요청 처리 속도: 평균 30~60% 증가 (서버 스펙 및 요청 수에 따라)
  • 대량 트래픽 처리 시 비용 대비 성능 효율이 훨씬 좋아짐

 보안 걱정은?

SSL 종료하면 로드밸서 ↔ 백엔드 사이가 HTTP니까 위험한 거 아닐까 생각이 듭니다.

보안상 고려할 점은 있기에. 그래서 보통 이렇게 대응합니다

  • 로드밸런서 ↔ 백엔드 통신은 내부 네트워크(VPC)에서만 진행
  • 외부에서 접근 못하게 방화벽/보안그룹 설정