웹 서버 소개

소개

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을 입력합니다. 이 요청은 여러 계층을 거치게 되는데, 이 중 하나 이상은 웹 서버일 것입니다. 이 웹 서버는 요청에 대한 응답을 생성하는데, 이 경우에는 DigitalOcean 웹사이트인 홈페이지입니다. 이 과정은 이상적으로 빠르고 24시간 365일 이용 가능해야 합니다.

DigitalOcean의 홈페이지를 방문하는 모든 방문자는 단일 웹 페이지로 경험하지만, 실제로 현대의 대부분의 웹 페이지는 많은 자원의 조합입니다. 웹 서버는 백엔드와 프론트엔드 사이에서 중계자 역할을 하여 HTML 및 CSS 파일부터 JSON 데이터까지 동적으로 생성되거나 정적으로 제공되는 리소스를 제공합니다. 웹 사이트나 온라인 앱을 어떤 용도로든 작업할 계획이 있다면, 웹 서버의 기본 개념과 작동 방식에 익숙해지는 것이 매우 유용합니다.

“웹 서버”라는 용어는 소프트웨어 자체나 해당 소프트웨어가 있는 하드웨어를 모두 가리킬 수 있지만, 이 글에서는 특히 웹 서버 소프트웨어에 관한 것입니다. 이 차이에 대한 자세한 내용은 클라우드 서버 소개를 참조하십시오. 클라우드 서버 소개.

일반적인 사용 사례

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을 파일 이름 및 다른 고유 식별자로 일치시키는 것을 의미하며, 웹 서버의 디렉토리 구조와 일치하는 것에 의존하지 않습니다.

Apache의 .htaccess 파일은 분산 구성을 기능으로 제공하며, 모든 설계 결정은 이 파일 시스템에 대한 세밀한 수준의 제어에 중점을 둔 것에서 유래합니다. Nginx는 동일한 파일 시스템에 초점을 두지 않으며, URI 패턴 일치 및 중앙 집중식 구성에 중점을 둡니다.

동시성 처리

웹 서버를 실행하는 물리적 및 가상 서버는 RAM 및 CPU 처리와 같은 제한된 자원을 가지고 있습니다. 웹 서버가 기본적으로 요청을 관리하는 방식은 자원을 효율적으로 사용하는 데 가장 큰 영향을 미칩니다. 단일 요청은 요청당 전체 프로세스를 생성하거나 이벤트 기반으로 처리될 수 있습니다. 웹 서버가 다중 동시 요청을 효율적으로 처리할 수 있는 능력은 기본적인 설계 결정과 관련이 있습니다.

아파치는 프로세스를 생성하여 요청을 처리하며, 이는 부하가 걸릴 경우 문제가 될 수 있는 속도로 자원을 소비합니다. Nginx의 이벤트 기반 시스템 처리 방식은 더 적은 자원을 사용하며 부하가 걸릴 경우 더 효율적일 수 있습니다.

정적 콘텐츠 제공

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

Nginx는 이벤트 기반 요청 처리로 정적 콘텐츠를 제공하는 데 뛰어납니다. 아파치도 정적 콘텐츠를 제공할 수 있지만 대부분의 설정에서 Nginx와 같은 속도와 효율로 부하가 걸렸을 때에는 아닙니다.

동적 콘텐츠 제공

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

내부적으로 동적 콘텐츠를 처리하면 요청을 외부 라이브러리에 전달하는 추가 계층의 추상화를 제거합니다. Apache는 동적 콘텐츠 처리를 네이티브로 구현하며, 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를 역방향 프록시로 사용하여 여러 개의 전통적인 웹 서버를 배치하고, 부하 또는 규칙 구성에 따라 어떤 웹 서버로 요청을 보낼지를 결정합니다. 이 중개 역할 덕분에 일부 설정에서는 전통적인 Apache 웹 서버의 앞에 역방향 프록시로서 Nginx를 함께 사용할 수도 있습니다.

지원 생태계

Nginx와 Apache는 각각의 개발 팀과 커뮤니티로부터 강력한 지원을 받고 있습니다. 이 두 가지가 가장 인기 있는 오픈 소스 웹 서버이므로 학습 자료도 풍부합니다. Apache는 비영리 기관인 Apache에 의해 지원되며 항상 무료로 사용할 수 있습니다. Nginx의 핵심은 오픈 소스지만, 원하는 기능은 업스트림 건강 검사, 세션 지속성 및 고급 모니터링과 같은 기능이 Nginx Plus 제품으로 제공됩니다.

전통적인 웹 서버에 대한 대안

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

또한, 개발자들이 웹 서버를 관리하는 개발 리소스에 우선순위를 두는 방식이 변화함에 따라, 서버리스, 헤드리스 CMS, Jamstack과 같은 솔루션이 등장했습니다. 이러한 솔루션들은 자체 호스팅된 웹 서버를 필요로 하지 않으며, 대신 웹 서버 레이어를 외부 서비스로 추상화합니다. 웹 서버 레이어의 세밀하고 고급스러운 제어가 필요하지 않은 개발자들에게는 개발 시간을 다른 곳에 집중할 수 있습니다. 더 자세한 내용은 이 기사를 참조하세요. 헤드리스 CMS와 함께하는 Jamstack 또는 DigitalOcean의 앱 플랫폼을 사용한 풀 스택 Jamstack 구현.

결론

이 기사에서는 웹 서버가 무엇인지, 어떻게 사용되는지, 그리고 해결하려는 문제에 대한 기본 안내를 거쳤습니다. 이러한 지식을 갖춘 상태에서 웹 서버 솔루션의 현재 풍경을 탐색하고, 여러분의 요구에 가장 적합한 솔루션을 찾는 데 이 지식을 적용했습니다. 웹 서버를 설정하고 사용하는 방법에 대해 더 알아보려면 웹 서버에 대한 클라우드 커리큘럼 시리즈의 나머지를 확인하세요.

추가 자료

튜토리얼:

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

디지털오션 제품:

  • 디지털오션 드롭렛: 웹 서버를 테스트하고 배포하는 데 사용되는 가상 사설 서버입니다.
  • 디지털오션 함수: 가상 사설 서버 대안으로 사용할 수 있는 서버리스 솔루션입니다. 서버 유지보수를 건너뛰고 애플리케이션 코드에 집중하세요.

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