웹 서버 (Web server) 란

하드웨어 측면과 소프트웨어 측면에서 정의 가능합니다.

1. 하드웨어 측면에서는,

웹 서버 소프트웨어와, 웹사이트를 구성하는 파일들(예를 들어 HTML 문서, 이미지, CSS, JavaScript 파일 등)을 저장하고 있는 컴퓨터입니다.

2. 소프트웨어 측면에서는,

HTTP 서버입니다. HTTP 서버는 URL(웹 주소)와 HTTP 프로토콜을 이해하는 소프트웨어입니다. HTTP 서버는 도메인 네임을 통해 접속 가능하며, 요청된 URL에 해당하는 호스팅된 웹사이트의 컨텐츠를 최종 사용자의 장치에 전달합니다.

 

웹 서버 역할

  • HTTP 통신: HTTP 통신을 통해 사용자와 서버간 데이터 교류
  • 정적 데이터 제공: HTTP 프로토콜을 통해 정적 콘텐츠를 클라이언트에게 제공
  • 로깅: 보안 및 통계 목적으로 로그파일에 클라이언트의 요청 및 서버 응답 정보 로깅
  • 가상호스팅: 하나의 IP주소를 사용해 많은 웹사이트(DNS)를 제공 가능
  • 권한 부여: 웹 리소스 일부에 대해 접근 제어 가능
  • 캐싱: 서버 응답 속도를 높이기 위해 정적 및 동적 컨텐츠 캐시 가능
    • 정적 데이터는 파일을 복사한 후 캐시서버에 저장해뒀다 사용
    • 동적 데이터는 요청에 대한 결과를 짧은 시간동안 캐시했다가 사용
  • 대역폭 조절: 네트워크 포화를 방지하고 서버 다운을 방지하기 위해 응답 속도 제한

 

웹 서버의 종류

Apache, NGINX, IIS, Google Web Server, CloudFlare 등.. 다양한 종류가 있습니다. 전통적으로 Apache와 IIS가 강자였는데, 2019년 이후로는 Nginx가 Apache, IIS보다 점유율이 향상되는 등 꾸준히 업데이트를 진행하며 발전중에 있습니다.

 

Apache

무료 오픈소스 크로스플랫폼 웹 서버 소프트웨어입니다.

  • 프로세스 기반 접근 방식으로 하나의 스레드가 하나의 요청을 처리하는 구조
  • 매 요청마다 스레드를 생성 및 할당해야 하기 때문에 리소스를 많이 잡아먹음

 

NGINX

아파치의 C10K (Connection 10000 Problem) 문제를 해결하기 위해 만든 웹 서버 소프트웨어 입니다.

  • 이벤트 중심 접근 방식으로 하나의 스레드 내에서 여러 요청을 처리하는 구조
  • 비동기 Event-Driven 구조 : Event Handler에서 비동기 방식으로 먼저 처리되는 요청을 진행 
  • 코어 모듈이 Apache보다 적은 리소스로도 많은 트래픽을 효율적으로 처리 가능
C10K 문제란,
서버 트래픽량이 높아져서 서버에 동시 연결된 커넥션이 많아졌을 때 더 이상 커넥션을 형성하지 못하는 문제.

아파치에서는 커넥션마다 프로세스를 할당 하기에, 동시 연결된 커넥션이 10000개인 경우, 10000개의 프로세스가 할당되어야 하고, 프로세스마다 1M의 메모리를 사용한다면 10000M의 메모리 = 약 9.76G의 메모리가 필요해지는 등 메모리 부족 현상이 나타나 커넥션을 연결할 수 없는 문제가 발생함.

이러한 구조적 문제를 해결하기 위해 적은 메모리와 프로세스로 대량의 동시 연결을 처리할 수 있는 비동기 이벤트 기반 구조의 NGINX 서버를 개발함.

 

어떤 서버를 사용할까?

.htacess 파일을 활용하거나 NGINX에게 없는 핵심 모듈을 사용할 경우 Apache를 사용하며, 빠른 정적 컨텐츠를 처리하고 싶고 대용량 트래픽을 처리하는 웹 사이트인 경우는 NGINX를 사용하면 됩니다.

 

또한, 두 서버를 함께 사용해도 된다. Apache 앞단에 NGINX를 프록시 서버로 활용할 수 있습니다.

  • NGINX에서 동시 커넥션 유지를 해주고 + static 리소스를 바로 제공해주면서, 동적 리소스가 필요한 요청만 Apache로 보낼 수 있음
  • NGINX와 Apache가 같은 네트워크 안에 있는 경우, NGINX의 SSL 터미네이션 기능 활용이 가능. 클라이언트와 NGINX서버까지는 https 통신을 하고, NGINX와 Apache 사이에는 http 통신을 함으로써 Apache 서버가 복호화 과정을 감당하지 않도록 하여 부하를 줄임

 

참고

https://daram.tistory.com/532

https://bentist.tistory.com/80

https://ssdragon.tistory.com/60

https://sorjfkrh5078.tistory.com/289

https://idchowto.com/web-server-program-apache-vs-nginx/

https://jungyu09.tistory.com/12

https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server

+ Recent posts