ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [네트워크] HTTP란? (특징, 구조, 상태, 메시지)
    IT/네트워크 2022. 10. 6. 23:46

     

    📑 HTTP란?

     

    HyperText Transfer Protocol의 약자로 텍스트 기반의 통신규약이다. 인터넷에서 데이터를 주고받을 수 있는 프로토콜을 의미한다. 규약이 정해져 있기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서로 정보를 교환할 수 있게 되었다. 

     

     

    HTTP의 특징은 다음과 같다. 하나씩 살펴보려고 한다.

     

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

     

     

     

    📑 클라이언트 서버 구조

     

     

    HTTP는 클라이언트와 서버를 개념적으로 분리했다. 클라이언트 (사용자)가 브라우저를 통해 어떤 서비스를 url을 통하거나 다른 것을 요청(request)하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 클라이언트에게 응답(response)하는 형태로 동작한다. 

     

     

     

    HTML뿐만 아니라 TEXT, IMAGE, 음성, 영상, JSON, XML 거의 모든 형태의 데이터를 전송할 수 있다. 

     

     

    📑 무상태 프로토콜(stateless)

     

    무상태 프로토콜은 stateless를 의미하는데, 서버가 클라이언트의 상태를 보존하지 않는 것이다. 서버의 확장성이 높다는 장점이 있지만 클라이언트가 추가로 데이터를 전송해야 된다는 단점도 있다. 그래도 stateless하게 개발하는 게 좋다. 

     

    가게에서 물건을 산다고 가정해보자.

     

    🔨 stateful (상태유지) 는 중간에 다른 점원으로 바뀌면 안된다. ( 중간에 다른 점원으로 바뀐다면 상태 정보를 다른 점원에게 미리 알려줘야한다.)

     

    🔨 stateless (무상태)는 중간에 다른 점원으로 바뀌어도 된다. 즉 고객이 앞선 정보를 요청과 함께 전달하면 되는건데 이런 상태는 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다. 이말은 즉슨 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다. 무한한 서버 증설이 가능다는 말! 선착순 이벤트나 수강신청 등 같은 시간에 대용량 트래픽을 처리해야하는 업무가 있을 때 무상태는 톡톡한 역할을 한다. 

     

    무상태로 설계하는 게 좋다고 하지만 모든 것을 무상태로 설계할 순 없다. 예를들어 로그인이 필요 없는 단순 서비스 소개 화면은 무상태로 설계하면 된다. 그러나 상태 유지가 필요한 로그인 서비스는 무상태로 설계할 수 없다. 일반적으로는 브라우저 쿠키와 서버 세션등을 사용해서 상태를 유지한다. 이는 비연결성의 단점을 해결하는 방법이기도 하다. 

     

     

     

    📑 비연결성

     

    TCP/IP의 경우 기본적으로 연결을 유지한다. 이런 경우 연결을 유지하는 서버의 자원이 계속 소모 된다. HTTP는 기본이 연결을 유지하지 않는 모델로 비연결성이 특징이다. 그렇기 때문에 최소한의 자원으로 서버 유지를 가능하게 한다. 

     

    하지만 이런 장점이 있는만큼 단점도 있다. TCP/IP연결을 새로 맺어야하므로 3-way handshake 시간이 늘어난다. 지금은 HTP 지속 연결로 문제를 해결하고 있다. 

     

     

     


     

     

    📑 HTTP 메시지

     

    HTTP 메시지는 클라이언트와 서버 사이에 데이터가 교환되는 방식으로 요청(Request)와 응답(Response)가 있다. HTTP message는 몇 줄의 텍스트 정보로 구성되며 개발자는 이런 메시지를 직접 작성할 필요는 거의 없다. 구성 파일, API, 기타 인터페이스에서 자동으로 완성해주기 때문이다. 

     

     

     

     

    📑 Request 요청 메시지 시작 라인

     

    Request는 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔하는 메시지이며 다음과 같은 요소들로 구성된다.

     

    📌 시작라인 - Method 

     

    :  GET/POST/PUT/DELETE/OPTIONS ,,, 등 서버가 수행해야할 동작을 지정한다. 예를들어 GET은 리소스 조회, POST는 요청 내역 처리와 같은 동작을 지정하는 것이다. 

     

     

    📌 시작라인 - 요청 메시지, Path

     

    위의 사진에서 추가로 GET /search?q=dog HTTP/1.1 이라고 시작라인이 있을 때 절대경로( "/")로 시작하는 경로를 요청 메시지라고 한다. 즉 PATH라고도 하는데 가져오려는 리로스의 경로를 의미한다. 프로토콜, 도메인, TCP 포트를 제거한 리소스의 URL이다. 

     

     

    📌 시작라인 - Version of the Protocol

     

    HTTP 프로토콜의 버전으로 HTTP/1.1을 가장 많이 사용하고 있다. HTTP/2는 2015년에 성능을 개선했으며 HTTP/1.1과 HTTP/2는 TCP 기반이다. HTTP/3는 UDP를 사용하는게 특징이며 2,3또한 사용 비중이 점점 늘어나고 있다. 

     

     

     

     

    📑 Response 응답 메시지 시작라인

     

     

    Response는 요청에 대한 서버의 답변이다. 요청에선 시작 라인을 request-line이라고 하지만 응답에서 시작라인은 status-line이라고 표현한다. 

     

     

     

    Version of the protocol은 HTTP 버전을 의미하면 Status code는 상태 코드를 나타낸다. 상태 코드는 Request의 성공 여부와, 실패 시 나타나는 코드로  200 (성공) , 400( 클라이언트 요청 오류) , 500(서버 내부 오류)가 가장 대표적이지만 세세하게 더 많은 오류가 있으므로 뒤에서 따로 포스팅하겠다. Status message는 사람이 이해할 수 있는 상태코드에 대한 짧은 설명이다. 

     

     

     

     

    📑 HTTP 헤더

     

    헤더는 요청과 응답에 모두 있는 구조로, HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담기 위해 사용한다. 즉) HTTP 본문(body) 및 요청/ 응답에 대한 정보를 포함한다. 

     

    📌 Content - Type : 표현 데이터 형식
    📌 Content - Encoding : 표현 데이터 압축 방식
    📌 Content - Language : 표현 데이터의 자연 언어
    📌 Content - Length : 표현 데이터 길이 
    ,,,,, 표준 헤더는 정말 다양하다. 

     

     

     

     

    📑 HTTP 바디

     

    바디는 실제 전송할 데이터로 컨텐츠/ 메시지 본문이 나타난다. 콘텐츠에는 요청한 리소스에 따라 HTML, 이미지, CSS, 영상 , JSON 등 byte로 표현할 수 있는 모든데이터를 전송 가능하다. 

    반응형

    댓글

Designed by Tistory.