웹 서버

Hant·2021년 10월 6일
1

HTTP

목록 보기
4/6
post-thumbnail

1. 다채로운 웹 서버

웹 서버는 HTTP 프로토콜을 구현하고, 웹 리소스를 관리하고, 웹 서버 관리 기능을 제공합니다. 웹 서버는 TCP 커넥션 관리에 대한 책임을 운영체제와 나눠 갖습니다. 운영체제는 컴퓨터 시스템의 하드웨어를 관리하고 TCP/IP 네트워크 지원, 웹 리소스를 유지하기 위한 파일 시스템, 현재 연산 활동을 제어하기 위한 프로세스 관리를 제공합니다. 웹 서버는 여러 가지 형태가 가능합니다.

  • 다목적 소프트웨어 웹 서버: 다목적 소프트웨어 웹 서버는 네트워크에 연결된 표준 컴퓨터 시스템에서 동작합니다.
  • 임베디드 웹 서버: 임베디드 웹 서버는 일반 소비자용 제품에 내장될 목적으로 만들어진 작은 웹 서버입니다. 일반 소비자용 기기를 간편한 웹 브라우저 인터페이스로 관리할 수 있게 해줍니다.

2. 웹 서버가 하는 일

2.1. 클라이언트 커넥션 수락

클라이언트가 이미 서버에 대해 열려있는 지속적 커넥션을 갖고 있다면, 클라이언트는 요청을 보내기 위해 그 커넥션을 사용할 수 있습니다. 그렇지 않다면, 클라이언트는 서버에 대한 새 커넥션을 열 필요가 있습니다.

클라이언트 호스트 명 식별

대부분의 웹 서버는 역방향 DNS(Revers DNS)를 사용해서 클라이언트의 IP 주소를 클라이언트 호스트 명으로 변환하도록 설정되어 있습니다. 웹 서버는 클라이언트 호스트 명을 구체적인 접근 제어와 로깅을 위해 사용할 수 있습니다. 호스트 명 룩업(Hostname Lookup)은, 꽤 시간이 많이 걸릴 수 있어 웹 트랜잭션을 느려지게 할 수 있습니다. 따라서 많은 대용량 웹 서버는 호스트 명 분석(Hostname Resolution)을 꺼두거나 특정 콘텐츠에 대해서만 켜놓습니다.

ident를 통해 클라이언트 사용자 알아내기

몇몇 웹 서버는 또한 IETF ident 프로토콜을 지원합니다. ident 프로토콜은 서버에게 어떤 사용자 이름이 HTTP 커넥션을 초기화했는지 찾아낼 수 있게 해줍니다. 이 정보는 특히 웹 서버 로깅에서 유용하기 때문에, 널리 쓰이는 일반 로그 포맷(Common Log Format)의 두 번째 필드는 각 HTTP 요청의 ident 사용자 이름을 담고 있습니다. ident는 조직 내부에서는 잘 사용할 수 있지만, 공공 인터넷에서는 트랜잭션 시간과 보안 등을 이유로 잘 동작하지 않습니다.

2.2. 요청 메시지 수신

커넥션에 데이터가 도착하면, 웹 서버는 네트워크 커넥션에서 그 데이터를 읽어 들이고 파싱하여 요청 메시지를 구성합니다.

커넥션 입력/출력 처리 아키텍처

  • 단일 스레드 웹 서버: 단일 스레드 웹 서버는 한 번에 하나씩 요청을 처리합니다.
  • 멀티프로세스와 멀티스레드 웹 서버: 멀티프로세스와 멀티스레드 웹 서버는 여러 요청을 동시에 처리하기 위해 여러 개의 프로세스 혹은 고효율 스레드를 할당합니다.
  • 다중 I/O 서버: 다중 아키텍처에서는 모든 커넥션은 동시에 그 활동을 감시당합니다. 커넥션의 상태가 바뀌면, 그 커넥션에 대해 작은 양의 처리가 수행됩니다. 그 처리가 완료되면, 커넥션은 다음번 상태 변경을 위해 열린 커넥션 목록으로 돌아갑니다.
  • 다중 멀티스레드 웹 서버: 컴퓨터 플랫폼에 올라와 있는 CPU 여러 개의 이점을 살리기 위해 멀티스레딩과 다중화(Multiplexing)를 결합합니다.

