NGINX, 러시아에서 태어난 웹 서버
도커 강의를 듣는데 웹서버를 띄울 때 Nginx라는 걸 자주 사용했었다.
Spring만 해봐서 Apache Tomcat만 알고 있었는데 생소했다.
Nginx와 Apache Tomcat은 같이 구성되어 자주 사용된다고 한다.
왜 그런지, 이게 뭔지 공부해 보자
목차
NGINX
1등 할 수 있었던 이유
리버스 프록시 & 로드 밸런서
NGINX 엔진엑스
NGINX는 러시아에서 개발되었지만 미국에 인수되어 계속 개발되고 있는 빠르고 가벼운 웹서버이다.
추가적으로 리버스 프록시, 로드 밸런서 역할을 한다.
Apache HTTPd의 점유율을 앞질러 웹서버 점유율 1위가 되었다.
그만큼 강점이 있는 기술이다.
핵심 역할
- 웹서버: HTML, CSS, JS 같은 정적 파일 서빙
- 리버스 프록시: 클라이언트 요청을 백엔드(Spring 등)에 대신 전달
- 로드 밸런서: 여러 서버로 요청을 분산 처리하여 부하 분산
1등 할 수 있었던 이유
Apache HTTPD는 전통적으로 많이 쓰인 웹서버 기술이다.
하지만 왜 NGINX에게 1등 자리를 빼앗겼나..
구조적으로 무겁고 느릴 수밖에 없다.
Apache는 멀티쓰레드 방식으로 다른 기술에 비해 동시 처리로 성능이 좋았다.
(요청 1건당 쓰레드 또는 프로세스 1개 생성)
또한 웹서버나 WAS를 동시에 지원한다.
하지만 프론트와 백엔드를 분리해서 개발하고 API로 통신하게 개발하는 추세이다.
따라서 두번째 장점은 크게 매리트가 없어졌다.
거기다 동시 접속 처리 능력에서도 NGINX가 훨씬 빠르다.
멀티쓰레드 방식도 좋았지만 요청이 많이 지면 많아질수록 쓰레드 전환 비용이나, 나눠 쓰는 메모리 부족이 발생한다.
지금처럼 요청이 몰릴 수 있는 환경에서 부적절했다.
NGINX의 경우는 이벤트 기반 논블로킹 방식이다.
즉 이벤트가 발생할 때까지 다른 작업을 하고 있다.
따라서 대기하지 않아(논블로킹) 효율적이고 빠르다.
또한 별도의 모드 전환이나 서버를 나누지 않고도 리버스 프록시와 로드 밸런서 기능을 수행한다.
요청의 수가 점점 많아지고 있는 지금의 상황과 매우 잘맞는 기술인 것
리버스 프록시(Reverse Proxy) & 로드 밸런서
리버스 프록시
클라이언트가 직접 백엔드 서버에 요청하지 않고, 중간에 위치한 서버가 요청을 받아 대신 전달하는 구조
-> 보안 강화, 백엔드 서버 주소 숨김, 캐싱, SSL 처리 등에 활용

로드 밸런서
여러 개의 백엔드 서버에 트래픽을 분산시켜 주는 기능
하나의 서버가 과부하되지 않도록 하고, 고가용성 확보 가능

NGINX 설정
server {
listen 80;
# 웹서버 역할 (Vue 정적 파일)
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# 리버스 프록시 + 로드 밸런서 역할
location /api {
proxy_pass http://backend_servers;
}
}
# 분산 시킬 서버들
upstream backend_servers {
server spring1:8080;
server spring2:8080;
}
마무리
이렇게 급부상하고 있는 게 있는데 잘 모르고 있었다는 게 반성 포인트고,
왜 이렇게 인기인지 알게 되었다.
앞으로 직접 구성하거나 배포할 때 NGINX를 사용해서 한 번 구성해 봐서 어떻게 사용하는지
공부해 봐야겠다.