[http] http 개요

bbidag ㅣ 2024. 1. 2. 23:17

반응형

http

  • http 메시지에 모든 것을 전송할 수 있다.
  • 정적인 컨텐츠 : html, text, image, 음성, 영상, 파일…
  • API 형태 : json, xml
  • 처음엔 일부 컨텐츠들을 전송하는 규격으로 시작했지만 이제는 많은 형태의 데이터 전송이 가능해지고 사용하게 되었다.

 

http 역사

  • 0.9, 1.0, 1.1, 2, 3, ...
  • tcp: http/1.1, http
  • udp: http/3
  • http/2, http/3 점점 개선 중

 

http 특징

  • 클라이언트 - 서버 구조
  • 무상태 프로토콜, 비연결성
  • 단순함, 확장 가능

 

클라이언트 - 서버 구조

  • 클라이언트, 서버 각각에 대해서 어떤 개선점들이 서로에 대해 영향을 받지 않음
  • 같이 성장할 수 있어 유연함

 

무상태 프로토콜

  • 서버가 클라이언트 상태를 보존하지 않음
  • stateful이라면 요청 중간에 서버가 변경되면 장애가 됨. 
    • 증설시 상태 정보를 다른 서버에 미리 알려줘야 함.
  • stateless라면 서버 증설이 가능함.
    • 클라이언트 요청이 증가해도 유지할 상태가 없기 때문에
      무한정 서버를 증설할 수 있어짐.

 

무상태를 유지할 수 없는 경우

  • stateless를 지향하지만, 실무적으로는 꼭 상태가 필요한 경우가 있음.
  • 무상태인 경우
    • 로그인이 필요 없는 단순한 서비스 소개 화면
  • 상태 유지가 꼭 필요한 경우
    • 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지.
  • 일반적으로는 브라우저 쿠키와 서버 세션등을 사용해서 상태를 유지한다.
  • 상태 유지는 비용이 비싸기 때문에 최소한으로만 유지해서 사용해야 함.

 

비연결성

  • 연결을 유지하는 모델 ↔ 연결을 유지하지 않는 모델
  • 연결을 유지하는 모델은 클라이언트가 많을수록 유지해야 하는 상태가 많아져 서버의 자원을 점점 더 많이 쓰게 됨
  • 비연결성의 장점 : 연결을 유지하지 않는 모델은 클라이언트가 많더라도 서버가 동시에 유지해야 하는 자원이 많지 않음
    • 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음
    • 서버 자원을 효율적으로 사용 가능

 

비연결성의 단점

  • tcp/ip 연결을 새로 맺어야됨.
  • 웹 브라우저로 사이트를 요청하면 수많은 자원이 함께 다운로드됨.
    같은 리소스를 재요청할 경우 낭비됨.
  • http 초기 - 매번 연결을 맺고 종료하고 재연결해서 낭비적이었음.
  • 이후 개선된 http 연결에서는 연결, 종료를 묶고 모든 리소스를 요청해 받는거로 개선됨.
  • persistent connections로 문제 해결.
    • 연결을 재활용함 (keep-alive)

 

서버 개발자들이 어려워하는 업무

  • 정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽
  • 선착순 이벤트, 명절 ktx 예약, 학과 수업 등록
  • 예시) 상태가 없는 정적 페이지를 하나 보여주고 티켓팅을 하게 함.

 

HTTP 메세지

  • http 메세지에 모든 것을 전송한다.
  • http 메시지 구조
    • start-line 시작 라인
    • header 헤더
    • empty line 공백 라인
    • message body

 

시작 라인

  1. 요청 메시지
    • request-line / status-line로 구성
      • ex) GET /search?q=hello&hl=ko HTTP/1.1
    • request-line = method 공백 request-target 공백 HTTP-version 엔터
      • http 메서드
      • 요청 대상
        • 절대경로, /로 시작하는 경로
      • http version
  2. 응답 메시지
    • start-line = request-line / status-line
      • http version status-code reason-phrase
    • reason-phrase : 사람이 이해할 수 있는 짧은 상태 메세지

 

http 헤더

  • http 전송에 필요한 모든 부가정보
  • 표준 헤더가 매우 많고, 필요시 임의의 헤더 추가 가능

 

http 메시지 바디

  • 실제 전송할 데이터
  • 바이트로 표현할 수 있는 모든 데이터

 

 

느낀점

  • 내용을 공부하다 보니, 나중에 같은 시간에 딱 맞추어 발생하는 대용량 트래픽을 처리하는 애플리케이션을 사이드 프로젝트로 만들어보면 재밌을듯하다.

 

참고 자료

 

반응형

'개발 > web' 카테고리의 다른 글

[http] http 메소드 활용  (0) 2024.01.07
[http] http 메소드, 메소드 속성  (0) 2024.01.07
[spring] rest api 응답 컨텐츠 압축하기  (1) 2024.01.01
[http] URI와 웹 브라우저 요청 흐름  (0) 2023.12.31
[http] TCP, UDP  (1) 2023.12.29