웹 서버

노승현·2024년 7월 29일

내일배움 사전캠프

목록 보기
35/38

다음은 웹 서버에 대한 글이다. 웹 서버는 정확히 무엇이고, 웹 서버는 어떻게 작동하는가에 대해 공부할 예정이다.

웹 서버란 무엇인가- 요약

웹 서버는 아래 하드웨어, 소프트웨어 측면 또는 두 개가 같이 동작하는 것을 의미할 수 있다.

하드웨어 측면에서, 웹 서버는 웹 서버의 소프트웨어와 웹사이트의 컴포넌트 파일들을 저장하는 컴퓨터입니다.
(컴포넌트 파일들은 HTML, 이미지, CSS 스타일시트, 그리고 JavaScript에 해당)
웹 서버는 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹 서버의 데이터(컴포넌트 파일들)를 주고 받을 수 있도록 한다.
브라우저가 네이버 사이트를 요청해 웹 서버에 있는 파일들을 브라우저에 받아와 naver.com을 그려주는 것과 같은 방식? 우리가 지금까지 공부한 서버에 대한 개념으로 생각된다.

소프트웨어 측면에서, 웹 서버는 기본적으로 웹 사용자가 어떻게 호스트 파일들에 접근하는 지를 관리한다.
이 문서에서 웹 서버는 HTTP 서버로 국한한다. HTTP 서버는 URL(웹 주소)과 HTTP(브라우저 웹 프로토콜)의 소프트웨어 일부다.
이 부분은 브라우저가 네이버의 서버에 어떻게 어떤 방식으로 연결해 요청하는지 그리고 받아오는 지에 대한 것(프로토콜)을 말하는 것 같다.

가장 기본적인 단계에서 브라우저가 웹 서버에서 불려진 파일을 필요로 할 때, 브라우저는 HTTP를 통해 파일을 요청한다.
요청이 올바른 웹 서버(HW)에 도달했을 때, HTTP 서버(SW)는 요청된 문서를 HTTP를 이용해 보내준다.

먼저 웹 사이트를 공개하려면, 정적 혹은 동적 웹 서버가 필요하다.
정적 웹 서버 or Stack은 HTTP 서버(SW)가 있는 컴퓨터(HW)로 구성되어 있다. 서버가 그 불려진 파일을 당신의 브라우저에게 전송해야 하기 때문에, 이것을 "정적"이라 부른다.

동적 웹 서버는 정적 웹 서버와 추가적인 소프트웨어(대부분 일반적인 애플리케이션 서버와 DB)로 구성되어 있다.
애플리케이션 서버가 HTTP 서버 통해 브라우저에게 불려진 파일들을 전송하기 전에, 애플리케이션 서버가 업데이트하기 때문에 "동적"이라 부른다.

예시로 브라우저에서 보는 최종 웹페이지들을 생성하기 위해, 애플리케이션 서버는 아마 데이터베이스로 온 컨텐츠들로 이루어진 HTML 템플릿을 채울지 모른다.
MDN or WikiPedia와 같은 사이트들은 수 천개 웹페이지들을 가지고 있지만, 그것들은 실제 HTML 문서가 아니라 오직 약간의 HTML 템플릿과 엄청 큰 데이터베이스로 구성되어 있다. 이 구성은 내용들을 전달하고 관리하기 쉽고 빠르게 만들어 준다.
이 부분은 저번에도 공부했듯이, 인터넷 웹 페이지의 경우 HTML 문서 껍데기와 그 안에 데이터를 집어 넣는 것 뿐이고, 핸드폰 앱 같은 경우 완전히 새로 데이터와 함께 캔버스를 그려야 한다는 것을 기억하고 있다.



웹 서버- 더 깊게 파헤치기

웹 페이지를 가져오기 위해서, 이미 말했듯 브라우저는 저장 공간에 있는 요청된 파일들을 가지고 있는 웹 서버에게 요청을 보낸다.

호스팅 파일들

웹 서버는 처음에 HTML 문서라 불리는 웹 사이트의 파일들과 이미지, CSS 스타일시트, JavaScript, 폰트, 비디오를 포함한 관련된 것들을 저장해야 한다.
기술적으로 컴퓨터에 있는 그 파일들을 불러올 수 있지만, 그것들을 전담하는 웹 서버에 저장하는 것이 훨씬 편리하다.
전담하는 웹서버는 아래 특징을 가진다.

  • 항상 실행중이어야 한다
  • 항상 인터넷과 연결되어야 한다
  • 항상 같은 IP 주소를 가지고 있어야 한다 (모든 ISP가 홈 라인에 대해 고정된 IP 주소를 제공하는 것은 아니다)
  • 제 3자에 의해 유지보수된다

