[HTTP] Web Server

참고 도서 : HTTP 완벽 가이드

웹 서버

학습 목표

  • 여러 종류의 소프트웨어 및 하드웨어 웹 서버
  • HTTP 통신 단계
  • 웹 서버가 HTTP 트랜잭션을 처리하는 것을 단계별로 설명

웹 서버는 HTTP 요청을 처리하고 응답을 제공한다. 모든 웹 서버는 리소스에 대한 HTTP 요청을 받아서 콘텐츠를 클라이언트에게 돌려준다.

웹 서버 기능

웹 서버는 HTTP 및 그와 관련된 TCP 처리를 구현한 것이다. 웹 서버는 자신이 제공하는 리소스를 관리하고 웹 서버를 설정, 통제, 확장하기 위한 관리 기능을 제공한다.

웹 서버 기능

  • HTTP 프로토콜 구현
  • 웹 리소스를 관리
  • 웹 서버 관리
  • TCP 커넥션 관리

운영체제

  • 컴퓨터 시스템의 하드웨어를 관리
  • TCP/IP 네트워크 지원
  • 웹 리소스를 유지하기 위한 파일 시스템
  • 연산 활동을 제어하기 위한 프로세스 관리

다목적 소프트웨어 웹 서버

다목적 소프트웨어 웹 서버는 네트워크에 연결된 표준 컴퓨터 시스텐에서 동작한다.

아파치 같은 오픈 소스 소프트웨어도 있고, 마이크로소프트 웹 서버 같은 상용 소프트웨어를 사용할 수도 있다.

웹 서버

  • 마이크로소프트
  • 아파치 웹 서버
  • nginx 서버

웹 서버가 하는 일

  1. 커넥션을 맺는다. (클라이언트의 접속을 받는다 - 가려서)
  2. 요청을 받는다. (HTTP 요청 메시지를 네트워크로부터 읽는다)
  3. 요청을 처리한다. (요청 메시지를 해석하고 행동을 취한다)
  4. 리소스에 접근한다. (메시지에서 지정한 리소스에 접근)
  5. 응답을 만든다. (올바른 헤더를 포함한 HTTP 응답 메시지 생성)
  6. 응답을 보낸다. (클라이언트에게 응답을 돌려준다)
  7. 트랜잭션을 로그로 남긴다.

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

  • 단일 스레드 웹 서버

한 번에 하나씩 요청을 처리하고, 트랜잭션이 완료되면 다음 커넥션이 처리된다. 처리 도중에 모든 다른 커넥션을 무시된다.

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

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

  • 다중 I/O 서버

대량의 커넥션을 지원하기 위해 선택하는 다중 아키텍처이다. 다중 아키텍처는 모든 커넥션을 동시에 가져올 수 있다. 그러다 커넥션의 상태가 바뀌면 작은 양의 처리가 수행된다. 그 처리가 완료되면, 커넥션은 다음번 상태 변경을 위해 열린 커넥션 목록으로 돌아간다.

어떤 커넥션에 실제 수행해야할 일이 있을 때 그 커넥션의 작업을 수행한다. 스레드와 프로세스는 유휴 상태의 커넥션에 매여 기다리느라 리소스를 낭비하지 않는다. 무슨 뜻?

  • 다중 멀티스레드 웹 서버

CPU 여러 개의 이점을 살리기 위해 멀티스레딩과 다중화를 겹합하여 여러 스레드는 각각 열려있는 커넥션을 감시하고 각 커넥션에 대해 조금씩 작업을 수행한다. 무슨 뜻….