HTTP를 면접에서 묻는다면,,?

기초에 대해 잘 알고 있나?
다음 질문이 면접때 들어온다면 어떻게 답할건지 생각해보자

  1. HTTP의 특징인 stateless는 무엇인가요?
  2. Request, Response의 구조에 대해 설명해주세요.
  3. HTTP request method의 종류와 용도의 차이에 대해 말해주세요.
  4. status code란 무엇이고, 어떤 종류가 있나요?

이에 대한 답변을 하기 앞서서, HTTP에 대한 정의를 내려보자

What?

외국인과 대화하기 위해서는 외국어를 알아야한다. 한국인끼리는 한국어를 사용하듯 말이다. 암묵적으로 정해진 부분도 있겠지만, 당연하게도 상황에 따라 알맞은 언어로 소통해야한다. HTTP도 마찬가지다.

HTTP(HyperText Transfer Protocol)는 그 중에서 웹과 통신하기 위해 사용하는 방법으로, HTML 문서와 같은 리소스를 가져오는 약속들을 뜻한다. 즉, 어떻게 주고받을 지에 대한 소통 방식과 약속을 뜻하는 말이다.

해당 단어를 단계별로 쪼개보자.

HyperText

  • 문서와 문서가 링크로 연결되어 있음을 뜻한다.

Transfer

  • HTML로 만든 웹페이지 문서를 보낸다.

Protocol

  • 컴퓨터끼리 어떻게 HTML을 주고 받을 지에 대한 소통 방식 또는 약속

최근에는 웹 페이지를 전송하는데 그치지 않고, 데이터를 주고 받을 때도 사용한다. 프론트와 백이 데이터를 주고 받을 때 미리 약속을 해두는 것과 비슷한 결이다.


Request Resopnse

HTTP는 요청과 응답을 통해 소통한다. 인간의 소통방식이 컴퓨터에도 적용된 셈인데, 글로만 보면 잘 적응이 안된다. 친구와 대화 할 때를 떠올려보자

a : 오늘 기분이 어때?
b : 집에 가고 싶어

위 대화는 request와 response가 잘 이뤄진 예다.
그러나 대화하기 힘든 사례를 보면 다음과 같다.

b : 내 여자친구 너무 예쁘다고? 고마워
a : 나 아직 안물어봤는데

요청 없이 응답만 오는 경우엔 원만한 교우 관계를 유지하기가 어려운 경우가 많다.
컴퓨터도 마찬가지다. 원활하고 정확한 소통을 위해 요청 응답에 대한 절차가 확실하다.

아무래도 호감있는 사람이 되기 위해서는 침묵을 유지하다,
요청에 의한 응답만 해줘도 될 듯 하다는 교훈도 배울 수 있다.

다시 본론으로 돌아가보자.
이처럼 HTTP는 항상 요청이 있어야 응답이 있다.
request를 요구하는 쪽을 클라이언트, response를 보내는 쪽은 서버라고 한다.

HTTP는 금붕어다.

이게 뭔소린가 싶을 수도 있다.
내가 이해한 바로는, HTTP는 기억력이 매우 안좋아서,
매 요청마다 정확하게 모든 정보를 말해줘야 그에 걸맞게 행동한다.

HTTP 개별 통신은 모두 독립이어서, 과거의 HTTP통신의 결과를 보존하지 않는다.
이런 특성을 stateless라고 한다

State + less => 상태가 없다?

여기서 말하는 상태란,,!
애플리케이션을 비롯한 모든 항목의 상태란 해당 시점의 상황과 품질, 즉 존재 상태를 말한다.

Stateful과 Stateless는 상호 작용 상태가 얼마나 오래 기록되는지, 해당 정보가 어떤 식으로 저장되는지를 기준으로 구별할 수 있다.

기억력이 좋다 -> stateful
기억력이 안좋다 -> stateless

먼저 stateful, 기억력이 좋은 상태를 보자

당연하겠지만, 카페가서 할 수 있는 평범한 대화다.
이전 정보를 매번 저장해서 대화가 이어나갈 수 있다.

그렇다면 stateless는 어떨까?

요청을 보낼 때 매번 처음의 정보를 저장해서 계속해서 던져줘야한다.
새로운 사람에게 얘기하듯이 말이다.

이를 웹에 적용해서 다시 알아보자
다음은 영상을 보기 위해 거치는 과정을 request response로 나타낸 것이다.

매 통신마다 사전에 필요한 모든 정보를 담아서 요청을 보내고 있음을 알 수 있다.

왜 이렇게 불편한 방식을 이용할까?

한 서버가 여러 클라이언트와 소통하기 때문에, 여러 클라이언트의 상태를 일일이 저장하기도 힘들뿐더러, 모든 요청을 기억하려고 하면 과부하가 걸릴 수 있기 때문이다.


request 메시지 구조

