IT 프로그래밍/컴퓨터네트워크

[컴퓨터네트워크] part2.4 state user

기술1 2024. 10. 6. 14:56

HTTP MAINTAIN USER/SERVER STATE

stateful은 이전 요청에 대한 기록을 기억하고 있는 것을 말합니다. 클라이언트가 어떤 요청을 하고 응답을 할 때 이전 요청에 대한 정보를 기억하고 있습니다. 

 

그 요청에 대한 정보는 서버 데이터를 유지를 하면서 제공을 하는 형태입니다. 

 

하지만 HTTP는 상태에 대한 유지를 하지 않는다는 특징이 있고 모든 request가 독립적으로 처리가 됩니다. 그렇기에 완료되지 않은 이전의 request에 대해서는 recover이나 그런 작업을 할 필요가 없습니다.

 

기본적인 HTTP는 stateless지만 서버가 클라이언트의 상태를 유지하면 다양한 기능을 제공해줄 수 있기 때문에 이를 위한 방법이 쿠키라는 방법입니다.

 

쿠키

쿠키를 이용해서 상태를 유지를 하게되는데 이를 위해서 각 쿠키를 위한 4가지 요소가 존재합니다.

  • HTTP request의 쿠키 헤드라인
  • HTTP response message의 쿠키 헤드라인
  • 클라이언트/서버가 브라우저 측 쿠키 파일 유지
  • 서버측에서 데이터베이스 가지고 있어야 함

클라이언트 쿠키를 가지고 있고 서버측도 데이터베이스를 가지고 있습니다. 

 

서버에게 request 메세지를 보내면 해당 클라이언트의 정보가 있는 보는데 쿠키에 대한 정보가 없기 때문에 쿠키에 대한 정보를 새롭게 생성을 합니다. 예를들면 1567ID의 쿠키를 만들고 서버의 데이터베이스에 저장합니다.

 

서버는 클라이언트에 응답을 해줄 때 set-cookie라는 헤더필드를 추가해줘서 응답을 해줍니다. 클라이언트는 response 메세지를 받으면 거기에 있는 헤드라인에서 쿠키 부분을 찾아서 그것을 쿠키 파일에 기록을 해줍니다. 

 

쿠키

  • 인가
  • 장바구니 구현
  • 사용자 추천 서비스

단점

  • 정보 유지 중 프라이버시 유출 가능성

웹 캐시(proxy server)

원래 서버를 수반하지 않고 클라이언트 요청을 실행하는 것

 

사용자 브라우저에서 각 프락시서버를 사용하기 위해선 지정을 해주어야 하기에 사용자 웹 접근은 캐시를 통해서 접근이 됩니다. 

 

프락시 서버가 있고 웹캐시가 있다면 오리지널 서버로 연결을 하지 않고 프락시 서버를 통해서 요청이 됩니다.

중요한 것은 프락시서버가 일정 시간동안 origin서버의 컨텐츠를 저장을 하고 있는 것입니다. 해당되는 요청의 객체를 이미 가지고 있다면 origin 서버에 요청하지 않고 client에 응답합니다. 

 

클라이언트 요청이 cash에 요청하고 해당되는 객체가 있으면 바로 client 그렇지 않으면 origin서버에 요청합니다. 해당되는 객체가 프락시에서 가지고 있지 않으면 origin서버, 그리고 응답을 되돌려 보냅니다.

 

동일한 contents를 프락시에게 요청했다면 해당되는 contents를 가지고 있다면 프락시서버가 response 해줄 수 있습니다. 

 

웹캐시는 클라이언트와 서버 역할을 모두 해줍니다. 

 

 또한 웹페이지가 가지고 있는 컨텐츠의 변경 날짜와 캐시의 변경 날짜를 비교하여 최신 컨텐츠가 적용이 되도록 if-modified-since 헤더파일을 사용하게 됩니다. http헤더에 이것을 추가해서 최신사항 요구 판단을 합니다.

 

그리고 일반적으로 웹캐시는 ISP에 의해 설치가 됩니다. 기관이나 기업체, residential ISP에 의해서 웹캐시가 실행이 됩니다. 이때 어떤 장점이 있는가 하면

 

장점

  • 클라이언트의 Response time 줄일 수 있음
  • 조직의 access link의 트래픽을 줄임
  • 인터넷이 웹캐시를 이용함으로써 웹서버가 상당히 높은 성능의 웹서버가 아니더라도 client의 요청을 적절히 제공할 수 있음

조직의 access link의 트래픽을 줄임 예시 (나중에 수정하기)

 

 

Client 측의 캐싱

클라이언트는 local의 캐시에 저장을 해두고 객체에 대한 request를 할 때 서버한테 request를 보내지 않고 로컬의 캐시에 있는지 확인을 하고 브라우저에 보내주는 것으로 지연을 향상시키는 것 입니다. 

 

캐싱의 문제는 최신의 컨텐츠인지 확인할 필요가 있다는 것입니다. 클라이언트가 request를 보낼 때  if-modified-since를 넣어서 보냅니다.

 

서버는 캐시의 객체를 찾아서 if-modified-since를 비교해서 날짜가 동일하면 객체가 업데이트 되지 않았기 때문에 서버가 response 메세지를 보낼 때 304 NOT modifed를 보냅니다. 변경되지 않았다는 표시 메세지만 붙여서 해주면 클라이언트는 캐시에 있는 데이터를 로드해서 보여줍니다.

 

파일이 전송되는 전송시간이 줄어드는 효과를 가집니다.

 

HTTP/2

HTTP1.1

파이프라인의 방식을 지원합니다.

 

HTTP2.0

유연성을 증가시키는 방식 업데이트, 서버 측에서 클라이언트로 응답을 할 때 클라이언트가 명시한 객체를 통해 성능을 향상시키는 기능을 합니다.요청되지 않은 객체는 client로 push하는 기능도 존재합니다.

 

HTTP3.0

security 부분이 추가가 됩니다. 그리고 UDP부분에서 congetstion-control도 추가가 됩니다.