A A
웹 서버(Web Server)의 모든 것
728x90
반응형

웹 서버란?

웹 서버는 HTTP 요청(request)을 처리하고 응답(response)을 제공한다. 웹 서버라는 용어는 웹 서버 소프트웨어와 웹페이지 제공에 특화된 장비 모두를 가리킨다. 모든 웹 서버는 리소스에 대한 HTTP 요청을 받아서 콘텐츠를 클라이언트에게 돌려준다.

 

1) 웹 서버는 HTTP 및 그와 관련된 TCP 처리를 구현한 것이다.
2) 웹 서버는 자신이 제공하는 리소스를 관리하고 웹 서버를 설정, 통제, 확장하기 위한 관리 기능을 제공한다.
3) 웹 서버는 HTTP 프로토콜을 구현하고, 웹 리소스를 관리하고, 웹 서버 관리기능을 제공한다.
4) 웹 서버는 TCP 커넥션 관리에 대한 책임을 운영체제와 나눠갖는다.
5) 다목적 소프트웨어 웹서버 : 네트워크에 연결된 표준 컴퓨터 시스템에서 작동하는 웹 서버
6) 임베디드 웹 서버 : 일반 소비자용 제품에 내장될 목적으로 만들어진 작은 웹 서버

 

여기서, 운영체제란?

 

운영체제는 컴퓨터 시스템의 하드웨어를 관리하고 TCP/IP 네트워크를 지원하고, 웹 리소스를 유지하기 위한 파일 시스템, 현재 연산활동을 제어하기 위한 프로세스 관리를 제공한다.

 

 

 

웹서버가 하는 일

1) 커넥션을 맺는다. > 클라이언트의 접속을 받아들이거나, 원치않는 클라이언트라면 닫는다.
2) 요청을 받는다. > HTTP 요청 메시지를 네트워크로부터 읽어들인다.
3) 요청을 처리한다. > 요청 메시지를 해석하고 행동을 취한다.
4) 리소스에 접근한다. > 메시지에서 지정한 리소스에 접근한다.
5) 응답을 만든다. > 올바른 헤더를 포함한 HTTP 응답 메시지를 생성한다.
6) 응답을 보낸다. > 응답을 클라이언트에게 돌려준다.
7) 트랜잭션을 로그로 남긴다. > 로그파일에 트랜잭션 완료에 대한 기록을 남긴다.

 

 

 

웹서버가 클라이언트 포스트명 식별하는 방법

웹 서버는 역방향 DNS(reverse DNS)를 사용해서 클라이언트의 IP 주소를 클라이언트의 호스트 명으로 변환하도록 설정되어있다. 웹 서버는 클라이언트 호스트 명을 구체적인 접근 제어와 로깅을 위해 사용할 수 있다. 이 작업은 꽤 시간이 걸릴 수 있기 때문에, 많은 대용량 웹 서버는 이 작업을 꺼두거나 특정 콘텐츠에 대해서만 켜놓는다. 예시로 아파치에서는 HostnameLookups 설정 지시자로 호스트 명 룩업을 켤 수 있다.

 

HostnameLookups off 
<Files ~ "\.(html|htm|cgi)$"> 
  HostnameLookups on 
</Files>

 

 

 

웹 서버의 메시지 수신

커넥션에 데이터가 도착하면, 웹 서버는 네트워크 커넥션에서 그 데이터를 읽어 들이고 파싱하여 요청 메시지를 구성한다. 이 과정에 대해 알아보자.

 

1) 요청줄을 파싱하여 요청 메서드, 지정된 리소스의 식별자(URI)를 찾는다.
2) 메시지 헤더들을 읽는다. 각 메시지 헤더는 CRLF로 끝난다.
3) 헤더의 끝을 의미하는 CRLF로 끝나는 빈 줄을 찾아낸다.
4) 요청 본문이 있다면, 내용을 읽어들인다. (body의 길이는 header에서 content-length 로 정의된다.)

 

요청 메시지를 파싱할때 웹 서버는 입력 데이터를 네트워크로부터 불규칙적으로 받는다. 네트워크 커넥션은 언제든지 무효화될 수 있다. 웹 서버는 요청 메시지를 파싱해서 이해하는 것이 가능한 수준의 분량을 확보할 때까지 데이터를 네트워크로부터 읽어서 메시지 일부분을 메모리에 임시로 저장해둔다. 이를 내부의 자료 구조에 저장한다.

 

 

 

웹 서버 종류

1) 단일 스레드 웹 서버

한 번에 하나씩 요청을 처리하는 웹 서버이다. 트랜잭션이 완료되면 다음 커넥션이 처리한다. 처리 도중에 모든 다른 커넥션이 무시되므로 심각한 성능 문제를 만들어낸다.

 

2) 멀티프로세스와 멀티스레드 웹 서버

여러 요청을 동시에 처리하기 위해 여러개의 프로세스 혹은 고효율 스레드를 할당한다. 스레드/프로세스는 필요할때마다 만들어질 수 있고 미리 만들어질 수 있다. 서버가 무수히 많은 동시 커넥션을 처리할때 그로인해 만들어진 수많은 프로세스/스레드는 너무 많은 메모리나 시스템 리소스를 소비하기 때문에 스레드/프로세스의 최대 개수에 제한을 걸어야한다.

 

3) 다중 I/O 서버

대량의 커넥션을 지원하기 위해, 많은 웹 서버는 다중 아키텍처를 채택했다. 다중 아키텍처에서는 모든 커넥션은 동시에 그 활동을 감시당한다. 커넥션의 상태가 바뀌면 그 커넥션에 대해 작은 양의 처리가 수행된다. 그 처리가 완료되면, 커넥션은 다음번 상태 변경을 알리기위해 열린 커넥션 목록으로 돌아간다. 스레드/프로세스의 리소스 낭비가 적다.

 

4) 다중 멀티스레드 웹 서버

여러개의 스레드는 각각 열려있는 커넥션을 감시하고 각 커넥션에 대해 조금씩 작업을 수행한다.

 

 

 

MIME 타입 결정

웹 서버에게는 응답 본문의 MIME 타입을 결정해야하는 책임이 있다. 웹 서버는 MIME 타입을 나타내기 위해 파일 이름의 확장자를 사용할 수 있다. 웹 서버는 각 리소스의 MIME 타입을 계산하기 위해 확장자별 MIME 타입이 담겨져있는 파일을 탐색한다.

 

MIME 타입 목록 예시
1) application/msword
2) text/html
3) text/plain
4) image/gif

 

 

 

리다이렉션

웹 서버는 성공 메시지 대신 리다이렉션 응답을 반환하는 경우도 있다. 웹 서버는 요청을 수행하기 위해 브라우저가 다른 곳으로 가도록 리다이렉트 할수 있다. Location 응답 헤더는 콘텐츠의 새로운 혹은 선호하는 위치에 대한 URI를 포함한다. 리다이렉션의 응답을 3XX 상태코드로 지칭된다.

 

반응형

'HTTP' 카테고리의 다른 글

TCP 커넥션 관리  (0) 2019.06.22
HTTP 기초개념 알아보기  (0) 2019.06.22
HTTP 메시지  (0) 2019.06.22
URL과 리소스  (0) 2019.06.22
HTTP의 기본 인증  (0) 2019.06.22
Copyright 2024. GRAVITY all rights reserved