이번 장에서는 ...
여러 종류의 소프트웨어 및 하드웨어 웹 서버를 알아본다.
어떻게 웹 서버가 HTTP 트랜잭션을 처리하는지 단계별로 알아본다.
웹 페이지
웹 사이트
웹 서버
Q. "웹 사이트가 응답하지 않아" ---> "____가 응답하지 않아서, 웹 사이트를 사용할 수 없어"
A. "웹 사이트가 응답하지 않아" ---> "웹 서버가 응답하지 않아서, 웹 사이트를 사용할 수 없어"
리소스에 대한 HTTP 요청을 받아서 클라이언트에게 컨텐츠를 제공
HTTP 프로토콜 구현
웹 리소스 관리
웹 서버 관리 기능
웹서버를 컴퓨터 시스템에 설치하고 실행
넷크래프트가 발표한 웹 서버 시장 점유율 (2021년 7월)
커넥션 맺기
HTTP 요청 받기
요청 처리하기
리소스에 접근하기
HTTP 응답 만들기
응답을 클라이언트에게 보내기
로그 파일에 트랜잭션 로그 남기기
지속 커넥션
을 맺고 있다면, 그 커넥션 사용웹 서버에서 클라이언트의 IP주소를 호스트명으로 변경하도록 설정
호스트명 룩업은 시간이 많이 걸리기 때문에 트랜잭션을 느리게할 수 있음.
--->호스트명 분석을 꺼두거나 특정 컨텐츠에 대해서만 켜둠
Q. DNS의 역할은?
정답호스트 이름 ---> IP주소로 변환
Reverse DNS
왜 Reverse DNS로 호스트 이름을 찾을까?
웹 서버는 네트워크 커넥션에서
웹 서버는 입력 데이터를 네트워크로부터 불규칙적으로 받는다.
따라서, 파싱해서 데이터를 이해할 수 있는 수준의 분량을 확보할 때까지 메시지 일부분을 메모리에 임시로 저장한다.
웹 서버는 파싱한 요청 메시지를 쉽게 다룰 수 있도록 내부의 자료 구조에 저장한다.
웹 서버는 아키텍쳐에 따라 요청을 처리하는 방식이 달라진다.
싱글 스레드 웹 서버
멀티 프로세스와 멀티 스레드 웹 서버
다중 I/O 서버
멀티 프로세스와 멀티 스레드 웹 서버의 문제점
여러 커넥션을 모아두고, 상태를 감시한다.
상태가 변경되면 해당 커넥션에 대해 작업을 수행한다.
다중 멀티스레드 웹 서버
Q. 다중 멀티 스레드 웹 서버는 어떠한 이점을 살리기 위해 등장하였을까
A. CPU가 여러 개일 경우, 이 이점을 살리기 위해 등장
웹서버는 리소스 서버다.
웹 서버가 클라이언트에게 컨텐츠를 전달하려면 요청 메시지의 URI에 맞는 컨텐츠나 컨텐츠 생성기를 찾아서, 리소스를 찾아야 한다.
클라이언트가 요청한 URI에 맞는 리소스를 서버에서 어떻게 찾을까? => Docroot
웹서버는 정적 컨텐츠를 제공하기 위해 파일 시스템에서 하나의 폴더를 웹 컨텐츠를 위해 예약(reserve) 해둔다.
요청 URI : /images/mountain.jpg
웹 서버의 docroot : /usr/local/httpd/files
서버 리소스 : 웹서버의 docroot + 요청 URI
아파치의 httpd.conf
DocumentRoot /usr/local/httpd/files
가상 호스팅 웹 서버는 여러 웹 사이트를 호스팅하기 위해, 각 사이트마다 문서 루트를 둘 수 있다.
<VirtualHost www.joes-hardware.com>
DocumentRoot /docs/hardware
<VirtualHost>
<VirtualHost www.joes-software.com>
DocumentRoot /docs/software
<VirtualHost>
사용자들이 한 대의 웹 서버에서 개인의 웹 사이트를 만들 수 있게 해준다.
웹서버는 URI가 파일이 아닌 디렉토리인 요청을 받을 경우, 다음과 같은 선택지가 있다.
웹서버는 URI와 컨텐츠를 생성하는 프로그램을 매핑
아파치 설정
ScriptAlias /cgi-bin /user/local/etc/httpd/cgi-programs
동적 컨텐츠를 만드는 쉬운 방법
SSI를 사용하면, HTML 문서에 동적인 내용을 추가할 수 있음
ssi 지시어
<!--#element attribute=value attribute=value ... -->
<!--#config timefmt="%A %B %d, %Y" -->
Today is <!--#echo var="DATE_LOCAL" -->
웹 서버는 리소스에 대한 접근을 제어하거나, 리소스에 접근하기 위한 비밀번호를 물어볼 수 있다.
리소스를 클라이언트에게 전송하기 위해 응답 메시지를 만들어야 한다.
General 헤더
Response 헤더
Entity 헤더
Entity 헤더
를 포함한다.웹 서버는 응답 본문의 MIME 타입을 결정해야 한다.
웹 서버는 리다이렉션 응답(3xx)을 반환할 수 있다.
<a href="/exec/obidos/tg/browse/-/229220/ref=gr_gifts/002-1145265-8016838">All
Gifts</a><br>