해피 코딩!

Web Server가 하는 일 본문

Network

Web Server가 하는 일

지속가능한 성장을 2020. 11. 23. 19:05

본 내용은 HTTP 완벽 가이드의 5장 내용 입니다.

틀리다고 생각하시는 부분을 지적해주세요! 피드백을 환영합니다!

Web Server가 하는 일

내용이 어려워 전체적인 흐름을 알 뿐 작성자가 이해가 되지 않습니다. 추후 업데이트 하도록 하겠습니다.

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

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

그렇지 않다면, 클라이언트는 서버에 대한 새 커넥션을 열 필요가 있다.

클라이언트가 웹 서버에 TCP 커넥션을 요청하면, 웹 서버는 그 커넥션을 맺고 커넥션 맞은편에 어떤 클라이언트가 있는지 확인한다.

몇 웹서버는 ident 프로토콜을 지원하며 이것은 서버에게 어떤 사용자 이름이 HTTP 커넥션을 초기화 했는지 찾아낼 수 있게 해준다. 이것은 서버 로깅에 유용하기 때문에 널리 쓰이는 일반 로그 포멧의 두 번째 필드는 각 HTTP 요청의 ident 사용자 이름을 가지고 있다.

ident 는 조직 내부에서 잘 사용할 수 있지만 공공인터넷에서는 다음의 이유로 잘 동작하지 않는다.

  • ident 프로토콜은 HTTP 트랜잭션을 유의미하게 지연시킨다
  • ident 프로토콜은 안전하지 않고 조작하기 쉽다.
  • 방화벽이 ident 트래픽이 들어오는 것을 막는 경우가 많다.

2. 요청 메세지 수신

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

요청 메세지를 파싱할 때 웹 서버는 입력 데이터를 네트워크 데이터로부터 불규칙적으로 받는다. 네트워크 커넥션은 언제라도 무효화 될 수 있다.

3. 요청 처리

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

POST를 비롯한 몇몇 메서드는 요청 메세지에 엔터티 본문이 있을 것을 요구한다.

4. 리소스의 매핑과 접근

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

5. 응답 만들기

한번 서버가 리소스를 식별하면, 서버는 요청 메서드로 서술되는 동작을 수행한 뒤 응답 메세지를 반환한다. 응답 메세지는 응답 상태 코드, 응답 헤더, 응답 본문(생성 되었다면)을 포함한다.

6. 응답 보내기

웹 서버는 받을 때와 마찬가지로 커넥션 너머로 데이터를 보낼 때도 비슷한 이슈에 직면한다. 서버는 여러 클라이언트에 대한 많은 커넥션을 가질 수 있다.

서버는 커넥션 상태를 추적해야 하며, 지속적인 커넥션은 특별히 주의해서, 다룰 필요가 있다. 비 지속적인 커넥션이라면 서버는 모든 메세지를 전송했을 때 자신쪽의 커넥션을 닫을 것이다.

지속적인 커넥션이라면, 서버가 Content-length 헤더를 바르게 계산하기 위해 특별한 주의를 필요로 하는 경우나, 클라이언트가 응답이 언제 끝나는지 알 수 없는 경우에, 커넥션은 열린 상태를 유지할 것 이다.

7. 로깅

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

'Network' 카테고리의 다른 글

TLS, SSL과 HTTPS  (0) 2020.12.19
stateless, stateful - 세션과 토큰 인증방식  (0) 2020.12.16
Web Server란?  (0) 2020.11.23
Web이란?  (0) 2020.11.23
Comments