소개
웹 서버의 주요 역할은 웹사이트의 웹 페이지를 제공하는 것입니다. 웹 페이지는 단일 HTML 파일에서 렌더링될 수도 있고, 여러 자원이 조합된 복잡한 모음에서 렌더링될 수 있습니다. 인터넷에서 웹 애플리케이션을 호스팅하고 싶다면, 많은 경우 웹 서버가 필요합니다.
웹 서버의 가장 일반적인 사용 사례 중 하나는 브라우저에서 웹사이트를 렌더링하는 데 필요한 파일을 제공하는 것입니다. http://www.digitalocean.com
을 방문할 때, URL을 입력하여 인터넷을 통해 요청을 시작합니다. 이 요청은 여러 계층을 통과하며, 그 중 하나 이상이 웹 서버입니다. 이 웹 서버는 요청에 대한 응답을 생성하며, 이 경우 DigitalOcean 웹사이트인 것이며 특히 홈페이지입니다. 이理想적으로는, 이를 빠르게하고 24/7로 가능하게 합니다.
DigitalOcean의 홈페이지를 방문하는 모든 방문자는 그를 단일 웹 페이지로 경험할 것이지만, 실제로는 현대의 대부분의 웹 페이지는 많은 자원의 조합입니다. 웹 서버는 백엔드와 프론트엔드 간의 중개자로서, HTML 및 CSS 파일부터 JSON 데이터까지의 자원을 동적으로 생성하거나 정적으로 제공합니다. 웹사이트나 온라인 앱을 어떤 방식으로든 작업하고자 한다면, 웹 서버가 무엇인지 그리고 어떻게 작동하는지에 대한 기본을 알아熟知하는 것은 매우 유용합니다.
“웹 서버”라는 용어는 소프트웨어 자체에 또는 그것이 존재하는 하드웨어에 해당할 수 있지만, 이 기사는 특정으로 웹 서버 소프트웨어에 참조합니다. 이 차이에 대한 더 자세한 내용은 우리의 클라우드 서버導入를 확인하세요.
一般的 사용 사례
웹 서버는 인터넷에서 HTTP와 HTTPS 프로토콜을 통해 요청을 처리하며, HTTP 서버라고도 불립니다. 웹 서버는 다른 유형의 서버와는 달리 HTTP와 HTTPS 요청을 처리하는 데 특화되어 있으며, 응용 서버(예: Gunicorn) 및 다른 프로토콜을 위한 서버(즉, WSGI)와 구분됩니다. 이러한 다른 서버들은 백엔드 프로그래밍 언어를 외부 라이브러리를 통해 중재자로서 작동하는 반면, 웹 서버와는 다른 수준의 추상화입니다.
다음은 웹 서버가 처리하는 일반적인 작업들입니다:
- HTML, CSS, 그리고 JavaScript 파일을 제공합니다.
- 이미지와 동영상을 제공합니다.
- HTTP 오류 메시지를 처리합니다.
- 사용자 요청을 처리하며, 종종 동시에 합니다.
- URL 매칭 및 재작성을 지시합니다.
- динамичес 콘텐츠를 처리하고 제공합니다.
- 콘텐츠를 압축하여 데이터 사용 및 속도를 최적화합니다.
- 스태틱 콘텐츠에 대한 브라우저 캐싱을 활성화합니다.
실무적으로, 웹 서버를 사용하는 개인 프로젝트 몇 가지를 소개합니다:
- 웹사이트를 만들고 싶습니다.
- 인터넷에 연결하는 앱을 만들고 싶습니다.
이 목록은 결코 포괄적이지 않으며, 웹 서버는 최종 사용자에게 제공할 수 있는 데이터 유형에 구속되지 않습니다. 예를 들어, 웹 API 요청을 처리하는 웹 서버는 종종 JSON과 같은 형식으로 데이터를 응답합니다.
웹 서버의 목표
웹 서버는 속도, 가용성, 신뢰성 등을 기대하는 사용자층을 대상으로 합니다. 그들은 인터넷에서 콘텐츠를 제공하는 공통된 목적을 가지고 있으며, 상용 가능한 웹 서버 솔루션으로 고려되려면 다음의 측면을 고려해야 합니다:
- 업타임: 웹 서버가 온라인이 되고 작동하는 시간을 의미합니다. 웹사이트는 사용자를 서비스하기 위해 항상 온라인 상태여야 하므로 높은 업타임이 목표입니다. 이는 안정성과 예측 가능성으로 이어집니다. 사용자가 URL을 입력하거나 여러분의 웹사이트로 이동하는 링크를 클릭할 때마다, 기대한 페이지가 매번 그리고 언제든지 로드되어야 합니다. 예외는 업데이트나 유지보수를 위한 계획된 다운타임뿐입니다. 버그가 많거나 임의로 충돌하는 웹 서버는 사용자 경험에 부정적인 영향을 줄 수 있습니다.
- 속도: 웹 페이지는 가능한 한 빨리 로드되어야 합니다. 사용자들은 즉시 요청이 충족되고 싶어합니다. 그렇지 않으면 그들을 잃을 위험이 있습니다. 느린 로딩 속도의 웹 페이지에서도, 사용자가 첫 번째 로드를 기다렸다고 해도, 각각의 이후 느린 로드가 그들이 남을 의지성을 지수적으로 감소시킬 수 있습니다.
- 동시성: 이는 동시에 들어오는 여러 요청을 처리하는 것을 의미합니다. 한 번에 많은 사람들이 웹사이트를 방문하려고 시도하는 것은 좋은 일이 아닐 수 있지만, 로드 시간이 매우 느려지고 전체 서버가 다운될 때 실제로 문제가 됩니다. 물리적이거나 가상적인 서버는 RAM과 CPU 연산력과 같은 자원이 제한적입니다. 웹 서버는 이러한 자원을 효율적으로 사용해야 합니다.
- 확장성: 확장성은 기존 서버를 수직 스케일링으로 더 강력하게 만들거나, 수평 스케일링으로 더 많은 서버를 설정에 추가하는 것을 의미합니다. 귀하의 감시자를 성장시킬 때, 하나 또는 두 개의 작은 웹 서버만으로는 부족할 수 있습니다.
- 설치 쉬움: 프로젝트를 빨리 구동하고 실행하는 것은 프로젝트의 반복의 열쇠입니다. 간단하고 반복 가능한 설치 과정은 첫 번째 웹 서버를 설정할 때뿐만 아니라 확장할 때 여러 웹 서버에게 중요합니다.
- 문서화: 웹 서버는 복잡합니다. 가장 일반적인 설정은 빨리 발전할 수 있지만, 귀하의 필요는 시간이 지날수록 커질 것입니다. 종종 귀하는 덜 일반적으로 사용된 기능을 필요로 할 것입니다. 그 시간이 오면, 좋은 문서화는 귀하의 필요에 맞춘 맞춤 솔루션을 만드는 데 필수적입니다.
- 개발자 지원: 핵심 개발자들이 자신들의 프로젝트에 충성하지 않는다면, 당신의 프로젝트를 그들의 프로젝트에 투자하면 안 됩니다. 이는 그들의 소프트웨어에 대한 장기 지원 계획과 더불어, 버그 수정과 패치 형태로 제공하는 즉각적인 짧은 기간 지원을 포함합니다.
- 커뮤니티 지원: 핵심 개발 팀이 대부분의 무거운 일을 맡긴다고 하지만, 번영하는 커뮤니티가 그 공간을 채우는 데 기여합니다. 오픈 소스 프로젝트의 경우, 이는 실제 코드베이스에 기여를 의미할 수 있지만, 강력한 커뮤니티는 또한 당신의 질문에 답하고 특정 문제에 도움을 줄 것입니다.
웹 서버는 다양한 솔루션을 제공할 수 있지만, 그들이 제공하는 솔루션은 이와 같은 문제들을 해결하려는 시도에서 비롯됩니다. 이러한 문제들 자체는 시간이 지나면서 엔드 사용자의 필요와 기대와 함께 진화하며, 이는 살아있는 것이며 항상 진화하고 있는 목록이 됩니다.
웹 서버 솔루션 선택
현재 가장 인기 있는 오픈 소스 웹 서버는 Apache와 Nginx입니다.
Apache가 먼저 등장했고, 단일 웹 서버에 여러 웹사이트가 각각의 개별 구성 파일로 존재하는 시절에 만들어졌습니다. Nginx는 Apache 후에 등장했으며, 단일 서버에서 여러 웹사이트를 서비스하는 것에서 벗어나고, 로드를 감당할 수 있을 정도로 극적으로 효율적으로 한 웹사이트를 단일 서버에서 서비스하는 방향으로 필요가 변했습니다.
웹 서버는 같은 목표와 문제를 공유하지만, 각 솔루션의 해석과 구현은 다를 것입니다. 이러한 문제에 대한 정확한 답은 각 웹 서버 솔루션의 식별을 형성합니다. Nginx와 Apache는 널리 사용되는 이유로 여기서 강조됩니다만, 모든 웹 서버 솔루션은 의견을 가질 것입니다. 웹 서버를 선택할 때, 특정 프로젝트에 대한 자신의 필요를 고려해야 합니다. 그렇게 하면, 即使웹 서버 제공 상황이 변해도, 자신의 요구 사항에 따라 평가 방법이 안정적일 것입니다.
다음은 웹 서버가 웹 서버의 목표를 달성하기 위해 시도하는 몇 가지 주요 차별 요소입니다:
구성 파일의 구조
웹 서버는 설정을 구성 파일에 저장합니다. 이 파일을 편집하여 웹 서버를 사용자 정의할 수 있습니다. 구성 파일의 저장과 구성은 웹 서버 제품을 분할하는 의견이 있는 구조적인 문제입니다.
중앙집중화와 분산화 간의 주요 차이가 있습니다. 분산화된 구성 파일은 파일 시스템 수준에서 더细微한 제어 수준을 허용합니다. 이는 하나의 서버에서 여러 웹사이트를 호스팅하는 필요에서 비롯됩니다. 중앙집중화된 구성은 하나의 서버에서 여러 웹사이트를 호스팅하는 것에 주의를 않고, 대신 단일 웹사이트를 효율적으로 제공하는 데 집중합니다. 이러한 구성은 웹 서버의 디렉토리 구조에 대한 일치 대신, URL을 파일명과 기타 고유 식별자에 일치시키는 URI 패턴 일치에 의존합니다.
Apache의 .htaccess
파일은 분산화된 구성을 기능으로 지원하며, 모든 설계 결정은 이 파일 시스템에 대한 주목과 더细微한 제어 수준에서 흐름합니다. Nginx는 같은 파일 시스템 주목이 없고, URI 패턴 일치와 중앙집중화된 구성에 집중합니다.
동시성 처리
웹 서버를 실행하는 물리적 및 가상 서버는 RAM과 CPU 처리와 같은 제한된 자원을 가지고 있습니다. 웹 서버가 요청을 기본적으로 관리하는 방식은 자원을 효율적으로 사용하는 데 가장 큰 영향을 미칩니다. 단일 요청은 요청ごと에 전체 프로세스를 생성할 수 있거나, 이벤트 기반으로 처리될 수 있습니다. 웹 서버가 여러 동시 요청을 효율적으로 처리할 수 있는 용량은 기본적인 설계 결정과 관련이 있습니다.
Apache는 프로세스를 생성하여 요청을 처리합니다. 이는 부하가 발생할 때 문제가 될 수 있는 비율로 자원을 소비합니다. Nginx의 이벤트 기반 시스템 처리 시스템은 더 적은 자원을 사용하며 부하 상황에서 더 높은 성능을 발휘할 수 있습니다.
靜態 콘텐츠 제공
웹 페이지 외에도, 웹 서버는 이미지, 비디오, CSS 파일, 자바스크립트 파일과 같은 다른 자원에 대한 요청을 받습니다. 이러한 항목은 누가 요청하든 항상 같으므로, 이러한 유형의 콘텐츠는靜態으로 지정됩니다. 종종 웹 페이지 자체도 HTML 파일로, 요청하는 사람에게 맞춤화되지 않으며,靜態 콘텐츠로 취급됩니다. 웹 서버는 또한 이러한靜態 콘텐츠를 압축하여 더 나은 로드 시간을 위해 제공할 수 있습니다.
Nginx는 이벤트 기반 요청 처리 덕분에靜態 콘텐츠 제공에 능숙합니다. Apache도�静態 콘텐츠를 제공할 수 있지만, 대부분의 설정에서 Nginx에 비해 부하 상황에서 같은 속도와 효율로 처리하지 못합니다.
動態 콘텐츠 제공
콘텐츠가 요청하는 사람에 따라 변경되고, 처리되고, 맞춤형으로 변환되는 경우, 해당 콘텐츠는 동적 콘텐츠라고 불립니다. 예를 들어, 웹사이트에 로그인한 후, 종종 웹사이트가 상단 탐색バー에 사용자 이름을 동적으로 채웁니다. 동적 콘텐츠는 웹 서버가 요청을 받을 때마다 많은 요청을 고유하게 처리하도록 강제하여額外卖의 복잡성을 추가합니다. 요청에 맞춘 콘텐츠는 모든 사람에게 제공될 수 없으며, 범용 캐싱할 수 없습니다.
동적 콘텐츠를 내부적으로 처리함으로써 요청을 외부 라이브러리로 넘겨야 하는 추가적인 추상 계층을 제거할 수 있습니다. 아파치는 동적 콘텐츠 처리를 기본적으로 구현하며, LAMP(Linux, Apache, MySQL, PHP)과 같은 인기 있는 솔루션 스택을 제공합니다. Nginx는 더 많은 언어에 중립적이지만, LAMP 스택과 같은 사용 사례에 대한 유사한 솔루션을 제공하기 위해 PHP-FPM과 같은 외부 라이브러리를 필요로 합니다.
리버스 프록시 기능
후방 프록시는 전통적인 웹 서버 앞에 위치하며, 그 뒤에 있는 웹 서버로 HTTP 요청 트래픽을 라우팅하는 중재 서버로 작동합니다. 후방 프록시는 웹 서버와 인터넷 간의 트래픽을 방향지시하는 게이트웨이가 되며, 종종 방화벽과 직접 인터페이스하는 계층입니다. 대부분의 웹 서버는 후방 프록시 기능을 가지고 있지만, Nginx는 견고한 후방 프록시 서버로서地从부터 최적화되고 구축되었습니다.
Nginx의 실제 사용에서의 중요성은 후방 프록시 기능과 효율성에 깊이 귀결됩니다. 많은 서버 설정에서 여러 전통적인 웹 서버를 Nginx 후방 프록시 뒤에 배치하며, Nginx를 사용하여 로드나 규칙 구성에 따라 어떤 웹 서버에 요청을 보낼지 결정합니다. 이 중재 역할 덕분에 일부 설정에서 Apache와 쌍을 이루어, 전통적인 Apache 웹 서버 앞의 후방 프록시로 작동할 수 있습니다.
지원 생태계
Nginx와 Apache는 각각의 개발 팀과 커뮤니티에서 강력한 지원을 받고 있습니다. 가장 인기 있는 오픈 소스 웹 서버로서, 학습 자원이 풍부합니다. Apache는 Apache 재단, 무수익 단체에 의해 지원받으며, 항상 무료로 사용할 수 있습니다. Nginx의 코어는 오픈 소스이지만, 원하는 기능은 Nginx Plus 제품 제공뒤에 잠겨 있으며, 업스트림 헬스 체크, 세션 지속성, 고급 모니터링과 같은 기능을 제공합니다.
전통적인 웹 서버의 대안
HTTP 요청에 대한 응답을 언제나 준비된 서버가 필요하다면, 웹 서버가 이 작업을 가장 잘 수행합니다. HTTP 요청을 처리하는 데 집중하지 않을수록, 웹 서버는 더 이상理想的한 해결책이 아닐 수 있습니다. 이는 특히 웹 서버가 제공하는 부가 기능에게 더욱 그렇습니다. 예를 들어, 캐싱과 같은 기능은 설정에 따라 리버스 프록시나 CDN 수준에서 더 효율적으로 처리될 수 있습니다.
또한, 개발자들이 웹 서버 관리에 대한 개발 자원을 할애하는 우선순위를 변경함에 따라, 서버리스, 헤드리스 CMS, 그리고 Jamstack와 같은 해결책이 등장했습니다. 이러한 해결책들은 자체 호스팅된 웹 서버를 필요로 하지 않으며, 웹 서버 계층을 외부 서비스로 추상화합니다. 웹 서버 계층에 대한 세부적이거나 고급 제어가 필요하지 않은 개발자들에게는 개발 시간을 다른 곳에 집중할 수 있습니다. 더 알고 싶다면, 이 글을 확인하세요: 헤드리스 CMS와 Jamstack 또는 디지털 오션의 앱 플랫폼을 사용한 풀 스택 Jamstack 구현.
결론
이 статье에서는 웹 서버가 무엇인지, 어떻게 사용되는지, 그리고 어떤 문제를 해결하려는지에 대한 기본적인 이해를 쌓았습니다. 이 지식을 바탕으로 현재의 웹 서버 솔루션의 전망을 탐험하고, 자신의 필요에 맞는 솔루션을 찾기 위해 지식을 적용했습니다. 웹 서버를 설정하고 사용하는 방법에 대해 더 알아보려면, 우리의 클라우드 커리큘럼 시리즈 중 웹 서버에 관한 나머지 부분을 확인하세요.
추가 자원
튜토리얼:
- Apache 설치 방법: 첫 번째 Apache 서버를 설정하는 단계별 지침. 이 솔루션은 분산형 구성을 통한 세분화된 제어와, PHP와 같은 인기 있는 프로그래밍 언어를 통한 동적 웹 페이지의 내부 처리에 능숙합니다.
- Nginx 설치 방법: 첫 번째 Nginx 서버를 설정하는 단계별 지침. 이 솔루션은 중앙 집중식 구성,靜態 자산 제공, 리버스 프록시 역할, 고 동시성 트래픽 처리에 능숙합니다.
- Apache vs Nginx: 실무적 고려 사항: 웹 서버 솔루션 분야의 두 대 두를 더 깊이 이해하고자 합니다.
디지털오션 제품:
- 디지털오션 드롭л렛: 웹 서버를 테스트하고 배포할 수 있는 가상 사설 서버.
- 디지털오션 함수: 가상 사설 서버의 대안으로 사용할 수 있는 서버리스 솔루션. 서버 유지보수를 건너뛰고, 응용 프로그램 코드에 집중하세요.
Source:
https://www.digitalocean.com/community/conceptual_articles/web-servers-introduction