HTTP(Hyper Text Transfer Protocol)

김동윤·2023년 8월 1일
0
post-thumbnail

🌎 클라이언트 서버 구조

클라이언트 요청-> 서버
서버 응답-> 클라이언트

  • 서버와 클라이언트를 분리하는게 중요
  • 비즈니스 로직,데이터(서버)
  • UI(클라이언트)
  • 각각 독립적으로 진화

🌎 무상태 프로토콜(Stateless)

  • 서버가 클라이언트의 상태를 보존X
  • 장점: 서버 확장성 높음
  • 단점: 클라이언트가 추가 데이터 전송





  • 상태 유지: 중간에 다른 점원으로 바뀌면 안된다.
    (중간에 다른 점원으로 바뀔 때 상태 정보를 다른 점원에게 미리 알려줘야 한다.)
  • 무상태: 중간에 다른 점원으로 바뀌어도 된다.(갑자기 고객이 증가해도 점원을 대거 투입할 수 있다. 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.)
  • 무상태는 응답 서버를 쉽게 바꿀 수 있다.(무한한 서버 증설 가능)

Stateful

  • 클라이언트A가 서버1에 요청을하면 서버1은 상태를 보관하고 응답을한다. 이때 서버가 중간에 장애가 나면 재시작을 해야한다.

Stateless

  • 클라이언트A가 서버1에 요청을하면 서버1은 상태를 보관하지 않는다. 이때 서버가 중간에 장애가 나면 중계서버거 다른 서버에 요청을 해 서버2가 응답을 보낸다.

Stateless 한계

  • 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.
  • 무상태 ex) 로그인이 필요없는 단순한 서비스 소개 화면
  • 상태 유지 ex) 로그인
  • 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
  • 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
  • 상태 유지는 최소한만 사용

머리를 쥐어짜서라도 무상태로 만들어야 함

🌎 비연결성

연결 유지

  • 다른 클라이언트들과 연결할때 연결했던 클라이언트들과의 연결을 유지하며 서버의 자원을 소모

연결 유지 X

  • 최소한의 자원 유지

HTTP는 기본적으로 연결을 유지하지 않는다.

  • 빠른 속도로 응답
  • 서버자원 효율
  • 단점: TCP/IP를 새로 연결하여 3 way- handshake 시간이 증가


🌎 HTTP 메시지

HTTP 메시지에 모든것을 전송한다.

시작라인(요청 메시지)

  • start-line = request-line / status-line
  • request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
  • method종류: GET,POST,PUT,DELETE(서버가 수행해야 할 동작)
  • 절대경로로 요청 대상을 지정
  • HTTP Version

시작라인(응답 메시지)

  • HTTP 상태 코드(요청 성공,실패를 나타냄)
  • 200: 성공
  • 400: 클라이언트 요청 오류
  • 500: 서버 내부 오류

헤더

  • header-field = field-name ":" OWS(띄어쓰기 허용) field-value OWS

  • HTTP 전송에 필요한 모든 부가정보
  • 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보,서버 애플리케이션 정보, 캐시 관리 정보 등등

바디

  • 실제 전송할 데이터

단순함 확장 가능

*참고: 사진은 김영한님의 강의자료를 참고하였습니다

profile
Back-End

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

좋은 글 감사합니다.

답글 달기