카테고리 없음

웹 서버(Apache, Nginx, IIS)

KIKI_BI0 2024. 1. 11. 17:25
SMALL

1. 웹 서버의 종류

-> Apache, Nginx, IIS

 

2. Apache

1995년, Apache 재단에서 만든 HTTP 서버

당시 Unix 기반으로 만들어진 최초의 웹 서버 NCSA httpd가 있었음

그러나 NCSA httpd는 버그가 굉장히 많았고, 개발자들이 버그를 수정하고 기능을 추가해 Apache를 만들었음

Apache서버는 Process-Driven 방식을 사용함

 

Apache는 클라이언트로부터 받은 요청을 처리할 때 새로운 프로세스 혹은 스레드를 생성하여 처리함

즉, 새로운 요청이 들어올 때마다 새로운 프로세스를 계속 생성한다는 뜻임

 

프로세스를 만드는 것이 시간이 오래 걸리다보니 요청이 들어오기 전에 프로세스를 만드는 prepork방식을 사용해, 새로운 요청이 들어왔을 경우 미리 만들어둔 프로세스를 가져다 사용할 수 있음

위와 같은 방식은 개발하기 쉽다는 장점이 있었고, 개발자들은 다양한 모듈을 만들어 확장성을 넓혔음

그 결과, Apache는 나온지 1년만에 NCSA HTTPd를 대체해 세계 1위 웹 서버 타이틀을 가지게 됨

 

3. Nginx

1999년도 전까지는 새로운 요청이 들어올 때마다 새로운 프로세스를 생성하는 Apache의 방식에는 큰 무리가 없었음

그러나 점점 컴퓨터가 보급되고 요청이 많아지면서 Apache의 치명적인 단점이 드러나게 됨

Apache에서 서버에 동시 connection이 많아졌을 때, 더 이상 connection을 생성하지 못하는 문제가 생김

-> C10K

Apache에서는 요청이 들어오면 프로세스를 새로 만들고, 100개의 요청이 동시에 들어오면 프로세스 100개가 생성되는 셈임

따라서 동시 접속이 늘어날수록 CPU가 잡아먹는 memory의 사용도 비례해 증가하게 됨

더욱이 Apache서버의 장점이었던 다양한 모듈 확장성은 프로세스가 차지하는 리소스의 양을 늘렸고, Context swiching을 많이하여 CPU가 감당해야 할 부분이 증가하게 됨

 

즉, 네트워크 소켓 수가 1만 개가 넘어가면 하드웨어 성능이 아무리 좋아도 Apache의 웹 서버 성능이 급격하게 떨어지는 C10K 문제가 생김

(최근에는 비동기 모드 MPM(Multi Processing Module) 방식을 도입해 프로세스가 여러 개의 스레드를 가질 수 있도록 했지만, 요청이 들어올 때마다 스레드를 만들어야 한다는 부담은 현재 진행형임)

 

Apache의 C10K를 해결하기 위한 목적으로 만들어진게 Nginx임

Nginx의 동작 방식은 이벤트 드리븐 구조(Event-driven)로 Apache와 달리 동작이 단순하고 전달자 역할만 해 동시접속에 특화되어있음

 

*Event-driven?

Nginx가 C10K를 해결한비결은 요청이 많이 들어와도 프로세스를 늘리지 않는 것임

엔진엑스는 설정 파일을 읽고 워커 프로세스를 생성하는 마스터 프로세스(하나)와, 실제로 유저의 요청을 처리하는 워커 프로세스로 구성됨

Nginx가 구동되면 마스터 프로세스는 정해진 숫자만큼의 워커 프로세스(설정 파일에서 정의된 수)를 생성하고 리슨 소켓(워커 프로세스와 통신 할 수 있는 소켓 디스크립터)를 배정함

 

Nginx에서는 TCP(or UDP) Connection의 연결, 유저의 HTTP request 처리, Connection 종료까지의 모든 절차를 이벤트라는 개념으로 취급하고 처리하는데, 위 설명했던 워커 프로세스가 eventQueue 하나를 가지고, 단일 eventLoop내에서 connection에 대한 작업을 처리함

 

4. Nginx vs Apache

웹 서버 점유율 1위를 차지하던 Apache는 2022년기준, Nginx 웹 서버 소프트웨어 순위 1위를 차지하게 됨

Apache는 버그가 많던 NCSA httpd를 해결하기 위해 나온 솔루션인 만큼 탁월한 안정성과, 여전히 다양한 모듈을 이식할 수 있다는 확장성의 장점을 가지고 있음

또한 OS 안정성 역시 Apache가 더 뛰어남

Apache는 Window에서도 Unix계열에서와 동일한 성능을 보장시키지만, Nginx는 Window를 완벽하게 지원하지는 않음

 

 5. IIS

IIS 웹서버는 인터넷 정보 서비스(Internet Information Services)의 약자로, 마이크로소프트 윈도우를 사용하는 서버들을 위한 인터넷 기반 서비스들의 모임임

IIS는 미국 마이크로소프트사의 윈도우 시스템에서 사용하는 웹 서버 프로그램

 

전반적인 웹사이트 용어 안에서, Apache 웹 서버에 이어 세계에서 두 번째로 가장 잘 알려진 웹 서버임

서버는 현재 FTP, SMTP, NNTP, HTTP/HTTPS를 포함하고 있음

 

IIS의 장점은 OS 이용자의 대부분이 윈도우를 사용하여 쉽게 설치가 가능하고, 시각적으로 창(Window)에서 작업을 하는 경우가 많아 일반적인 텍스트(Text)로 작업을 할 때 보다 훨씬 용이한 작업이 가능함.

웹 프로그램을 쉽게 설치/관리가 가능하고, 쉽게 설정 및 확인이 가능함

 

반면, 단점은 운영체제 사용이 윈도우만 가능하여, 다른 OS를 사용하는 사람들은 사용이 거의 불가능하다는 것임

Apache보다는 이용자수가 적어서 좀 더 고급 정보를 찾기 힘들 때가 있음

OS를 윈도우 서버로 설치하였을 때와 단순히 윈도우들을 설치하였을때와는 기능에 조금 차이가 음

LIST