개발지식/[하루한개념]

[하루한개념] HTTP프로토콜의 특징

코찔이_suj 2022. 3. 21. 13:51
728x90

개요

CS 스터디에서 1주차 진행 내용으로 HTTP 프로토콜의 특징과 상태코드를 이야기하게 되었습니다. 제가 공부했던 내용을 한번 정리해 봤습니다 !

 

본론

HTTP란?

Hypertext Transfer Protocol의 약자로 번역하면 하이퍼텍스트를 기반으로 데이터를 전송하는 프로토콜을 말한다. 월드와이드웹(WWW)에 내장되어있고, 인터넷 상에서 문서(이미지, 영상, 오디오, html문서, 텍스트 등 어떤 종류의 데이터든 가능)를 주고받기 위해 사용된다.


HTML의 특징

1. Server-Client Model (클라이언트-서버 모델)

: 클라이언트가 서버로 요청을 하면 서버가 클라이언트로 응답하는 구조

  • 서버 : 클라이언트의 요청을 받아서 해석하고 응답하는 SW가 설치된 컴퓨터(ex. Apache, nginx)
  • 클라이언트 : 서버에 요청하는 클라이언트 SW(ex. Chrome, safari)가 설치된 컴퓨터

         

2. Stateless (무상태 프로토콜)

: 서버가 클라이언트의 상태를 보존하지 않는다.

  •  서버의 확장성이 높아진다
    • 꼭 처음에 연결된 서버가 아니더라도 클라이언트를 서브할 수 있다)
  • Scale-out(수평적 확장)이 유리하다
    • 클라이언트가 주기적으로 데이터를 보내야 한다.
    • 지금은 쿠키, 세션, 토큰(Oauth, JWT)를 통해 상태를 기억한다.
  • <-> Stateful(상태 유지)
    • 항상 서버가 같도록 유지되어야함.
    • 장애가 발생했을 때 서버가 바뀌면 상태정보가 날아간다

 

3. Connectionless (비연결성)

: 클라이언트와 서버가 한 번 연결을 맺은 후, 클 라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버린다.

  • 연결을 유지하기 위한 리소스를 줄임으로써 더 많은 연결을 할 수 있다.
  • 서버는 클라이언트를 기억하고 있지 않으므로 동일한 클라이언트의 모든 요청에 대해, 매번 새로운 연결을 시도/해제의 과정을 거쳐야한다. 
    • 3 Way Handshake(정확한 전송을 보장하고자 상대방 컴퓨터와 사전에 세녕르 수립하는 과정) 시간이 추가된다.
    • 트래픽이 많은 큰 규모의 서비스일수록 한계를 보인다.
  • KeepAlive
    • 지정된 시간동안 서버와 클라이언트 사이에서 패킷 교환이 없을 경우 상대방의 안부를 붇기 위해 패킷을 주기적으로 보내고 패킷에 반응이 없을 시 접속을 끊어내는 KeepAlive 속성을 통해 한계를 극복할 수 있다.

 

 

  • <-> Connection Oriented (연결지향)
    • 클라이언트가 요청을 보내지 않아도 계속 연결을 유지하기 때문에 서버 자원 소모가 더 크다

 

HTML의 메소드

: 클라이언트가 서버로 요청할 때 사용하는 메소드

대표 메소드

  • Get
    • 데이터를 읽어올 때 사용 (DB sql문의 Select와 같음)
  • Post
    • 데이터를 추가할 때 사용 (DB sql문의 insert와 같음)
  • Put
    • 데이터를 변경할 때 사용 (DB sql문의 update와 같음)
  • Delete
    • 데이터를 삭제할 때 사용 (DB sql문의 delete와 같음)

 

HTML의 상태코드

: 서버와 클라이언트 사이의 연결 상태를 코드로 표현한 것.

1. 규칙

  • 3자리의 숫자로 만들어져 있다.
  • 첫번째 자리는 1~5로 구성되어있다.
    • 1xx(정보) : 서버가 요청을 받았고, 프로세스를 계속 진행하라는 의미
    • 2xx(성공) : 성공적으로 응답이 완료되었다
    • 3xx(리다이렉션) : 요청 완료를 위해 추가 조치(ex. 요청에대한 응답 로케이션이 다르니 개선하라)가 필요하다
    • 4xx(클라이언트오류) : 클라이언트 측의 문제(ex. 요청의 문법오류, 요청 처리불가 경우)가 있다. 
    • 5xx(서버오류) : 서버측에 문제가 있다.

 

2. 대표 코드 

  • 1xx
    • 100 : Continue 
      • 현재까지 진행에 문제가 없음을 의미한다.
    • 102 : Processing
      • 요청 수신했지만 처리중이라 아직 제대로 응답을 알려줄 수 없다
  • 2xx
    • 200 : OK
      • 요청과 응답이 성공적으로 이뤄졌따.
    • 201 : Created
      • 요청 성공 + 새 리소스 생성
    • 202 : Accepted
      • 요청 성공. but, 요청에 대한 행동은 불가
  • 3xx
    • 300 : Multiple Choice
      • 요청 성공 but, 응답의 경우가 여러개라 응답할 수 없음
    • 302 : Found
      • 요청한 URI(자원의 위치를 알려주기 위한 프로토콜)이 일시적으로 변동되었다.
  • 4xx
    • 403 : Forbidden 
      • 클라이언트가 해당 주소로 접근할 권한이 없다.
    • 404 : Not Found
      • 요청한 리소스를 서버에서 찾을 수 없다.
  • 5xx
    • 502 : Bad Gateway
      • 게이트웨이로부터 잘못된 응답을 수신했다.
    • 503 : Service Unavailable
      • 서버가 요청을 처리할 준비가 되지 않았다.

 

 

 

마무리

이번주에 공부한 내용은 여기까지 입니다! 급하게 oneNote에 적어서 그런지 사진 캡쳐가.. 잘 안나오네요..!