ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. HTTP, 클라이언트-서버 구조, Stateless, 비연결성, HTTP 메시지
    개발 공부/Network 2021. 4. 24. 20:35
    본 게시물은 김영한님의 "모든 개발자를 위한 HTTP 웹 기본 지식" 강의를 듣고 정리한 내용입니다.
    따라서 모든 저작권은 인프런과 김영한님께 있음을 밝힙니다.
    혹시라도 문제가 된다면 삭제하겠습니다. 댓글에 남겨주세요.

     

    1) 모든 것이 HTTP

    HyperText Transfer Protocol

    • HTTP 메시지에 모든 것을 전송한다. (html, text, image, 음성, 영상, json, xml, 등등 거의 모든 형태의 데이터 전송 가능)
    • HTTP의 역사: 1997년의 1.1버전이 가장 중요하다. 가장 많이 사용하는 버전이다.
    • TCP 프로토콜을 기반으로 HTTP/1.1이나 HTTP/2가 구현된다. HTTP/3는 UDP 프로토콜을 기반으로 구현된다.
    • HTTP의 특징
      • 클라이언트 서버 구조
      • 무상태 프로토콜(stateless), 비연결성
      • HTTP 메시지를 통해서 통신한다,
      • 단순하고 확장 가능하다.

     

    2) 클라이언트 서버 구조

    • Request와 Response로 이루어지는 구조
    • 클라이언트는 서버에 request를 보내고, response를 대기
    • 서버가 request에 대한 결과를 만들어서 response
    • 비즈니스 로직은 서버에 모두 몰아넣고, 클라이언트 단에서는 사용자 UI를 어떻게 보여줄지만 생각한다. 이렇게 업무를 분담하여 각자 신경 쓸 곳만 신경쓴다.

     

    3) Stateful, Stateless

    상태, 무상태 프로토콜

    • Stateful: 서버가 클라이언트의 이전 상태를 보존하므로 이전 상태를 알고있는 것
    • Stateless: 서버가 클라이언트의 이전 상태를 보존하지 않아서 상태를 모르고 있는 것
    • 손님과 점원으로 예를 들어보면, Stateful에서는 점원이 바뀌면 손님의 이전 상태를 모르므로 혼동이 온다.
      하지만 Stateless에서는 점원이 바뀌어도 손님은 계속 모든 정보를 새로운 점원에게 전달하므로 혼동이 오지 않는다.
    • 따라서 이러한 Stateless의 특징은 서버의 확장성을 마련한다. 즉 갑자기 클라이언트의 요청이 증가해도 서버를 대거 투입할 수 있다. 왜냐면 점원이 바뀌듯이, 서버도 쉽게 바뀔 수 있기 때문이다. 즉 무한한 서버의 증설이 가능하다는 뜻이다.
    • 하지만 Stateless도 한계는 있다. 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있기 때문이다.
    • 로그인과 같은 시스템은 상태가 유지 되어야 하므로 무상태를 사용할 수 없다. 그러나 쿠키와 세션으로 상태를 유지시키며 최소한만의 상태 유지를 한다. 나머지는 최대한 무상태를 사용한다.

     

    4) 비 연결성(connectionless)

    • 만약 서버가 클라이언트와 연결을 한 다음, 그 연결을 끊지않고 유지하면 어떻게 될까? 더이상 데이터를 주고 받지 않아도 계속 연결되어 있으므로 자원의 소모가 심각할 것이다.
    • 따라서 HTTP에서는 기본적으로 비 연결성을 지향하여, 클라이언트와 서버가 요청 응답을 주고 받은 다음 바로 연결을 끊는다. 그리고 다음에 필요할 때 다시 연결하여 요청과 응답을 주고 받는다.
    • 단점
      • TCP/IP 연결을 새로 맺어야 하므로, 3 way handshake 시간이 추가된다.
      • html 뿐만 아니라, js, css, image 등 여러 파일을 또 불러와야 하므로 자원이 많이 소모된다.
      • 이러한 문제는 지속 연결(Persistent Connections)로 문제 해결

     

    5) HTTP 메시지

    •  
    • 공백 라인 부분은 무조건 있어야 한다.

     

    1) 시작 라인GET, POST 등의 http 메서드(요청에서) 혹은 응답코드(응답에서)가 들어간다

    •  
    • HTTP 메소드: GET, POST, PUT, DELETE 등
    • 요청 대상: 절대 경로[?쿼리]
    • HTTP 버전: 1.1
    • HTTP 버전: 1.1
    • HTTP 상태코드 : 200(성공), 400(클라이언트 오류), 500(서버 오류)
    • OK: 상태코드가 무슨 의미인지 사람에게 알려주는 짧은 설명

     

    2) 헤더는 호스트나 컨텐트의 타입이 들어간다.

    •  
      HTTP 전송에 필요한 모든 부가정보가 다 들어있다.
    • 메시지 바디가 무슨 내용인지, 크기는 몇인지, 압축된 것인지, 인증은 있는지, 클라이언트 정보, 서버 정보, 캐시 정보 등등등....

     

    3) 바디는 전송하는 파일이 들어간다.

    • 실제 전송하는 데이터
    • html 문서, 이미지, 영상, json 등등 byte로 표현 가능한 모든 데이터 전송 가능

    댓글

Designed by Tistory.