웹 서버는 요청을 처리하고 응답을 전송하기까지의 과정
웹 서버는 요청을 받고 요청 라인과 헤더 및 본문의 정보를 기반으로 요청 처리 방법을 결정한다.
용어 정리웹 서버의 기능1. 클라이언드 커넥션 수락2. 요청 메시지 수신요청 메시지를 파싱할 때 웹 서버가 하는 일3. 요청 처리4. 리소스의 매핑과 접근5. 응답 만들기6. 응답 보내기커넥션7. 로깅정리참고 자료
용어 정리
- 커넥션
웹 서버의 기능
- 가장 중요한 기능은 클라이언트가 요청하는 HTML 문서나 각종 리소스를 전달하는 것
- 대표적으로 Apache, nginx, IIS등이 있다.
WAS(웹 어플리케이션 서버)
- HTTP를 통해 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어
- 동적인 페이지 처리를 담당한다.
- 대표적으로 톰캣, WebLogic, WebSphere, iPlanet 등이 있음.
1. 클라이언드 커넥션 수락
클라이언트의 접속을 받아들이거나, 거부할 수 있다.
웹 서버는 어떤 커넥션이든 마음대로 거절하거나 즉시 닫을 수 있다.
클라이언트가 이미 서버에 대해 열려있는 지속적 커넥션을 갖고 있다면 해당 커넥션을 사용한다.
만약 커넥션이 없다면 클라이언트는 서버에 대한 새 커넥션을 연다.
2. 요청 메시지 수신
커넥션에 데이터가 도착하면
웹 서버는 네트워크 커넥션에서 그 데이터를 읽어 들이고 파싱하여 요청 메시지를 구성한다.

요청 메시지를 파싱할 때 웹 서버가 하는 일
- 요청 줄을 파싱하여 메서드, URL, 버전 번호를 찾음 (스페이스로 분리되어 있음/요청줄은 캐리지 리턴 줄바꿈(CRLF) 문자열로 끝남)
- 메시지 헤더를 읽음 (마찬가지로 CRLF로 끝남)
- 헤더의 끝을 의미하는 CRLF로 끝나는 빈 줄을 찾음 (존재한다면)
- 요청 본문이 있다면 읽어들임(요청 본문이 존재한다면
본문은 대부분 GET 요청일 때는 비어있고, POST, PUT 또는 PATCH와 같이 리소스를 조작하는 경우 생성하거나 업데이트할 데이터를 포함한다.
웹 서버는 요청을 이해 가능한 수준의 분량을 확보할 때까지 데이터를 읽는다.
그래서 확보된 메시지 일부분을 메모리에 임시로 저장할 필요가 있다.
요청 메시지를 파싱할 때, 웹 서버는 입력 데이터를 네트워크로부터 불규칙적으로 받으며
또한, 네트워크 커넥션은 언제라도 무효화될 수 있다.
3. 요청 처리
서버는 요청으로부터 메서드, 리소스, 헤더, 본문(없는 경우도 있음)을 얻어 처리한다.
4. 리소스의 매핑과 접근
웹 서버 = 리소스 서버기도 하다.
- 정적 컨텐츠 제공 : HTML 문서나 이미지 같은 미리 만들어진 컨텐츠 제공
- 로고 이미지, 정적 HTML 파일
- 동적 컨텐츠 제공 : 웹 애플리케이션 서버(WAS)를 통해 동적 컨텐츠를 만들어서 제공
- 특정 사용자의 은행 잔고, 쇼핑몰 장바구니
5. 응답 만들기
리소스를 클라이언트에 전송하기 위해 응답 메시지를 만든다.
응답 메시지는 응답 상태 코드, 응답 헤더, 응답 본문을 포함한다.
- 클라이언트에게 요청 상태를 알려주는 상태 라인
- 브라우저에 응답 처리 방법을 알려주는 응답 헤더
- 해당 경로에서 요청된 리소스(HTML, CSS, Javascript, 이미지 파일과 같은 콘텐츠 또는 데이터)
HTTP/1.1 200 OK Date: Tue, 25 May 2021 19:40:59 GMT Server: Apache X-Frame-Options: SAMEORIGIN X-Powered-By: Express Cache-Control: max-age=0, no-cache Content-Type: text/html; charset=utf-8 Vary: Accept-Encoding X-Mod-Pagespeed: 1.13.35.2-0 Content-Encoding: br Keep-Alive: timeout=1, max=100 Connection: Keep-Alive Transfer-Encoding: chunked <!DOCTYPE html> <html lang="ko"> <head> 나머지 HTML 항목
6. 응답 보내기
커넥션
커넥션 부분 내용 추가하기
- 비지속적 커넥션 : 서버는 데이터 전송 후, 커넥션 닫음
- 지속적 커넥션 : 데이터 전송 후 커넥션 유지
7. 로깅
마지막으로 트랜잭션 완료 후, 웹 서버는 트랜젝션에 대한 로그를 로그 파일에 기록한다.
정리
웹 브라우저에서 URL을 입력했을 때, 일어나는 일들을 간단히 나열하면,
- 웹 브라우저에 URL을 입력하고 Enter 키를 누릅니다.
- 웹 브라우저가 도메인의 IP 주소를 조회합니다. (먼저 캐시를 찾고, 그다음 DNS를 검색합니다.)
- 웹 브라우저가 찾은 IP 주소를 기반으로 서버와의 TCP 연결을 시작합니다.
- 웹 브라우저가 HTTP 요청을 서버로 전송합니다. (필요한 경우, HTTPS 보안 통신이 진행됩니다.)
- 웹 서버가 요청을 처리하고 응답을 다시 웹 브라우저로 전송합니다.
- 웹 브라우저가 전송 받은 콘텐츠를 렌더링합니다.