ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 서버(Web server)란 무엇인가
    CS지식/네트워크 2021. 5. 30. 23:17

    웹 서버는 클라이언트의 HTTP 요청을 처리하고 응답을 제공하는 역할을 한다.

     

    웹 서버가 하는 일은 어떤게 있을까?

    먼저, 클라이언트가 요청을 보내고 응답을 받기 위해 커넥션을 맺기를 원한다.

    클라이언트로부터 커넥션 요청이 오면 커넥션을 받아들이거나 원치않은 커넥션이라면 커넥션을 받아들이지 않는다.

     

    클라이언트와 커넥션을 맺게되면 클라이언트의 HTTP 요청 메세지를 읽어 들인다.

    요청 메세지를 읽어 들이면 무슨 요청인지 해석하고 어떠한 행동을 해야하는지 파악한 후 행동을 취한다.

    만약에 어떠한 리소스를 접근하는 요청이라면 해당 리소스에 접근하여 요청을 처리하고 HTTP 응답 메세지를 생성한다.

    그 후에 HTTP 응답메세지를 클라이언트에 보내고 로그파일에 트랜잭션 완료에 대한 기록을 남긴다.

     

    그러면 조금 더 자세하게 웹 서버의 기본 작업에서 어떠한 일이 일어나는지 알아보자.

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

    클라이언트가 HTTP요청 메세지를 보내고자 할 때 커넥션을 맺어야하는데 이미 서버와 열려있는 지속적 커넥션이 있다면 해당 커넥션을 사용하면 된다.

    만약에 존재하는 커넥션이 없다면 새로운 커넥션을 맺어야한다.

    (새로운 커넥션은 맺는 방법은 https://straw961030.tistory.com/69?category=925289 에 있다.)

     

    TCP 커넥션이란 무엇인가

    HTTP는 웹에서 클라이언트와 서버가 통신을 하기 위해 사용되는 프로토콜이다. HTTP를 사용한 통신에서 실제로 데이터가 클라이언트에서 서버로 가고 서버에서 클라이언트로 가는 것은 패킷 교환

    straw961030.tistory.com

    새로운 커넥션을 맺는 경우에 웹 서버는 TCP 커넥션에서 클라이언트의 IP주소를 추출하여 어떠한 클라이언트가 반대편에 있는지 확인하고 새 커넥션을 커넥션 목록에 추가한다.

    웹 서버는 어떠한 커넥션이든 마음대로 거절하거나 즉시 닫을 수 있다.

     

    작업 2. HTTP 요청 메세지 수신

    클라이언트로부터 요청 메세지를 받게 되면 웹 서버는 요청 메세지를 파싱한다.

     

    작업 3. 요청 처리

    웹 서버가 요청 메세지를 수신하여 파싱을 통해 요청이 무엇인지 받으면 요청으로부터 메서드, 리소스 , 헤더, 본문을 얻어 처리한다.

     

    작업 4. 리소스의 매핑과 접근

    요청 메세지가 웹 서버 내에 있는 리소스에 대한 작업을 요청하는 것이라면 요청 메세지의 URI에서 가리키는 콘텐츠나 콘텐츠 생성기를 웹 서버에서 찾아서 콘텐츠의 원천을 식별해야한다.

    웹 서버에서 제공하는 리소스는 HTML 페이지나 JPEG 이미지 같은 정적인 콘텐츠를 제공하기도 하고

    서버 위에서 동작하는 리소스 생성 애플리케이션을 통해 만들어진 동적 콘텐츠도 제공한다.

     

    작업 5. 응답 만들기

    웹 서버가 리소스를 식별하면 클라이언트가 요청하는 작업을 수행한 뒤 응답 메세지를 반환해야한다.

    응답 메세지에 본문이 있다면 응답 메세지는 다음과 같은 내용을 포함해야한다.

    - 응답 본문의 MIME 타입을 말하는 Content-type 헤더

    - 응답 본문의 길이를 말하는 content-length 헤더

    - 실제 응답 본문의 내용

     

    웹 서버가 보내는 응답 메세지에는 요청을 성공적으로 수행했다거나 실패했다는 메세지도 있지만 리다이렉션 응답을 보내기도한다.

    리다이렉션은 클라이언트가 보낸 요청 메세지에 포함된 URI가 변경되었다는 것을 알려 변경되 URI로 다시 보내라하는 것이다.

    리소스의 위치가 영구적으로 변경되었거나 이름이 영구적으로 바뀐 경우에 새 URI가 부여되었으므로 이전의 URI로 요청을 보낸 클라이언트에게 알려준다.

    혹은 리소스이 위치가 임시적으로 변경되었거나 이름이 임시적으로 바뀐 경우에는 바뀐 URI로 리다이렉트하라고 클라이언트에게 알려준다. 하지만 이 경우에는 URI가 임시적으로 변경된 것이므로 클라이언트에게 임시적으로 바뀐 것이라고 알려주고 이전의 URI를 영구히 바꾸도록 하지않고 추후에는 원래 URI로 찾아오도록 한다.

     

    댓글

Designed by Tistory.