우리가 프로젝트에서 백서버를 만들고 프론트엔드와 HTTPS로 통신하기 위해 NginX를 node.js서버 앞단에 함께 배포하여 요청 통신을 주고 받는다.
NginX가 무엇이고 왜 사용하는지에 대해서 알아보자
로드 밸런싱, 리버스 프록시, 캐싱 등의 기능을 제공하여 대규모 웹 사이트나 애플리케이션에서 사용되는 높은 성능과 안정성을 제공하는 웹 서버 소프트웨어이다.
실제로 Node.js는 기본적으로 HTTP/HTTPS 프로토콜을 지원하고 있기 때문에 HTTPS로 배포할 수 있다. 그러나 Nginx를 이용해서 HTTPS로 배포하는 이유는 위의 NginX를 정의할 때 설명했듯이 여러가지 유용한 기능을 제공하는게 가장 크다.
Nginx는 리버스 프록시(Reverse Proxy) 기능을 제공한다. 즉, Nginx 서버는 클라이언트로부터 요청을 받아 Node.js 서버로 전달하고, Node.js 서버로부터 응답을 받아 클라이언트에게 전달한다. 이를 통해 Node.js 서버의 부하를 줄일 수 있으며, 안전하고 효율적인 웹 서비스를 제공할 수 있다.
Nginx는 SSL/TLS(HTTPS)를 지원합니다. HTTPS는 HTTP 보다 더욱 안전한 프로토콜이지만, SSL/TLS를 구현하는 것은 복잡하고 어렵다고 한다. 이에 반해 Nginx는 SSL/TLS를 쉽게 구현할 수 있도록 도와준다.
Nginx는 정적 파일을 빠르게 제공할 수 있다. Node.js는 동적 컨텐츠를 생성하는 데 최적화되어 있기 때문에 정적 파일을 제공하는 데는 적합하지 않다. 반면에 Nginx는 정적 파일을 빠르고 안전하게 제공할 수 있으며, Node.js 서버의 부하를 줄일 수 있다.
따라서 Node.js 서버와 함께 Nginx를 이용하여 HTTPS로 배포하는 것은 보안, 성능, 안정성 면에서 매우 효율적인 방법이라고 볼 수 있다.
그렇다면, NginX로 배포하면 무조껀 좋은 점만 있는 것일까?? 아래에서 장단점을 알아보자
장점은 대부분 위에서 설명한 NginX를 사용하는 이유와 들어맞는다.
높은 성능: Nginx는 요청에 대한 응답을 빠르게 처리할 수 있는 웹 서버이다. 이에 따라 Node.js에서 처리하는 동적인 데이터 요청과 같은 부하를 줄일 수 있다. 또한, Nginx는 요청을 여러 개의 worker 프로세스나 스레드로 분배할 수 있어, 높은 동시 접속자 수를 처리할 수 있다.
보안: Nginx는 보안 기능을 제공하는 웹 서버로서, 웹 애플리케이션의 보안 취약점이 발견되었을 때 보안 패치를 빠르게 제공할 수 있다. 또한, SSL/TLS 프로토콜을 지원하기 때문에 HTTPS를 사용하여 보안 통신을 할 수 있다.
정적 파일 처리: Nginx는 정적 파일 처리를 위한 기능을 제공한다. 이를 이용하면 Node.js 서버에서 정적 파일 처리를 할 필요 없이 Nginx 서버에서 처리할 수 있습니다. 이렇게 하면 Node.js 서버의 부하를 줄일 수 있다.
로드 밸런싱: Nginx는 리버스 프록시 기능을 제공한다. 이 기능을 이용하면 여러 대의 Node.js 서버에 부하를 분산시킬 수 있으며. 이는 웹 애플리케이션의 가용성과 성능을 향상시키는 데에 도움을 준다.
구성의 복잡성:Node.js와 Nginx 서버를 함께 설정하고 구성해야 하기 때문에 Nginx는 Node.js 서버와 함께 사용되면 구성이 복잡해질 수 있다.
더 많은 서버 자원 필요: Nginx 서버를 운영하면서 Node.js 서버를 함께 사용하는 경우에는 더 많은 서버 자원이 필요로 한다. 이는 추가 비용을 야기할 수 있다.
서버 관리의 복잡성: Node.js와 Nginx를 함께 사용하는 경우 서버 관리가 복잡해진다. 이는 배포와 서버 유지보수 작업에서 더 많은 작업량을 요구할 수 있다.
느린 웹 서버의 연동: Node.js 애플리케이션을 운영하고 있는 경우, Nginx와의 연동이 느려질 수 있습니다. 이는 어플리케이션 전체가 느려지는 결과를 초래할 수 있다.
솔찍하게 NginX와 node.js를 모두 이용해서 서버를 배포해 보았지만, 실제로 Nginx의 인에이블 설정도 따로 해줘야하고 의도치 않은 Nginx만 가진 에러를 내뿜어 코드상의 문제가 없음에도 에러를 찾는데 시간이 한참 걸린 적이 있다. 하지만 그럼에도 불구하고 NginX를 사용하는 이유는 위의 단점을 감안하더라도 얻을 수 있는 장점이 워낙 크다는 점에서 조금 수고스러울 수 있지만, NginX와 Node.js서버를 둘 다 관리해 보도록 하자