메인 콘텐츠로 건너뛰기

웹 서버 기초

Web_Server_기반_개요

이 게시물은 Cloud Computing 기초 시리즈의 일부입니다. Cloud Computing 인증 과정 소개를수강하여 기술을 더 쌓 으세요.

이미 이 개념에 익숙하실 수도 있습니다. 클라이언트/서버 모델을 기억하시나요? 웹 서버는 이 모델의 구성 요소인 서버에 불과합니다. 

기본적으로 웹 서버는 웹사이트와 웹 애플리케이션을 저장하고 제공합니다. 웹 서버는 데이터 교환을 원활하게 하기 위해 함께 작동하는 하드웨어와 소프트웨어로 구성됩니다. 

웹 서버의 하드웨어 구성 요소는 웹사이트의 파일과 구성 요소를 저장하는 물리적 또는 가상 컴퓨터를 의미합니다. 여기에는 정적인 HTML 문서, 텍스트 파일, 이미지, 동영상부터 보다 복잡한 동적 스크립트까지 모든 것이 포함됩니다. 예를 들어 홈페이지에 동영상이 있는 웹사이트를 방문하면 해당 동영상은 웹 서버 하드웨어에 저장됩니다.

웹 서버의 소프트웨어 구성 요소는 사용자가 서버에 저장된 파일에 액세스할 수 있는 방법을 제어합니다. 웹 서버는 웹 브라우저 및 인터넷에 연결된 기타 장치에서 들어오는 요청을 관리하여 이를 수행합니다. 웹 서버에 설치된 소프트웨어를 통해 웹 브라우저에서 웹 사이트를 볼 수 있습니다.

웹 서버를 작동시키는 구성 요소부터 살펴보겠습니다.

하이퍼 텍스트 전송 프로토콜(HTTP)

HTTP는 웹 서버가 웹사이트와 웹 애플리케이션을 사용자에게 전달하여 사용자가 인터넷에서 콘텐츠에 액세스하고 볼 수 있도록 합니다.

웹 브라우저를 사용하여 웹사이트에 액세스하면 웹 브라우저는 해당 웹사이트를 호스팅하는 웹 서버에 요청을 보냅니다. 이 요청은 HTTP 메시지 형태로 전달됩니다. 웹 서버는 요청을 수신하고 처리하여 하드웨어 및 소프트웨어 구성 요소에서 요청된 리소스를 검색합니다.

위 이미지의 오른쪽에서 웹 서버가 HTTP를 사용하여 웹 브라우저에 메시지를 보내는 것을 볼 수 있습니다. 웹사이트를 요청하려면 브라우저의 주소창에 해당 URL을 입력하기만 하면 됩니다. 그러면 브라우저는 이 URL을 웹사이트가 저장된 서버의 물리적 위치를 나타내는 IP 주소에 매핑합니다. 이 IP 주소에서 서버가 발견되면 웹 서버 소프트웨어가 요청을 수신하고 요청한 웹 사이트를 다시 보냅니다. 따라서 브라우저에 "www.example.com"를 입력하면 웹 서버는 "www.example.com"에 대한 웹사이트를 반환합니다.

셀프 호스팅 대 호스팅 제공업체

웹 애플리케이션을 호스팅할 때는 호스팅 제공업체를 이용하거나 가정용 컴퓨터에 자체 서버를 설정하는 방법 중 하나를 선택할 수 있습니다. 개인은 셀프 호스팅을 하는 경우가 많지만 필수 서비스를 제공하는 조직의 경우 호스팅 제공업체를 이용하는 것이 훨씬 더 많은 보호 기능을 제공합니다.

호스팅 제공업체를 이용하면 고속 서버와 네트워크를 활용할 수 있습니다. 또한 호스팅 제공업체는 변동하는 전력 소비를 안정적으로 처리하고 잠재적인 장애로부터 보호할 수 있는 능력을 갖추고 있습니다. 하지만 필수 서비스를 위해 호스팅 제공업체를 이용하는 가장 큰 이유는 개인 정보가 공개 영역으로 유출되지 않도록 하기 위해서입니다. 

웹 서버 소프트웨어

웹 서버 소프트웨어는 모든 웹사이트 또는 웹 애플리케이션의 핵심입니다. 이를 통해 인터넷을 통해 사용자에게 웹 콘텐츠를 제공할 수 있습니다. 웹사이트를 설정하고 서버를 구성할 때 이를 작동시키기 위한 소프트웨어가 필요합니다.

소프트웨어 측면에서는 Apache 와 NGINX 의 두 가지 솔루션이 시장을 지배하고 있습니다. 여기서는 이 두 가지를 살펴볼 것이지만, 각각 고유한 장점과 과제가 있는 IIS 및 Lighttpd를 포함한 다른 옵션도 있다는 점에 주목할 필요가 있습니다.

Apache

Apache 는 이커머스 사이트나 포럼과 같은 동적 콘텐츠를 호스팅하는 데 적합한 널리 사용되는 웹 서버 소프트웨어입니다. Windows, macOS, Linux를 비롯한 여러 플랫폼에서 실행할 수 있습니다. 약 1995년부터 사용되어 왔으며 가장 오래되고 널리 사용되는 웹 서버 중 하나입니다. 

