3. HTTP 기본

f1v3·2023년 3월 21일
0

HTTP

목록 보기
3/8
post-thumbnail

1. 모든 것이 HTTP

HTTP(HyperText Transfer Protocol)

  • HTML, TEXT
  • IMAGE, 음성, 영상, 파일
  • JSON, XML (API)
  • 거의 모든 형태의 데이터 전송 가능

HTTP 역사

  • HTTP/1.1 (1997년 : 가장 많이 사용, 우리에게 가장 중요한 버전)

기반 프로토콜

  • TCP : HTTP/1.1, HTTP/2
  • UDP : HTTP/3

HTTP 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜(Stateless), 비연결성
  • HTTP 메시지
  • 단순하고, 확장이 가능

2. 클라이언트 서버 구조

클라이언트는 요청(Request)하고 서버는 응답(Response)하는 구조

클라이언트와 서버를 분리하자

  • 클라이언트: UI, 사용성에 집중
  • 서버 : 비즈니스 로직과 데이터
    얻는 효과 : 클라이언트와 서버가 각각 독립적으로 진화!

3. 무상태 프로토콜 (Stateless Protocol)

  • 서버가 클라이언트의 상태를 보존하지 않음

상태 유지 - Stateful

  • 고객 : 이 노트북 얼마임?
  • 직원 : 100만원이요 (노트북 상태 유지)
  • 고객 : 2개 살래요
  • 직원 : 200만원 신용카드, 현금 뭐로 결제? (노트북, 2개 상태 유지)
  • 고객 : 신용카드
  • 직원 : OK (노트북, 2개, 신용카드 상태 유지)

무상태 - Stateless (직원이 중간에 바뀜)

  • 고객 : 이 노트북 얼마임?
  • 직원A : 100만원이요
  • 고객 : 2개 살래요
  • 직원B : 뭘 2개 사요?
  • 고객 : 신용카드
  • 직원C : 뭐를 몇 개 신용카드로 구매?
    고객이 필요한 데이터를 모두 직원에게 넘겨야 알아듣는다.
  • stateful : 중간에 다른 직원으로 변경되면 오류, 최소한만 사용
  • stateless : 중간에 직원이 변경되어도 상관 없다.
    -> 무한한 서버 증설 가능

4. 비연결성(connectionless)

연결을 유지하지 않는 모델

  • HTTP는 기본이 연결을 유지하지 않는 모델
  • 실제 서버에서 동시에 처리하는 요청은 매우 작다.
  • 서버 자원을 매우 효율적으로 사용할 수 있음

한계와 극복

  • TCP/IP 연결을 새로 맺어야 하므로 3-way handshake 시간이 추가됨

  • 지금은 HTTP 지속 연결로 문제 해결

    • HTTP 지속 연결을 하면 시간초가 단축

스테이스리스를 기억하자!

  • 정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽
    ex. 이벤트, 수강신청

5. HTTP 메시지

  • HTTP 메시지 구조

시작 라인

요청 메시지

request-line : HTTP 메서드 (GET: 조회), 요청 대상, HTTP Version

  • HTTP 메서드

    • 종류 : GET, POST, PUT, DELETE ...
    • 서버가 수행해야 할 동작 지정
      GET: 리소스 조회
      POST : 요청 내역 처리
  • 요청 대상

    • absolute-path[?query]
      (절대경로 = "/" 로 시작하는 경로)
  • HTTP 버전

    • HTTP Version
  • 응답 메시지

  • HTTP 버전

    • HTTP 상태 코드: 요청 성공, 실패를 나타냄
      200: 성공
      400: 클라이언트 요청 오류
      500: 서버 내부 오류
    • 이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명 글

HTTP 헤더

  • HTTP 전송에 필요한 모든 부가정보
  • 메시지 바디 빼고 필요한 메타데이터는 전부 포함

HTTP 메시지 바디

  • 실제 전송할 데이터
    (HTML, 이미지, 영상, JSON 등 byte로 표현 가능한 모든 데이터 전송 가능)

0개의 댓글