웹 서버란 (What is a web server?)
- TOC {:toc}
이 글은 MDN Learn web development의 Common question 중 What is a web server?의 내용을 번역 및 정리한 글입니다.
- 제가 필요한 부분 위주로 확인하면서 정리하고 있어 글에 덜 작성된 부분이 있을 수 있습니다.
- 글 작성 후 원문의 내용이 수정되거나 내용을 이해하기 위한 개인적인 설명이나 해석이 있을 수 있습니다. 되도록 원문을 참고해주시길 바랍니다.
- 잘못된 부분이 있다면 댓글이나 그 외 편하신 방법으로 알려주시면 감사하겠습니다.
요약 (Summary)
웹 서버(web server)라는 용어는 하드웨어, 소프트웨어 혹은 두 개가 같이 동작하는 것 모두를 가리킨다.
하드웨어 측면
하드웨어 측면에서
- 웹 서버는 웹 서버의 소프트웨어와 웹 사이트의 컴포넌트 파일(예를 들어, HTML 문서, 이미지, CSS 스타일 문서, 자바스크립트 파일)들을 저장하는 컴퓨터이다.
- 웹 서버는 인터넷에 연결되어 웹에 연결된 다른 기기들과의 물리적인 데이터를 주고받을 수 있도록 돕는다.
소프트웨어 측면
소프트웨어 측면에서
- 웹 서버는 웹 사용자가 호스트 된 파일들에 접근하는 방법을 제어하는 몇 개의 부분(several parts)으로 나눠진다.
- 그중 최소는 HTTP 서버이다.
- HTTP 서버는 URL(웹 주소)과 HTTP(브라우저가 웹 페이지를 보기 위해 사용하는 프로토콜)를 이해하는 소프트웨어이다.
- HTTP 서버는 웹 사이트가 저장하고 있는 웹 사이트의 도메인 이름을 통해 접근할 수 있고, 호스팅 된 웹 사이트의 콘텐츠를 사용자의 기기로 전달한다.
가장 기본적인 단계에서, 브라우저가 웹 서버의 파일을 필요로 할 때, 브라우저는 HTTP를 통해 파일을 요청한다. 요청이 올바른 웹 서버(하드웨어)에 도달하였을 때, HTTP 서버(소프트웨어)는 요청을 받아들인 뒤, 요청된 문서를 찾아, 역시나 HTTP를 이용해 브라우저로 문서를 보낸다. (요청된 문서를 찾지 못하면 대신 404 응답을 반환한다.)
웹 사이트를 게시하기 위해서는, 정적 혹은 동적 웹 서버가 필요하다.
정적 웹 서버
정적 웹 서버, 또는 스택은 HTTP 서버 (소프트웨어)가 있는 컴퓨터(하드웨어)로 구성되어 있다. 서버가 호스팅 된 파일을 그대로 브라우저에 전송하기 때문에, “정적”이라고 한다.
동적 웹 서버
동적 웹 서버는 정적 웹 서버와 추가적인 소프트웨어(대부분 일반적인 애플리케이션 서버와 데이터베이스)로 구성되어 있다. 콘텐츠를 HTTP 서버를 통해 브라우저에 보내기 전에, 애플리케이션 서버가 호스팅 된 파일을 업데이트 하므로 “동적”이라고 한다.
예를 들어, 브라우저에서 보는 최종 웹페이지들을 생성하기 위해, 애플리케이션 서버는 아마 데이터베이스의 콘텐츠로 HTML 템플릿을 채울 수도 있다. MDN 혹은 Wikipedia와 같은 사이트들은 수 천개의 웹페이지들을 가지고 있지만, 전형적으로 이런 사이트들은 몇천 개의 정적 HTML 문서가 아니라 약간의 HTML 템플릿과 엄청나게 큰 데이터베이스로 이루어져 있다. 이런 구성은 내용을 유지하고 전달하기 쉽게 해준다.
더 깊게 알아보기 (Deeper dive)
호스팅 파일들 (Hosting files)
우선, 웹 서버는 웹 사이트의 파일(모든 HTML 문서들과 이미지, CSS 스타일 시트, 자바스크립트 파일, 폰트, 비디오를 포함하는 관련 요소)을 저장해야 한다.
기술적으로, 이 모든 파일을 자신의 컴퓨터에 호스팅할 수도 있지만, 파일을 전용(dedicated) 웹 서버에 저장하는 것이 훨씬 더 편리하다.
왜냐하면 전용 웹 서버는:
- 일반적으로 더 자주 접근할 수 있다(more available). (대부분 켜져 있고 실행 중이다)
- 중단 시간이나 시스템 문제를 제외하고는 보통 항상 인터넷과 연결되어 있다.
- 항상 같은 IP 주소를 갖는다. 이는 전용(dedicated) IP 주소 라고 알려져 있다. (모든 ISPs가 홈 라인에 대해 고정된 IP주소를 제공하는 것은 아니다)
- 일반적으로 제 3자에 의해 유지보수 된다.
이러한 이유로, 좋은 호스팅 제공자를 찾는 것은 웹 사이트를 구축하는 것의 핵심 부분이다. 다양한 서비스 회사들의 조건을 살펴보고 필요와 예산을 충족하는 하나를 선택하자.
웹 호스팅 서비스를 골랐다면 자신의 파일을 웹 서버에 파일들을 업로드해야 한다.
HTTP를 이용해 통신하기 (Communicating through HTTP)
두 번째로, 웹 서버는 HTTP (Hypertext Transfer Protocol)에 대한 지원을 제공한다.
이름이 의미하듯이, HTTP는 어떻게 두 컴퓨터 사이에 hypertext(연결된 웹 문서)를 전송하는 방식을 설명(specify)한다.
- 프로토콜은 두 컴퓨터간의 통신를 위한 규칙의 집합으로
- HTTP는 문자로 된(textual), 독립적인(stateless) 프로토콜이다.
문자로 된(Textual)
모든 명령어들은 일반 텍스트이며 사람들이 읽을 수 있다.
독립적인(Stateless)
서버 혹은 클라이언트는 이전의 통신을 기억하지 않는다.
- 예를 들어, HTTP에만 의존하면 서버는 이전에 입력한 비밀번호나 완료하지 못한 처리(transaction)의 과정을 기억하지 못한다.
- 이러한 일들을 위해서는 애플리케이션 서버가 필요하다. (이런 기술을 다른 문서에서 다룰예정이다)
HTTP는 어떻게 클라이언트와 서버가 통신을 하는지 명확한 규칙을 제공한다. HTTP 자체는 나중에 기술 문서에서 다룰 예정이다.
지금은 이것들만 신경쓰면 된다:
- 일반적으로 오직 클라이언트만이 HTTP 요청을 만들어, 서버에게만 보낼 수 있다. 서버는 클라이언트의 HTTP 요청에 응답한다.
- 서버는 서버 푸쉬라는 방법(mechanism)을 통해 데이터가 요청되기 전에 클라이언트의 캐시에 데이터를 채울(populate)수도 있다.
- HTTP를 통해 파일을 요청할때, 클라이언트는 반드시 파일의 URL을 제공해야 한다.
- 웹 서버는 반드시 최소한 에러 메시지라도 포함하여 모든 HTTP 요청에 응답해야 한다.
웹 서버에서, HTTP 서버는 들어오는 요청들을 처리하고 이에 응답해야 한다.
그 과정을 살펴보자.
- 요청을 받으면, HTTP 서버는 먼저 요청받은 URL이 존재하는 파일과 일치(matches)하는지 확인한다.
- 만약 그렇다면, 웹 서버는 파일 내용을 브라우저에게 돌려보낸다. 그렇지 않다면, 애플리케이션 서버가 필요한 파일을 구축한다.
- 만약 위 두 과정 모두 불가능하면, 웹 서버는 브라우저에게 에러 메시지를 반환한다.
- 일반적으로 404 Not Found
- 404 에러는 너무 흔해서 많은 웹 디자이너들이 404 에러 페이지를 디자인하는데 많은 시간을 할애할 정도이다.
정적 vs. 동적 컨텐츠 (Static vs. dynamic content)
간단하게 말하면 서버는 정적 혹은 동적 콘텐츠든 상관없이 제공할 수 있다.
정적이란 용어는 “있는 그대로 제공되는 것(served as-is)“를 의미한다. 정적 웹 사이트들은 가장 쉽게 구축(set up)할 수 있기 때문에 첫 번째 사이트를 정적 사이트로 만들기를 추천한다.
동적이란 용어는 서버가 컨텐츠를 처리하고, 심지어는 데이터베이스로부터 컨텐츠를 생성하는 것을 의미한다. 이 방법은 더 높은 유연성을 제공하지만, 기술 스택이 더 복잡하고, 웹사이트를 구축하는 것이 훨씬 더 힘들어진다.
-
draft