HTTP의 기초

Taeha Kim·2020년 8월 17일
1

HTTP

목록 보기
1/2
post-thumbnail

HTTP가 뭔지는 몰라도, 인터넷 주소창에서 많이들 보셨을 겁니다.
그럼 HTTP는 무엇일까요?

1. HTTP란?

HTTP(HyperText Transfer Protocol)는 하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약)입니다.

  • 웹상에서 네트워크로 서버끼리 통신 할때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구조" 라고 보면 됩니다.

  • 클라이언트와 프론트엔드 서버간의 통신에 사용되며, 프론트엔드와 백엔드 서버간의 통신에도 사용됩니다.

  • HTTP는 TCP/IP 기반으로 되어 있습니다.

2. HTTP 핵심 요소

2.1) HTTP 통신 방식

  • HTTP 기본적으로 요청(request)과 응답(response)의 구조로 되어 있습니다.
    : 클라이언트가 HTTP request를 서버에 보내면 서버는 HTTP response를 보내는 구조 입니다.

2.2) HTTP는 Stateless 이다.

Stateless란 state(상태)를 저장하지 않는 다는뜻으로, 요청이 오면 그에 응답을 할뿐, 여러 요청과 응답끼리 연결되어 있지 않다는 뜻입니다.
(각각의 요청과 응답은 독립적인 요청과 응답입니다.)

예를들어서 쇼핑몰에서 옷을 구매 하려고 로그인을 했다고 하면,
사용자는 눈에는 쇼핑몰에 한번 로그인을 하면 로그아웃 하기전까지는 '로그인'이라는 '상태'가 계속 유지 되는것 '처럼' 보이지만 사실은 로그인 상태는 유지되지 않습니다.

로그인 요청을 보내면, 해당 요청에 대해서 한번 응답을 하고, 그 뒤의 새로운 요청에 대해선 또 새로운 응답을 할뿐, 그전의 상태, 그전의 요청과 응답은 알지 못하는 것이죠.

(저는 로그인 상태가 유지 되지 않는다는것을 처음 들었을때, 매우 놀랐습니다 ┏(ºдº)┛ )

아니! 그러면 어떻게 로그인 상태가 유지하는것 처럼 보이는 거죠???

  • 여러 요청과 응답의 진행 과정이나 데이터가 필요할때는 쿠키나 세션 등을 사용 합니다.
    (이에 대해서는 추후에 더 공부해서 글을 올리겠습니다.)

2.3) HTTP Request 구조

Start Line

  • HTTP request의 첫 라인으로 HTTP Method(request가 의도한 action을 정의하는 부분), Request target(request가 전송되는 목표 URI), HTTP Version으로 구성되어 있습니다.

Headers

  • 해당 request에 대한 추가 정보(addtional information)를 담고 있는 부분입니다.
  • Key:Value 값으로 되어 있습니다.
  • 크게 general headers, request headers, entity headers로 구성됩니다.
    (이부분은 추가 공부해서 나중에 수정해 놓겠습니다.)

자주 사용되는 header 정보는 다음과 같습니다.

  • Host
    : 요청이 전송되는 target의 host url: 예를 들어, google.com
  • User-Agent
    : 요청을 보내는 클라이언트의 대한 정보: 예를 들어, 웹브라우저에 대한 정보.
  • Accept
    : 해당 요청이 받을 수 있는 응답(response) 타입.
  • Connection
    : 해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지 할것인지 아니면 끊을것인지에 대해 지시하는 부분.
  • Content-Type
    : 해당 요청이 보내는 메세지 body의 타입. 예를 들어, JSON을 보내면 application/json
  • Content-Length
    : 메세지 body의 길이

Body

  • 해당 reqeust의 실제 메세지/내용으로 Body가 없는 request도 있습니다.
    예를들어서 GET request

2.4) HTTP Response 구조

Status Line

  • Response의 상태를 간략하게 나타내주는 부분으로 HTTP Version, Response의 응답 상태를 나타내는 코드인 Status code, 응답 상태를 간략하게 설명해주는 Status text로 구성 됩니다.