그렇다면 우리가 보내는 request의 메시지는 어떻게 생겼을까?
어떤 메시지를 던져야 서버에서 그에 맞는 데이터를 보내주는 건지 알아보기 위해
직접 그 메시지를 뜯어보기로 하자.

메시지의 구조는 3개로 start Line, Headers, Body가 있다.

start Line

: request 메시지의 제목 같은 느낌

  • HTTP method
    - 요청이 의도한 액션을 정의
  • Request target
    - 요청이 전송되는 목표 url
  • HTTP version
    - HTTP 버전

Headers

: 요청의 메타데이터를 담고 있다.
부가 설명에 대한 정보다. 객체 형태로 이뤄져있으며,
추가적인 정보(메타데이터)를 담고있다.

키 밸류로 이뤄져있으며, 파이썬에선 딕셔너리, 자바스크립트에선 오브젝트라고 부른다.

Body

: 실제 내용, 본문
본문을 실어서 보내는데, 있을수도 있고 없을 수도 있다.
본문이 필요없는 요청의 예시에는 어떤게 있나?


response 메시지 구조

그렇다면 서버에서 역으로 던져주는 메시지는 어떻게 생겼을까?
마찬가지로 총 3가지로 나눠져있고, 비슷한 형태를 띄고 있다.

status Line

응답의 종류마다 상태 코드가 있다. 상태를 간략히 설명하는 텍스트가 담겨있다.
예를 들어, 없는 url에 접속할때, 404 not Found를 나타내는 것 처럼 말이다.
그럼 코드를 사용하는 이유는 무엇일까?

표준(통일성)을 만들기 위해서다.
만약 로그인 기능을 만들었다고 가정했을때, 메시지를 던진다면,
사람마다 다른 메시지를 보낼 수 있기 때문이다.
누구와 일하던, 원활하게 진행할 수 있도록 상태코드를 통해 소통한다.
ex) 성공했습니다, 로그인 성공!, sucess 등...

누구와도 이야기할 수 있는 국제 표준어 정도로 생각하면 좋다


HTTP Request Methods

어떤게 있는지 알아보자. 어차피 자세한 정보는 구글이 더 정확하니까
자주 쓰는 메서드 정도만 알아보자

Get

데이터를 받아오기만 할 때 사용 

Post

데이터를 생성, 수정할 때 사용한다.
body에 담는 내용이 핵심

Delete

서버에 저장된 특정 데이터를 삭제할 때 사용

실제 예시

Get 요청

커머스 사이트에서 물건을 담고, 장바구니를 들어가려 할때,
get/shop/bag http1.1이라는 요청을 보낸다.
이때 백에선 http/1.1 200 Ok 라는 메시지를 받을 수 있다.


축약된 요청 메시지는 아래와 같다.

헤더를 보면 사용자의 정보가 함께 담겨서 전달된다.
가져오기만 할 것이니 요청에는 body가 없다.

Post요청

만약 아이패드를 추가하고 싶다면, 다음과 같은 요청이 이뤄진다.

Delete

장바구니에 있는 것들을 지우기 위해선 다음과 같은 요청이 이뤄진다.

target을 설정해서 Delete를 전달하면 응답으로는 204가 날아온다.
전달할 콘텐츠가 없으므로 요청에 성공했다는 뜻이다.


status code

status code는 수 없이 많다. 아래 사진에서는 그 중에서 많이 사용되는 것들을 정리해둔 것이다.

success

  1. 200: OK
    문제 없이 요청에 대한 처리가 서버에서 이뤄지고 오는 응답 코드

  2. 201: Created
    대게 POST 메소드의 요청에 따라 서버에 데이터가 생성, 수정되었을 때보내는 코드

  3. 204: No Content
    성공적으로 삭제되어서 응답에 제공할 콘텐츠가 없을때 보낸다.

client error

  1. 400: Bad Request
    해당 요청이 잘못되었을 때 보내는 status code
    주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드

  2. 401: Unauthorized
    인증이 되지 않았을때, 많이 사용한다
    ex) 로그인이 되지 않은 상태에서 장바구니에 물건을 담았을 경우

  3. 403: Forbidden
    유저가 해당 요청에 대한 권한이 없다는 의미를 나타낸다.
    접근 불가능한 정보에 접근했을 경우
    ex) 프리미엄 회원만 접근 가능할 경우

  4. 404: Not FOund
    요청된 url이 존재하지 않는다는 의미를 나타내는 코드

server Error

  1. 500: internal server Error
    서버에서 에러가 났을 때 나타나는 코드
    예측하지 못했을 경우 발생

정리

위 글을 읽고 아래 질문에 대한 답변을 해보자.

  1. HTTP의 특징인 stateless는 무엇인가
  2. Request, Response구조란 무엇인가
  3. HTTP request method의 종류를 알고 차이점을 설명할 수 있다.
  4. 대표적인 status code의 종류를 알 수 있다.

어느정도 정리할 수 있는지 스스로 체크하고 계속해서 검증해보자.

좋은 웹페이지 즐겨찾기