
웹 트래픽이 늘어나면서, 하나의 서버만으로 감당할 수 없는 상황이 종종 발생합니다. 이때 필요한 것이 바로 로드밸런싱(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)에서만 진행
- 외부에서 접근 못하게 방화벽/보안그룹 설정
'Nginx' 카테고리의 다른 글
[Nginx] Lua로 JWT 인증 처리하기 – API Gateway에 인증 붙이기 feat. Lua 와 JWT로 사용자 정보 받아오기 (0) | 2025.04.19 |
---|---|
[NGINX] Upstream과 API Gateway의 핵심 개념과 연관관계 (0) | 2025.04.19 |
[Nginx] 환경변수 설정하고 사용하는 방법 docker- .env , Lua , 템플릿 렌더링(envsubst) (0) | 2025.04.19 |
[NGINX] Nginx의 기본 변수 받아오기와 활용법 (0) | 2025.04.19 |
[Nginx] Nginx 실행하기 (0) | 2025.04.19 |