HTTP를 통한 클라이언트-서버의 통신

손연주·2021년 6월 30일
0

클라이언트와 서버

클라이언트와 서버 그리고 데이터베이스

우리가 레스토랑에 있다면?

  • 클라이언트: 고객이 요청한 걸 주방(서버)에 전달해주고, 주방에서 요리가 완료된 식품을 다시 고객에게 전달
  • 서버: 들어온 주문에 따라 식자재(데이터)를 꺼내 요리하는 주방
  • 데이터베이스: 모든 식자재(데이터)를 보관해놓고 있는 냉장고 (어떻게 보면 데이터베이스도 일종의 서버이다)

클라이언트는 사용자와 상호작용을 하는 브라우저 또는 앱을 말하며, 서버는 클라이언트에서 필요한 데이터(리소스)를 전달해주는 역할을 한다. 사용자가 브라우저를 통해 상호작용 하는 것이 클라이언트와 서버가 서로 통신하는 것으로 볼 수 있는 셈이다.

인터넷 연결 없이 쇼핑몰 앱을 켰다고 가정해보자. 누구나 알 수 있듯 쇼핑몰 앱은 정상적으로 동작할 수 없다. 상품 정보를 서버로부터 받아오기 때문이다. 인터넷을 연결하고, 목도리를 사고 싶어서 쇼핑몰 앱에서 목도리 제품을 검색한다. 그럼 클라이언트는 서버로 목도리 정보를 요청하고, 서버로부터 응답 받은 데이터를 사용자에게 보여준다. 그뿐만이 아니라 새로운 데이터를 저장하거나 기본 데이터를 수정 또는 삭제 할 때도 서버로 요청하고 응답을 받는다.

그렇다면 클라이언트는 어떻게 서버로 요청을 하는걸까?

HTTP를 이용해 통신하기

프로토콜 - 통신을 위해 정의된 규칙

클라이언트와 서버 간의 통신을 알아보려면, 먼저 프로토콜이라는 개념을 이해해야 한다. 손님이 주문을 받는 사람에게 대뜸 찾아가, 외계어로 주문을 할 수 없듯, 주문을 하기 위해서는 꼭 지켜야 하는 약속이 몇가지 존재한다. 클라이언트와 서버가 서로 HTTP라는 프로토콜을 이용해서 서로 대화를 나눈다. 이는 "HTTP 메시지"라고 부른다.

HTTP(Hyper Text Transfer Protocal)

인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다. HTTP로 보낼 수 있는 데이터는 HTML문서, 이미지, 동영상, 오디오, 텍스트 문서 등 여러종류가 있다. 하이퍼텍스트 기반으로(Hypertext) 데이터를 전송한다. 링크기반으로 데이터에 접속하겠다는 의미이다.

1. HTTP messages

HTTP messages 는 클라이언트와 서버 사이에서 데이터가 교환되는 방식이다. HTTP messages에는 두 가지 유형이 있다.

  • 요청(Requests) : 클라이언트에서 요청(request)를 보내면
  • 응답(Responses) : 서버는 요청을 처리해서 응답(response)한다

  1. start line : start line에는 요청이나 응답의 상태를 나타낸다. 항상 첫 번째 줄에 위치하고 응답에서는 status line이라고 부른다.
  2. HTTP headers : 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합.
  3. empty line : 헤더와 본문을 구분하는 빈 줄
  4. body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함한다. 요청과 응답의 유형에 따라 선택적으로 사용한다.
  5. 이 중 start line과 HTTP headers를 묶어 요청이나 응답의 헤드(head)라고 하고, payload는 body라고 이야기한다.

1-1. HTTP Request

1) Start line

Head의 첫째줄로써 요청줄(HTTP 요청은 클라이언트가 서버에 보내는 메시지)을 나타낸다.

  • HTTP Verbs
    요청에 사용할 수 있는 메서드들이다.
    GET : 존재하는 자원에 대한 요청
    POST : 새로운 정보를 생성
    PUT : 정보를 업데이트
    DELETE : 정보를 삭제
    HEAD : 서버 헤더 정보를 획득. GET과 비슷하나 Response Body를 반환하지 않음
    OPTIONS : 웹서버가 지원하는 메서드의 종류를 확힌하기 위해 요청한다. (CORS에서 사용)
  • URI
  • HTTP version

2) Header

요청 헤더로써 이름, 값 쌍으로 표시된다. 어떤 프로토콜을 이해하려면 프로토콜의 헤더를 알면 된다. 특정 프로토콜의 헤더의 내용은 특정 프로토콜의 기능을 제공하기 위해 담고 있는 최소한의 정보기 때문이다. 헤더에 그 프로토콜에 불필요한 내용을 담으면 네트워크로 전송되는 데이터의 크기가 커져서 빠른 전송이 불가능하기 때문에 프로토콜을 설계할 때부터 꼭 필요한 내용만 담아야 하고, 모든 기능이 표현되어야 한다.

3) body(optional)

본문 요청에 대한 다른 정보를 추가할 수 있다.

1-2. HTTP Response

1) Status line

  • HTTP version
  • Status code : 요청의 결과
  • Status code text : 상태 코드에 대한 설명

2) Header

3) Body

클라이언트가 요청한 데이터를 포함한다.

profile
할 수 있다는 생각이 정말 나를 할 수 있게 만들어준다.

0개의 댓글