이런 이유로, 좋은 호스팅 제공자를 찾는 것은 웹사이트를 구축하는 것의 핵심 부분이다. 다양한 서비스 회사들의 조건을 살펴보고 필요와 예산을 충족하는 하나를 선택한다. (이 서비스는 무료부터 매달 수백만원까지 존재한다.)
웹 호스팅 솔루션을 설정했다면, 웹 서버에 파일들을 업로드하면 된다.

HTTP를 이용해 통신하기

웹 서버는 HTTP를 지원한다. HTTP는 두 컴퓨터 간 어떻게 HyperText(연결된 웹문서(를 전송하는 지를 서술한다.
프로토콜은 두 컴퓨터간 통신을 위한 규칙의 집합이다. HTTP는 문자로 된 독립적인 프로토콜이다.
이 통신 규약에는 아래 특징이 있다.

  • Textual(문자로 구성됨)- 모든 명령어들은 기본 문자이며 사람들이 읽을 수 있다.
  • Stateless(독립적)- 서버 or 클라리언트는 이전의 통신을 기억하지 못한다.
    예를 들면, HTTP에만 의존하면 서버는 우리가 입력한 비밀번호나 처리한 단계를 기억하지 못한다. 우리는 그러한 일들을 위한 애플리케이션 서버가 필요하다.
    HTTP는 어떻게 클라이언트와 서버가 통신을 하는 지 명확한 규칙을 제공한다. 기술적으로 자세히 보진 않고, 간단한 것만 기억해보자
  • 오직 클라이언트만이 HTTP 요청을 할 수 있고, 서버에게만 보낼 수 있다. 그리고 서버는 오직 클라이언트의 HTTP 요청에 응답할 수 있다.
  • HTTP를 통해 파일 요청할 때, 클라이언트는 반드시 URL 파일들을 제공해야 한다.
  • 웹 서버는 반드시 최소한의 에러 메세지를 포함해 모든 HTTP 요청에 응답해야 한다.

웹 서버에서 HTTP 서버는 들어오는 요청들에 대해 응답하고, 처리해야 한다.

  1. 요청 받으면, HTTP 서버는 먼저 요청받은 URL이 존재하는 파일과 매칭 되는지 확인한다.
  2. 만약 매칭된다면, 웹 서버는 그 파일 내용을 브라우저에게 되돌려준다. 만약 그렇지 않으면, 애플리케이션 서버는 필요한 파일을 구축한다.
  3. 만일 위 둘의 과정이 불가능하면, 웹 서버는 브라우저에게 에러 메세지를 반환한다. 대부분의 에러 메세지는 "404 Not Found"다.
    (이 에러는 너무 많이 발생해서 많은 웹 디자이너들이 404 error page를 디자인 하는데 많은 시간을 소요한다고 한다.)

정적 vs 동적 컨텐츠

간단하게 말하면, 서버는 정적 or 동적 컨텐츠 모두 제공이 가능하다.
"정적"은 "있는 그대로 제공되는 것"을 의미한다. 정적 웹 사이트들은 설치하기 가장 쉽기 때문에 웹 사이트를 처음 만들 경우 첫 사이트를 정적 사이트로 만드는 것을 추천한다.

"동적"은 서버가 컨텐츠를 처리하는 것으로 심지어는 컨텐츠를 데이터베이스로부터 생성하는 것을 의미한다. 이 방법은 더 많은 유연성을 제공하지만, 기술적 스택이 더 다루기가 힘들어지고, 웹 사이트를 구축하는 게 훨씬 더 복잡해진다.


애플리케이션 서버는 아주 많이 있어서 특정 하나만 추천하기는 어렵다. 어떤 애플리케이션 서버는 블로그나 위키, 인터넷 쇼핑, CMS라 불리는 다른 것들 같은 특수한 웹 사이트에 특화되어 있다. 만일 동적 웹 사이트를 구축한다면, 우리의 필요에 맞는 도구를 선택하는 시간을 가지는 게 좋다. 웹 서버 프로그래밍을 배우기 원하는 경우가 아니라면, 애플리케이션 서버를 새로 만들 필요는 없다.

0개의 댓글