웹 서버 소개

소개

A web server’s primary role is to serve web pages for a website. A web page can be rendered from a single HTML file, or a complex assortment of resources fitted together. If you want to host your web application on the internet, in many cases you will need a web server.

웹 서버의 가장 일반적인 사용 사례 중 하나는 브라우저에서 웹 사이트를 렌더링하는 데 필요한 파일을 제공하는 것입니다. http://www.digitalocean.com을(를) 방문할 때 인터넷을 통해 요청을 시작하는 URL을 입력합니다. 이 요청은 여러 계층을 통과하는데, 이 중 하나 이상은 웹 서버일 것입니다. 이 웹 서버는 요청에 대한 응답을 생성하며, 이 경우에는 디지털오션 웹사이트, 특히 홈페이지입니다. 이러한 일은 이상적으로 빠르게 24시간 365일 이용 가능해야 합니다.

디지털오션의 홈페이지를 방문하는 모든 방문자는 하나의 웹 페이지로 경험할 수 있지만, 실제로 대부분의 현대 웹 페이지는 많은 리소스의 조합입니다. 웹 서버는 백엔드와 프론트엔드 사이에서 중개자 역할을 하며, HTML 및 CSS 파일부터 JSON 데이터까지 동적으로 생성되거나 정적으로 제공되는 모든 리소스를 제공합니다. 웹 사이트나 온라인 앱과 관련된 작업을 할 계획이 있다면, 웹 서버가 무엇이며 어떻게 작동하는지에 대한 기본을 익히는 것이 매우 유용합니다.

“웹 서버”라는 용어는 소프트웨어 자체나 그가 존재하는 하드웨어를 모두 가리킬 수 있지만, 본 문서에서는 특히 웹 서버 소프트웨어를 의미합니다. 이 차이에 대한 자세한 내용은 클라우드 서버 소개를 참조하십시오. (software) (hardware) (클라우드 서버 소개)

일반적인 사용 사례

A web server handles requests on the internet through HTTP and HTTPS protocol, and is also called an HTTP server. A web server is distinct from other types of servers in that it specializes in handling these HTTP and HTTPS requests, differentiating itself from application servers (e.g. Gunicorn) and servers for other protocols (i.e. WSGI). These other servers work as intermediaries for backend programming languages through external libraries, which is a different level of abstraction than web servers.

웹 서버가 처리하는 일반적인 작업 몇 가지입니다:

  • HTML, CSS 및 JavaScript 파일을 제공합니다.
  • 이미지 및 비디오를 제공합니다.
  • HTTP 오류 메시지 처리합니다.
  • 사용자 요청을 처리합니다. 종종 동시에 처리됩니다.
  • URL 매칭 및 재작성을 지시합니다.
  • 동적 콘텐츠를 처리하고 제공합니다.
  • 최적화된 데이터 사용 및 속도를 위해 콘텐츠를 압축합니다.
  • 정적 콘텐츠에 대한 브라우저 캐싱을 활성화합니다.

실제로, 웹 서버를 사용하는 개인 프로젝트의 예는 다음과 같습니다:

  • 웹사이트를 만들고 싶습니다.
  • 인터넷에 연결되는 앱을 만들고 싶습니다.

이 목록은 절대적으로 완벽하지 않으며 웹 서버가 최종 사용자에게 제공할 수 있는 데이터 유형이 엄격하게 제한되지 않습니다. 예를 들어, 웹 API 요청을 처리하는 웹 서버는 종종 JSON 형식의 데이터로 응답합니다.

웹 서버의 목표