Headers

  • Response의 headers와 동일하지만, response에서만 사용되는 header 값들이 있습니다.
    예를들어서 response에서는 User-Agent 대신에 Server 헤더가 사용 됩니다.

Body

  • Response의 body와 동일하며, 데이터를 전송할 필요가 없을 경우 body가 비어있게 됩니다.

3. HTTP Methods

3.1) 자주 쓰이는 HTTP Methods

  • POST
    : 데이터를 생성/수정/삭제 할때 주로 사용되는 Method.
  • GET
    : 어떤 데이터를 서버로 부터 받아올때 주로 사용하는 Method로, 데이터 생성/수정/삭제 없이 받아오기만 할때 사용됩니다.
    주로 데이터를 받아올때 사용되기 때문에 request에 body를 안 보내는 경우도 많습니다.
  • PUT
    : 데이터를 생성 할때 사용되는 Method.
  • DELETE
    : 특정 데이터를 서버에서 삭제 요청을 보낼때 쓰이는 Method.

3.2) HTTP Method, CURD, SQL 비교

일반적인 커뮤니티 사이트의 게시판을 생각해보죠
이 커뮤니티 사이트에 가입한 회원은 자유 게시판에 글을 쓰고(Create), 다른 사람의 글을 읽고(Read), 자신의 글이 마음에 안들어서 글을 수정하면 수정된 글이 새롭게 갱신(Update)되어야 하고, 글이 너무나 마음에 안들어서 지우고 싶으면 삭제(Delete)를 할 수 있습니다.

게시판이 갖추어야 할 최소한의 기능은 Create(생성), Read(읽기), Update(갱신), Delete(삭제)입니다. 각각의 앞 글자를 따서 CURD라고 하는데

CURD는 게시판뿐만 아니라 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능을 말합니다.

HTTP Method와 CURD 그리고 SQL을 비교해 보면 다음과 같습니다.

HTTP Method CURD SQL
생성 POST Create INSERT
읽기 GET Read SELECT
갱신 PUT, POST Update UPDATE
삭제 DELETE, POST Delete DELETE

4. 자주 쓰이는 HTTP Status Code

  • 200 OK
    : 문제없이 다 잘 실행 되었을때 보내는 코드.
  • 301 Moved Permanently
    : 해당 URI가 다른 주소로 바뀌었을때 보내는 코드.
  • 400 Bad Request
    : 해당 요청이 잘못된 요청일때 보내는 코드로 주로 요청에 포함된 input 값들이 잘못된 값으로 보내졌을때 사용되는 코드입니다.
    (예를들어, 전화 번호를 보내야 되는데 text가 보내졌을 경우)
  • 401 Unauthorized
    : 유저가 해당 요청을 진행 하려면 먼저 로그인을 해야 하거나 회원 가입을 해야 한다거나 등, 유효한 인증 자격이 없기 때문에 자격이 필요 하다는 것을 나타내려 할때 쓰이는 코드.
  • 403 Forbidden
    : 유저가 보낸 요청에 대해서 해당 권한이 없을때 사용되는 코드.
    (예를들어, 과금을 한 유저만 볼 수 있는 데이터를 요청 했을때 등.)
  • 404 Not Found
    : 요청된 URI가 존재 하지 않을때 사용되는 코드.
  • 500 Internal Server Error
    : 서버에서 에러가 났을때 사용되는 코드로, 이 코드가 뜨면 '백엔드 개발자 잘못이다' 라고 배웠습니다.😔
profile
함께 성장하는 개발자가 되고 싶습니다.

2개의 댓글

comment-user-thumbnail
2021년 3월 5일

안녕하세요.!
프앤을 쌩 처음하는 퍼블입니다.

혹시 여기서 말씀해주신

HTTP request의 첫 라인으로 HTTP Method(request가 의도한 action을 정의하는 부분), Request target(request가 전송되는 목표 URI), HTTP Version으로 구성되어 있습니다.

이 부분을 이해하려면 어떤 지식을 습득해야 할까요..!

1개의 답글