오늘은 웹 서버의 정의와 웹 서버 중 하나인 Nginx에 대해 알아보는 시간을 가져보겠습니다.
웹 서버란, 하드웨어와 소프트웨어에 따라 두 가지 의미가 존재합니다.
여러분은 웹 서버라는 단어를 들으면 어떤 생각이 드시나요? 위와 같은 용어로 정리가 되시나요? 안 되신다면 다음 그림을 보겠습니다.
웹 서버의 주된 기능은 클라이언트에 요청에 따라 웹 페이지를 클라이언트에게 전달하는 것입니다. 우리(개발자)는 웹 서버를 통해 자신이 만든 컨텐츠를 사용자에게 제공할 수 있습니다.
Nginx란 apache 서버에서 영감을 받아 러시아 개발자 Igor Sysoev가 개발한 오픈 소스 웹 서버 프로그램입니다.
우리는 Nginx를 통해 HTTP와 리버스 프록시, IMAP/POP3 등의 서버 구동이 가능해집니다.
사실 웹서버에는 Apache, IIS, LightSpeed 등 다양한 회사에서 출시한 웹 서버들이 존재합니다. 하지만 왜 많은 사람들이 Nginx를 사용할까요?
20년간의 웹 서버 시장 점유율을 보시면 nginx의 점유율이 최근 10년간 급성장해 전 세계적으로 가장 높은 점유율을 기록하고 있는 것을 알 수 있습니다.
많은 웹서버는 Process-Driven 방식을 사용하는 반면, Nginx는 Event-driven 아키텍쳐를 사용하고 있습니다.
Process-Driven 기반 아키텍쳐는 클라이언트에게 요청이 올 경우 프로세스/쓰레드를 생성해 처리하는 구조여서 동시 접속 요청에 취약한 문제점이 존재합니다.
하지만 Nginx는 Event-driven 방식으로 Master Process와 다수의 Worker Process가 존재합니다. Worker Process는 클라이언트의 요청을 처리하는 역할을 수행합니다. 이 때 worker의 갯수는 설정값에서 변경이 가능합니다.
하나의 master 프로세스 내의 다수의 Worker 프로세스로 비동기 통신을 처리하기 때문에 동시 접속 및 요청 처리에 타 웹 서버 대비 좋은 성능을 보입니다.
일부 웹 서버는 엔터프라이즈용으로 유료 버전으로 출시해 사용자들은 비용을 지불해야 합니다. 하지만 Nginx는 오픈 소스로 비용 없이 사용이 가능합니다.
앞서 말했듯이 Nginx는 Master Process
와 다수의 Worker process
로 이루어져 있습니다. Worker process
는 다음 구조로 이루어져 있습니다.
클라이언트의 요청이 들어올 경우 non-blocking으로 이벤트를 받아 STATE MACHINE에 연결이 할당됩니다.
요청이 들어올 경우 요청의 Header를 읽어 처리를 진행합니다. 이 때 nginx에서는 다음과 같은 설정이 가능합니다.
이후에 보시겠지만 각 컨텍스트 내부에 설정한 값을 통해 다음과 같은 기능들을 구현하실 수 있습니다. worker process는 설정된 값들을 통해 요청을 필터링하고 로깅합니다.
그렇다면 Nginx를 어떠한 용도로 사용하는지 알아볼까요?
단순히 정적 파일 (html,css,js)을 제공하는 기본적인 웹 서버로 이용이 가능합니다.
사용할 수 있는 기능
Reverse Proxy는 실제 서버 앞에 위치해 클라이언트의 요청을 가로채 원본 서버에 요청을 보내고 응답을 대신 받습니다.
사용할 수 있는 기능
Forward와 Reverse의 차이로는 클라이언트가 요청한 내용을 사전에 검열할 것이냐 아님 중간에 가로채서 처리할 것이냐의 차이라 생각합니다.
오늘은 웹서버가 무엇이며 Nginx가 어떤 것인지, 어떤 기능을 수행하는지에 대해 알아보는 시간을 가졌습니다.
로드밸런싱 및 실제서버 ip 관리를 위해서라도 Nginx와 같은 웹 서버를 추가로 구축하는 것은 실제 서비스에 큰 도움이 될 것이라 생각합니다.
다음 시간에는 nginx 설치하는 방법에 대해 공유하는 시간을 가져보겠습니다.
감사합니다.