참고 도서 : HTTP 완벽 가이드
웹 서버
학습 목표
- 여러 종류의 소프트웨어 및 하드웨어 웹 서버
- HTTP 통신 단계
- 웹 서버가 HTTP 트랜잭션을 처리하는 것을 단계별로 설명
웹 서버는 HTTP 요청을 처리하고 응답을 제공한다. 모든 웹 서버는 리소스에 대한 HTTP 요청을 받아서 콘텐츠를 클라이언트에게 돌려준다.
웹 서버 기능
웹 서버는 HTTP 및 그와 관련된 TCP 처리를 구현한 것이다. 웹 서버는 자신이 제공하는 리소스를 관리하고 웹 서버를 설정, 통제, 확장하기 위한 관리 기능을 제공한다.
웹 서버 기능
- HTTP 프로토콜 구현
- 웹 리소스를 관리
- 웹 서버 관리
- TCP 커넥션 관리
운영체제
- 컴퓨터 시스템의 하드웨어를 관리
- TCP/IP 네트워크 지원
- 웹 리소스를 유지하기 위한 파일 시스템
- 연산 활동을 제어하기 위한 프로세스 관리
다목적 소프트웨어 웹 서버
다목적 소프트웨어 웹 서버는 네트워크에 연결된 표준 컴퓨터 시스텐에서 동작한다.
아파치 같은 오픈 소스 소프트웨어도 있고, 마이크로소프트 웹 서버 같은 상용 소프트웨어를 사용할 수도 있다.
웹 서버
- 마이크로소프트
- 아파치 웹 서버
- nginx 서버
웹 서버가 하는 일
- 커넥션을 맺는다. (클라이언트의 접속을 받는다 - 가려서)
- 요청을 받는다. (HTTP 요청 메시지를 네트워크로부터 읽는다)
- 요청을 처리한다. (요청 메시지를 해석하고 행동을 취한다)
- 리소스에 접근한다. (메시지에서 지정한 리소스에 접근)
- 응답을 만든다. (올바른 헤더를 포함한 HTTP 응답 메시지 생성)
- 응답을 보낸다. (클라이언트에게 응답을 돌려준다)
- 트랜잭션을 로그로 남긴다.
커넥션 입/출력 처리 아키텍처
- 단일 스레드 웹 서버
한 번에 하나씩 요청을 처리하고, 트랜잭션이 완료되면 다음 커넥션이 처리된다. 처리 도중에 모든 다른 커넥션을 무시된다.
- 멀티프로세스와 멀티스레드 웹 서버
멀티프로세스와 멀티스레드 웹 서버는 여러 요청을 동시에 처리하기 위해 여러 개의 프로세스 혹은 고효율 스레드를 할당한다. 스레드는 필요할 떄마다 만들어질 수도 있고 미리 만들어 질수도 있다. 이는 동시 커넥션을 처리할 때 만들어진 수많은 프로세스나 스레드는 너무 많은 메모리나 시스템 리소스를 소비한다. 그래서 많은 멀티스레드 웹 서비스가 스레드/프로세스의 최대 개수에 제한을 건다.
- 다중 I/O 서버
대량의 커넥션을 지원하기 위해 선택하는 다중 아키텍처이다. 다중 아키텍처는 모든 커넥션을 동시에 가져올 수 있다. 그러다 커넥션의 상태가 바뀌면 작은 양의 처리가 수행된다. 그 처리가 완료되면, 커넥션은 다음번 상태 변경을 위해 열린 커넥션 목록으로 돌아간다.
어떤 커넥션에 실제 수행해야할 일이 있을 때 그 커넥션의 작업을 수행한다. 스레드와 프로세스는 유휴 상태의 커넥션에 매여 기다리느라 리소스를 낭비하지 않는다. 무슨 뜻?
- 다중 멀티스레드 웹 서버
CPU 여러 개의 이점을 살리기 위해 멀티스레딩과 다중화를 겹합하여 여러 스레드는 각각 열려있는 커넥션을 감시하고 각 커넥션에 대해 조금씩 작업을 수행한다. 무슨 뜻….