웹 서버는 속도, 가용성, 신뢰성 등의 기대치를 가진 청중을 대상으로 합니다. 인터넷에서 콘텐츠를 제공하는 공유 목적을 가지며, 유효한 웹 서버 솔루션이라고 인정받으려면 다음 측면이 고려되어야 합니다:

  • 가동 시간: 웹 서버가 온라인 및 운영 중인 시간을 나타냅니다. 웹 사이트는 사용자에게 항상 온라인 상태로 제공되어야 하므로 높은 가동 시간이 목표입니다. 이는 안정성과 예측 가능성으로 이어집니다. 사용자가 URL을 입력하거나 웹 사이트로의 링크를 클릭할 때 예상 페이지는 항상 제 시간에 로드되어야 합니다. 업데이트나 유지 관리를 위한 계획된 다운타임을 제외하고는 모든 시간에 웹 서버가 작동해야 합니다. 무작위로 충돌하거나 버그가 있는 웹 서버는 사용자 경험에 부정적인 영향을 미칩니다.
  • 속도: 웹 페이지는 가능한 빨리 로드되어야 합니다. 사용자는 즉각적으로 요청이 충족되기를 원하기 때문에 그렇지 않으면 그들을 잃을 위험이 있습니다. 느린 로딩 웹 페이지에서는 사용자가 첫 번째 로드를 참을 수 있더라도 후속의 장기간 로드마다 그들의 머무름 또는 재방문 의지가 기하급수적으로 감소할 것입니다.
  • 동시성: 이것은 동시에 들어오는 여러 요청을 처리하는 것을 의미합니다. 한 번에 많은 사람들이 웹 사이트를 방문하려고 하면 좋은 일처럼 보이지만, 로드 시간이 크게 느려지고 전체 서버가 다운되는 경우 실제 문제가 됩니다. 물리적 또는 가상 서버는 RAM 및 CPU 계산 성능과 같은 리소스를 가지고 있으며, 웹 서버는 이러한 리소스를 효율적으로 사용해야 합니다.
  • 확장성: 확장성은 기존 서버를 수직 확장을 통해 더 강력하게 만들거나, 수평적으로 확장하여 설정에 더 많은 서버를 추가하는 것을 의미합니다. 수용자 규모가 커짐에 따라, 여러 개의 작은 웹 서버 이상이 필요한 지점에 도달할 수 있습니다.
  • 설치의 용이성: 프로젝트를 신속하게 시작하는 것은 프로젝트의 반복에 있어 중요합니다. 간단하고 반복 가능한 설치 프로세스는 첫 번째 웹 서버를 설정할 때부터 시작하여 규모를 확장할 때 여러 웹 서버를 설정할 때 중요합니다.
  • 문서화: 웹 서버는 복잡합니다. 가장 일반적인 설정은 빠르게 시작할 수 있게 도와줍니다. 그러나 시간이 지남에 따라 요구 사항이 증가할 것입니다. 때로는 자주 사용되지 않는 기능이 필요할 수 있습니다. 그럴 때는 좋은 문서가 필요하며, 이는 필요에 맞는 사용자 지정 솔루션을 만드는 데 필수적입니다.
  • 개발자 지원: 핵심 개발자가 자신의 프로젝트에 헌신하지 않는다면, 귀하의 프로젝트를 그들의 것에 투자해서는 안됩니다. 이는 소프트웨어의 장기 지원 계획과 버그 수정 및 패치 형태로 제공되는 즉각적인 단기 지원 모두를 포함합니다.
  • 커뮤니티 지원: 핵심 개발 팀이 대부분의 작업을 처리할 것이지만, 번창하는 커뮤니티는 공백을 채우는 데 기여합니다. 오픈 소스 프로젝트의 경우, 이는 실제 코드 기여를 의미할 수 있지만, 강력한 커뮤니티는 귀하의 질문에 답변하고 특정 문제를 해결하는 데도 도움을 줄 것입니다.

웹 서버는 다양한 솔루션을 제공할 수 있지만, 그들이 제공하는 솔루션들은 같은 문제를 해결하려는 시도에서 비롯됩니다. 이러한 문제 자체가 시간이 지남에 따라 진화하면서 최종 사용자의 요구 사항과 기대도 함께 변화하므로, 이것은 생동감 있고 끊임없이 발전하는 목록입니다.

웹 서버 솔루션 선택

가장 인기 있는 오픈 소스 웹 서버는 현재 Apache와 Nginx입니다.

Apache는 처음에 나왔으며, 여러 웹 사이트가 각각의 개별 구성 파일로 모두 단일 웹 서버에 존재하는 것이 일반적인 시기에 구축되었습니다. Nginx는 Apache 이후에 등장했는데, 이는 여러 웹 사이트를 하나의 서버에서 제공하는 것에서 필요성이 이동하여 부하가 많을 때 효율적인 방식으로 하나의 서버에서 하나의 웹 사이트를 제공하려는 시기였습니다.

웹 서버는 같은 목표와 문제를 공유하지만, 각 솔루션의 해석과 구현은 다를 것입니다. 이러한 문제에 대한 정확한 답변은 어떠한 웹 서버 솔루션의 정체성을 형성합니다. Nginx와 Apache가 널리 사용되는 것은 이들이 어디서든 발견될 수 있기 때문에 여기에서 강조되었지만, 어떤 웹 서버 솔루션도 주관적일 것입니다. 웹 서버를 선택할 때는 특정 프로젝트에 대한 자신의 요구 사항을 염두에 두는 것이 중요합니다. 이렇게 하면 웹 서버 제공의 풍경이 변하더라도 자신의 요구 사항에 따라 평가 방법이 지속적으로 유지됩니다.

다음은 웹 서버가 웹 서버의 목표를 달성하려는 방식에서 주요 차별화 요소입니다:

구성 파일의 구조

웹 서버는 설정을 구성 파일에 저장합니다. 이러한 파일을 편집하여 웹 서버를 사용자 정의할 수 있습니다. 구성 파일의 저장 및 조직화는 웹 서버 제품을 분할하는 의견이 강한 구조적 문제입니다.

주요 분류는 중앙 집중화와 분산화 사이에 있습니다. 분산 구성 파일은 여러 웹 사이트를 하나의 서버에 호스팅해야 하는 필요에서 비롯된 파일 시스템 수준의 세분화된 제어를 허용합니다. 중앙 집중화된 구성은 하나의 서버에서 여러 웹 사이트를 호스팅하는 데 초점을 두지 않으며 대신 단일 웹 사이트를 효율적으로 제공하는 데 중점을 둡니다. 이러한 구성은 URI 패턴 일치를 기반으로 하며, 이는 URL을 파일 이름 및 기타 고유 식별자와 일치시키는 것입니다. 웹 서버의 디렉터리 구조와 일치시키는 것이 아니라 URI 패턴 일치에 의존합니다.

Apache의 .htaccess 파일은 파일 시스템을 중심으로 분산 구성을 지원하며, 모든 설계 결정은 이러한 파일 시스템에 대한 세분화된 제어에 중점을 둔 것에서 비롯됩니다. Nginx는 동일한 파일 시스템 중심의 초점을 갖고 있지 않으며, URI 패턴 일치 및 중앙 집중화된 구성에 중점을 둡니다.

동시성 처리

웹 서버에서 실행하는 물리적 및 가상 서버에는 RAM 및 CPU 처리와 같은 제한된 리소스가 있습니다. 웹 서버가 기본적으로 요청을 어떻게 관리하느냐에 따라 리소스를 효율적으로 사용하는 데 가장 큰 영향을 미칠 것입니다. 단일 요청은 요청당 전체 프로세스를 생성하거나 이벤트 기반으로 처리될 수 있습니다. 여러 동시 요청을 효율적으로 처리하는 웹 서버의 용량은 기본적인 설계 결정과 관련이 있습니다.

Apache는 프로세스를 생성하여 요청을 처리하며, 이는 부하 아래에서 문제가 될 수 있는 속도로 리소스를 소비합니다. Nginx의 이벤트 기반 시스템 처리 시스템은 리소스를 덜 사용하며 부하 아래에서 더 효율적으로 수행될 수 있습니다.

정적 콘텐츠 제공

웹 페이지 외에도 이미지, 비디오, CSS 파일 및 JavaScript 파일과 같은 기타 리소스에 대한 요청을 웹 서버가 받습니다. 이러한 항목들은 누가 요청하든 항상 동일하기 때문에 이러한 유형의 콘텐츠를 정적 콘텐츠라고 합니다. 웹 페이지 자체가 요청한 사람에게 맞춤화되지 않은 HTML 파일일 수 있으며, 이 또한 정적 콘텐츠로 취급됩니다. 웹 서버는 이 정적 콘텐츠를 압축하여 로드 시간을 단축할 수도 있습니다.

Nginx는 이벤트 기반 요청 처리로 인해 정적 콘텐츠를 제공하는 데 뛰어납니다. Apache도 정적 콘텐츠를 제공할 수 있지만, 대부분의 설정에서 Nginx와 같은 속도와 효율성으로 부하 아래에서는 제공하지 않습니다.

동적 콘텐츠 제공

콘텐츠가 변경되고 처리되며 요청한 사람에 따라 사용자 정의되는 경우 해당 콘텐츠를 동적으로 참조합니다. 예를 들어, 웹 사이트에 로그인한 후에는 종종 웹 사이트가 상단 네비게이션 바에 사용자 이름을 동적으로 채웁니다. 동적 콘텐츠는 추가 복잡성을 추가합니다. 왜냐하면 이것은 웹 서버가 받은 요청을 고유하게 처리해야 하기 때문입니다. 요청당 콘텐츠는 모든 사람에게 제공할 수 없으며, 일반적으로 캐시되지 않습니다.

내부적으로 동적 콘텐츠를 처리하면 요청을 외부 라이브러리로 전달하는 데 필요한 추가 추상화 계층이 제거됩니다. 아파치는 동적 콘텐츠 처리를 네이티브로 구현하며, LAMP(Linux, Apache, MySQL, PHP)와 같은 인기있는 솔루션 스택과 함께 사용됩니다. Nginx는 보다 언어에 중립적이지만 LAMP 스택과 같은 사용 사례에 대한 유사한 솔루션으로 PHP-FPM과 같은 외부 라이브러리가 필요합니다.

리버스 프록시 기능

