#web-server, #nginx

웹 서버와 NginX

웹 서버와 NginX

이번에 프로젝트를 진행하면서 처음으로 웹 서버를 직접 구축해보았다.

웹 서버를 구축하면서 NginX 를 사용하게 되었는데, 웹 서버를 구축하는데 필요한 설정들을 편리하게 추가 할 수 있었다.

하지만 웹 서버를 구축하면서 한 번 사용해본 게 전부이기 때문에, 아직 NginX 가 정확하게 무엇이고 어떤 역할을 하는 지 잘모르겠다.

그래서 이번 글에서는 NginX 에 대해서 함께 알아보고자 한다.

웹 서버 (Web Server)

NginX 에 대해 알아보기 전에 웹 서버와 웹 서비스의 발전에 대해서 이해할 필요가 있었다.

초기 웹 서비스는 대부분 정보 전달이 목적인 문서 위주의 정적 페이지였다. 그렇기 때문에 HTML과 같은 마크업 언어로 작성된 문서를 서버에서 보내주기만 하면 됐다.

이후 조금 발전된 형태로 스크립트 언어를 얹은 동적 페이지가 등장하였지만, 이때까지만 하더라도 서버에서 데이터를 처리하고 클라이언트로 전송해주는데 큰 부담이 되지 않았다.

하지만 SPA(Single Page Application) 라는 개념이 등장하면서 서버가 분리될 필요성이 생겼다.

SPA는 기존의 웹 페이지와는 달리 페이지 갱신에 필요한 데이터만을 전달받아 페이지를 갱신한다. 이때 필요한 데이터는 사용자마다 달라졌고, 복잡한 연산이 필요하기도 하였다.

만약 웹 페이지에 필요한 정적 데이터와 페이지 갱신에 필요한 동적 데이터를 하나의 서버에서 처리한다면, 부하가 커지게 되고 처리가 지연됨에 따라 수행 속도가 느려질 것이다.

그래서 Web ServerWAS(Web Application Server) 같은 개념이 생겨나게 된다.

Web Server 는 클라이언트의 요청을 처리하는 기능을 담당하고, WAS(Web Application Server) 는 DB 조회나 다양한 로직을 처리하는 기능을 담당한다.

Web Server는 클라이언트가 HTML, CSS 와 같은 정적 데이터를 요청하면 앞단에서 빠르게 제공하고, 동적 데이터가 필요하면 WAS 에 요청을 보내고, WAS 가 처리한 데이터를 클라이언트에 전달한다.

NginX 는 바로 이 Web Server 의 구축을 도와주는 소프트웨어이다.

엔진 엑스 (NginX)

위에서 설명한 것 처럼 Web Server 의 구축을 도와주는 소프트웨어이다. 웹 서버 소프트웨어 라고도 불린다. 이 웹 서버 소프트웨어 은 웹 어플리케이션을 안정적으로 제공할 수 있도록 도와주는 역할을 한다.

웹 서버 소프트웨어 에는 NginX 와도 많이 비교되며, 잘알려져있는 Apache 도 있다. 이 둘의 차이는 클라이언트의 요청을 처리하는 동작 방식이라고 한다.

Apache 는 스레드/프로세스 기반으로 하는 방식으로 요청을 처리하는데, 요청 하나당 스레드 하나가 처리하는 구조로 사용자가 많아지면 CPU 와 메모리 사용이 증가해서 성능이 저하될 수 있다고 한다.

NginX 는 비동기 이벤트 기반으로 하는 방식으로 처리하는데 요청이 들어오면 어떤 동작을 해야하는지만 알려주고 다음 요청을 처리하는 방식으로 진행된다고 하는데, 흐름이 끊기지 않고 응답이 빠르다고 한다.

이에 맞게 NginX 는 공식 홈페이지를 보면 가볍고 빠른 성능을 추구한다고 나와있다.

그러면 이제 NginX 가 웹 어플리케이션을 안정적으로 제공할 수 있도록 도와주는 몇가지 기능에 대해서 알아보자.

  1. 리버스 프록시 (Reverse Proxy)

    리버스 프록시 서버는 쉽게 설명하면 중계 기능을 하는 하는 서버이다. 클라이언트가 서버를 호출할 때 직접 서버에 접근 하는 것이 아니라 리버스 프록시 서버를 호출하게 되고, 리버스 프록시 서버가 서버에게 요청을 하고 응답을 받아 클라이언트에 전달을 한다.

    클라이언트는 리버스 프록시 서버를 호출하기 때문에 실제 서버의 IP를 감출 수 있고, 이를 통해 보안을 높일 수 있다는 장점이 있다.

  2. 로드밸런싱

    로드밸런서는 직역하면 부하 분산으로, 서버에 가해지는 부하를 분산해주는 역할을 하는 것이다.

    이용자가 많아서 발생하는 요청이 많을 때, 하나의 서버에서 이를 모두 처리하는 것이 아니라 여러대의 서버를 이용하여 요청을 처리하게 한다.

    이때 서버의 로드율과 부하량 등을 고려하여 적절하게 서버들에게 분산처리 하는 것을 로드 밸런싱이라고 한다.

    하나의 서버가 멈추더라도 서비스 중단 없이 다른 서버가 서비스를 계속 유지할 수 있는 무중단 배포가 가능하다는 장점이 있다.

마무리

사실 그 동안 프론트엔드를 공부하면서 서버 구축처럼 인프라를 다루는 부분은 백엔드에게 위임하는 경우가 많았다.

이번에 백엔드 멍토 크루의 도움을 받아 웹 서버에 대해 공부를 하면서 그동안 무지했던 영역을 조금이나마 공부할 수 있어서 좋았다.

또한 개발자로써 알아야하는 지식들이 있고, 공부해야 한다는 필요성을 느낄 수 있는 시간이었다.

참고 링크

위키백과

공식 홈페이지

유튜브