Apache 는 HTTP, HTTPS, FTP 등 다양한 웹 프로토콜을 처리할 수 있으며 Windows, Linux, macOS 등 다양한 운영 체제에서 실행할 수 있습니다. 동적 콘텐츠 지원, 인증 및 캐싱과 같은 추가 기능을 추가할 수 있는 다양한 모듈을 통해 고도로 사용자 정의할 수 있습니다. 특히 서버 구성 요소와 관계없이 서버 자체 내에서 동적 콘텐츠를 처리하도록 설계되었습니다. 

Apache 에는 프로세스당 하나의 연결 모델이 있습니다. 프로세스당 하나의 연결 모델은 각 클라이언트 연결이 별도의 프로세스 또는 스레드에서 처리되는 웹 서버를 구축하는 전통적인 접근 방식입니다. 이 프로세스 또는 스레드는 클라이언트의 연결을 관리하고 연결이 닫힐 때까지 요청을 처리합니다. Apache 에서는 이 모델을 사용하기 때문에 동시 연결 요청 수가 프로세스 수를 초과하면 서버 성능이 크게 저하됩니다.

Apache 의 주요 기능 중 하나는 단일 서버에서 여러 가상 호스트를 지원하여 웹사이트가 고유한 구성을 유지하면서 리소스를 공유할 수 있도록 하는 기능입니다. Apache 또한 대규모 개발자 커뮤니티가 기능을 확장하기 위해 추가 모듈과 플러그인을 만들고 유지 관리하는 등 확장성이 매우 뛰어납니다.

NGINX

반면에 NGINX (엔진 X라고 발음)는 이미지 및 동영상과 같은 정적 콘텐츠 제공에 최적화되어 있으며, 많은 수의 동시 클라이언트 연결을 처리할 수 있는 기능으로 인기가 높습니다. NGINX 웹을 통한 콘텐츠 전송을 개선하는 기능으로 높은 평가를 받고 있습니다. 

NGINX 는 비동기식 이벤트 중심 모델을 사용하여 구축되었습니다. 이러한 개념에 대해 잠시 살펴보겠습니다. 

웹 서버, 네트워크 통신, 데이터베이스 관리 등 시스템에서 동시에 많은 요청을 처리해야 하는 경우 비동기 모델을 사용합니다. 비동기 프로그래밍 모델을 사용하면 이러한 시스템의 성능과 확장성을 개선하고 차단 및 멈춤의 위험을 줄일 수 있습니다.

이벤트 기반 모델은 미리 정해진 단계 순서를 따르는 것이 아니라 시스템 내 이벤트에 의해 구동됩니다.

따라서 비동기 및 이벤트 중심 모델을 사용하면 시스템에서 다른 작업의 처리를 차단하지 않고 여러 작업과 이벤트를 함께 처리할 수 있습니다.

아키텍처로 인해 NGINX 는 PHP와 같은 동적 콘텐츠를 처리할 수 없습니다. 실행을 위해 외부 프로세서로 전달해야 합니다. 따라서 정적 콘텐츠, 역방향 프록시, 로드 밸런싱, 메일 프록시 및 HTTP 캐싱에는 NGINX 가 더 적합합니다. NGINX 도 Linux 시스템용으로 권장됩니다.

NGINX 및 Apache 함께 사용

NGINX 와 Apache 를 함께 사용하는 경우가 많습니다. 이렇게 하면 각 서버의 강점을 활용하면서 각 서버의 한계를 극복할 수 있습니다.

Apache 와 NGINX 을 통합하는 가장 일반적인 방법 중 하나는 위 이미지에서 볼 수 있듯이 Apache 앞에 NGINX 을 배치하여 들어오는 모든 HTTP 요청을 처리하는 것입니다. 이 구성은 들어오는 모든 HTTP 요청을 NGINX 로 리디렉션한 다음 정적 콘텐츠 요청은 자체적으로 처리하면서 동적 콘텐츠 요청을 Apache 로 릴레이하는 것입니다.

NGINX 를 Apache 앞에 배치하면 비동기 이벤트 중심 모델로 대량의 동시 연결 요청을 처리하는 NGINX의 기능을 활용할 수 있습니다. 이렇게 하면 요청을 처리하는 데 필요한 열린 스레드와 프로세스 수를 줄여 Apache의 성능을 저하시킬 수 있는 Apache 의 부하를 일부 완화할 수 있습니다.

역방향 프록시 구성은 부하 분산 및 보안 향상과 같은 추가적인 이점도 제공합니다. NGINX 은 여러 Apache 서버에 요청을 분산하여 부하를 분산하고 단일 서버에 과부하가 걸리는 것을 방지할 수 있습니다. 또한 NGINX 은 인터넷과 웹 서버 사이의 버퍼 역할을 하여 공격에 대한 추가적인 보호 계층을 제공할 수 있습니다.

클라우드 컴퓨팅 입문( Cloud Computing ) 자격증 과정을 수강하여 클라우드 컴퓨팅에서 성공할 수 있는 기술을 쌓으세요.

댓글 (1)

  1. Author Photo

    Crystal clear blog, loved the explanation!

댓글 남기기

이메일 주소는 게시되지 않습니다. 필수 필드가 표시됩니다 *