본문 바로가기
Learning-log/Spring & JPA

(모든 개발자를 위한 HTTP 웹 기본 지식) 3-(4) 비연결성, (5) HTTP메시지

by why제곱 2023. 4. 19.

- 비연결성

  • 연결을 유지하는 모델
    • 클라이언트1 -> 요청 -> 서버 -> 응답  이 때도 클라이언트 2, 클라이언트 3도 연결 유지됨
    • 연결이 유지된 서버의 자원이 소모되는 것
    • 단점 : 클라이언트 2,3이 놀고 있어도 계속 연결 유지해야함
  • 연결 유지하지 않는 모델
    • 클라이언트1이 요청 , 응답 받은 후 연결 끊어버리기
    • 자원을 요청을 주고받을 때만 연결하고 끊어버려서 서버 연결에 필요한 자원 아낄 수 있음.
    • 최소한의 자원으로 서버 유지 가능
  • 비연결성
    • HTTP는 기본이 연결을 유지하지 않는 모델
    • 일반적으로 초 단위의 이하의 빠른 속도로 응답
    • 1시간동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음
    • 서버 자원 매우 효율적으로 사용 가능
    • 한계와 극복
      • TCP/IP 연결을 새로 맺어야 하므로 3way handshake 시간 추가
      • 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, CSS, 추가 이미지 등 수 많은 자원이 함께 다운로드
      • 지금은 HTTP 지속연결로 문제 해결
      • HTTP/2 HTTP/3에서 더 많은 최적화
    • HTTP 초기 - 연결, 종료 낭비
    • HTTP 지속연결 => 요청을 보내고 응답 받고 연결 유지. 그 과정이 끝날 때까지 혹은 일정 시간동안은 연결 유지
    • 스테이스리스를 기억하자
      • 같은 시간에 딱 맞추어 발생하는 대용량 트래픽
      • 예) 선착순 이벤트, 명절 KTX 예약, 학과 수업 등록 등

- HTTP 메시지

  • HTTP는 요청 메시지와 응답 메시지의 구조가 약간 다름
  • HTTP 메시지
    • start-line 시작라인
    • header 헤더
    • empty line 공백라인
    • message body 메시지 바디
  • HTTP 요청 메시지도 메시지 바디를 가질 수 있음
  • 요청메시지
    • 시작라인
      • 종류 : GET, POST, PUT, DELETE ...
      • 서버가 수행해야 할 동작 지정
        • GET : 리소스 조회
        • POST : 요청 내역 처리
      • 요청 대상 
        • absolute-path[?query] 절대경로[?쿼리]
        • 절대경로 = "/" 로 시작하는 경로
        • HTTP 버전
  • 응답메시지
    • 시작라인
      • HTTP버전
      • HTTP 상태코드 : 요청 성공, 실패 표현
        • 200 : 성공
        • 400 : 클라이언트 요청 오류
        • 500 : 서버 내부 오류
      • 이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명 글
    • HTTP 헤더
      • header-field = header-name ":" OWS(띄어쓰기 허용) field value OWS
      • field name은 대소문자 구분x
      • HTTP 전송에 필요한 모든 부가 정보
      • 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트의 정보, 서버 애플리케이션 정보, 캐시 관리 정보..
      • 표준 헤더가 너무 많음
      • 필요시 임의의 헤더도 추가 가능
    • 메시지 바디
      • 실제 전송할 데이터
      • HTML 문서, 이미지 ,영상, JSON 등 byte로 표현할 수 있는 모든 데이터