2.3. 요청 처리

웹 서버가 요청을 받으면, 서버는 요청으로부터 메서드, 리소스, 헤더, 본문을 얻어내어 처리합니다.

2.4. 리소스의 매핑과 접근

웹 서버는 HTML 페이지나 JPEG 이미지 같은 미리 만들어진 콘텐츠를 제공하며, 마찬가지로 서버 위에서 동작하는 리소스 생성 애플리케이션을 통해 만들어진 동적 콘텐츠도 제공합니다.

Docroot

일반적으로 웹 서버 파일 시스템의 특별한 폴더를 웹 콘텐츠를 위해 예약해 둡니다. 이 폴더는 문서 루트 혹은 docroot로 불립니다. 웹 서버는요청 메시지에서 URI를 가져와서 문서 루트 뒤에 붙입니다. 서버는 상대적인 url이 docroot를 벗어나서 파일 시스템의 docroot 이외 부분이 노출되는 일이 생기지 않도록 주의해야 합니다.

docroot: /usr/local/httpd/filles
요청 URL: /specials/saw-blade.gif
서버 리소스: /usr/local/httpd/filles/specials/saw-blade.gif

디렉터리 목록

웹 서버는 경로가 파일이 아닌 디렉터리를 가리키는, 디렉터리 URL에 대한 요청을 받을 수 있습니다. 대부분의 웹 서버는 클라이언트가 디렉터리 URL을 요청했을 때 다음과 같이 몇 가지 다른 행동을 취하도록 설정할 수 있습니다.

  1. 에러를 반환합니다.
  2. 디렉터리 대신 특별한 색인 파일을 반환합니다.
  3. 디렉터리를 탐색해서 그 내용을 담은 HTML 페이지를 반환합니다.

동적 콘텐츠 리소스 매핑

서버들 중에서 애플리케이션 서버라고 불리는 것들은 웹 서버를 복잡한 백엔드 애플리케이션과 연결 하는 일을 합니다. 어떤 리소스가 동적 리소스라면, 애플리케이션 서버는 그에 대한 동적 콘텐츠 생성 프로그램이 어디에 있는지, 그리고 어떻게 그 프로그램을 실행하는지 알려줄 수 있어야 합니다.

서버사이드 인클루드(Server-Side Includes. SSI)

만약 어떤 리소스가 서버사이드 인클루드를 포함하고 잇는 것으로 설정되어 있다면, 서버는 그 리소스의 콘텐츠를 클라이언트에게 보내기 전에 처리합니다. 서버는 콘텐츠에 변수 이름이나 내장된 스크립트가 될 수 있는 어떤 특별한 패턴이 있는지 검사를 받습니다. 특별한 패턴은 변수 값이나 실행 가능한 스크립트의 출력 값으로 치환됩니다.

접근 제어

접근 제어되는 리소스에 대한 요청이 도착했을 때 웹 서버는 클라이언트의 IP 주소에 근거하여 접근을 제어할 수 있고, 혹은 리소스에 접근하기 위한 비밀번호를 물어볼 수도 있습니다.

2.5. 응답 만들고 보내기

한번 서버가 리소스를 식별하면, 서버는 요청 메서드로 서술되는 동작을 수행한 뒤 응답 메시지를 반환합니다. 응답 메시지는 응답 상태 코드, 응답 헤더, 그리고 응답 본문(생성되었다면)을 포함합니다. 웹 서는 받을 때와 마찬가지로 커넥션 너머로 데이터를 보낼 때도 비슷한 이슈에 직면합니다. 서버는 커넥션 상태를 추적해야 하며, 지속적인 커넥션은 특별히 주의해서 다룰 필요가 있습니다.

2.6. 로깅

마지막으로, 트랜잭션이 완료되었을 때 웹 서버는 트랜잭션이 어떨게 수행되었는지에 대한 로그를 로그파일에 기록합니다. 대부분의 웹 서버는 로깅에 대해 여러 가지 설정 양식을 제공합니다.

3. 출처

  • [HTTP 완벽 가이드 - 웹은 어떻게 동작하는가] - 프로그래밍 인사이트
profile
끊임없이 도전하는 프론트 개발자가 되고자 노력합니다.

0개의 댓글