A reverse proxy sits in front of a traditional web server, becoming an intermediary server that routes HTTP request traffic to web servers behind it. A reverse proxy becomes the gateway that directs traffic between web servers and the internet at large, and often is the layer that directly interfaces with a firewall. While most web servers have reverse proxy capability, Nginx was built and optimized from the ground up to be a robust reverse proxy server.

실제 세계에서 Nginx의 중요성은 그의 역방향 프록시 기능과 효율에 크게 달려 있습니다. 많은 서버 설정에서는 Nginx를 역방향 프록시로 사용하여 여러 전통적인 웹 서버를 배치하며, Nginx를 통해 부하나 규칙 설정에 따라 어떤 웹 서버로 요청을 보낼지 결정합니다. 이 중개 역할은 일부 설정에서 아파치와 함께 작동하여 전통적인 아파치 웹 서버 앞에 역방향 프록시로서 위치할 수 있도록 합니다.

지원 생태계

Nginx와 아파치는 각각의 개발팀과 커뮤니티로부터 강력한 지원을 받고 있습니다. 가장 인기 있는 오픈 소스 웹 서버로서 학습 자료가 풍부합니다. 아파치는 비영리 단체인 Apache의 지원을 받으며 항상 무료로 사용할 수 있습니다. Nginx의 핵심은 오픈 소스이지만 상위 헬스 체크, 세션 지속성 및 고급 모니터링과 같은 원하는 기능은 Nginx Plus 제품 제공으로 제한됩니다.

전통적인 웹 서버 대안

만약 수신되는 HTTP 요청에 대응할 준비가 된 서버를 원한다면, 웹 서버가 이 작업을 가장 잘 수행합니다. HTTP 요청을 처리하는 데 중점을 두지 않을수록 웹 서버는 이상적인 해결책이 되지 않을 수 있습니다. 특히 웹 서버가 제공하는 보조 기능에 대해서는 특히 그렇습니다. 예를 들어, 캐싱과 같은 기능은 설정에 따라 리버스 프록시 또는 CDN 수준에서 더 효율적으로 처리될 수 있습니다.

또한, 개발자들이 개발 리소스를 웹 서버 관리에 투자하는 우선순위를 변경함에 따라, 서버리스, 헤드리스 CMS 및 Jamstack과 같은 해결책들이 등장했습니다. 이러한 해결책들은 자체 호스팅된 웹 서버를 필요로하지 않고, 대신 웹 서버 레이어를 외부 서비스로 추상화합니다. 웹 서버 레이어에 대한 세부적이고 고급스러운 제어가 필요하지 않은 개발자들에게는 개발 시간을 다른 곳에 집중할 수 있습니다. 더 자세한 내용은 헤드리스 CMS와 함께하는 Jamstack 또는 DigitalOcean의 앱 플랫폼을 사용하여 전체 스택 Jamstack을 구현하는 이 기사를 확인하십시오.

결론

이 기사에서는 웹 서버가 무엇이며 어떻게 사용되며 해결하려는 문제에 대한 기본 안내를 진행했습니다. 이러한 지식을 갖추고 나면 현재의 웹 서버 솔루션 환경으로 들어가서 특히 여러분의 필요에 맞는 솔루션을 찾는 데 이 지식을 적용했습니다. 웹 서버를 설정하고 사용하는 방법에 대해 더 알고 싶다면 웹 서버에 관한 우리의 클라우드 커리큘럼 시리즈의 나머지를 확인하세요.

추가 자료

튜토리얼:

  • 아파치 설치 방법: 첫 번째 아파치 서버를 설정하는 단계별 지침입니다. 이 솔루션은 분산 구성을 통한 세밀한 제어와 PHP와 같은 인기있는 프로그래밍 언어로의 동적 웹 페이지 내부 처리에 뛰어납니다.
  • Nginx 설치 방법: 첫 번째 Nginx 서버를 설정하는 단계별 지침입니다. 이 솔루션은 중앙 집중식 구성, 정적 자산 제공, 역방향 프록시 역할 및 고 동시성 트래픽 처리에 뛰어납니다.
  • 아파치 대 Nginx: 실용적인 고려 사항: 웹 서버 솔루션 환경의 두 주요 플레이어에 대한 보다 심층적인 살펴보기.

디지털오션 제품:

  • 디지털오션 드롭렛: 웹 서버를 테스트하고 배포할 수 있는 가상 프라이빗 서버입니다.
  • 디지털오션 펑션: 서버 유지보수를 건너뛰고 애플리케이션 코드에 집중할 수 있는 서버리스 솔루션입니다.

Source:
https://www.digitalocean.com/community/conceptual_articles/introduction-to-web-servers