본문 바로가기
CS

[네트워크] HTTP 질문 및 응답

by onejunu 2022. 6. 8.

질의응답 형식으로 면접하듯이 정리해봤습니다.

아무리 잘 아는 질문이라고 해도 막상 대답하려고 하면 어려운거 같습니다.

완벽히 아는게 아니라는걸 알려주는거 같기도합니다.

스스로 질문해보고 응답해보면 기억에 잘 남는거 같습니다.


HTTP에 대한 자세한 내용은 HTTP라는 카테고리에 많이 있습니다.

 

HTTP 가 무엇인가요?

- 서버와 클라이언트 모델을 따르고 웹상에서 Request 와 Response 구조로 메세지를 주고받을 수 있는 프로토콜 입니다. TCP/IP를 기반으로 동작하며 가장 큰 특징은 Connectionless 와 StateLess 입니다.

 

Request 구조는 어떻게 되어있나요?

- Start line , Headers , Body 로 크게 3가지로 구성되어 있습니다.

- Start line 에는 Methods , Path , Protocol 을 명시합니다. 

- Headers 에는 여러 정보가 있지만 대표적으로 Host와 Accept-Language가 있습니다.

 

ex)

GET /search HTTP/1.1   (methods , path , protocol)

Host : www.google.com 

Accept-Language : ko, ko-KR

 

Response 구조는 어떻게 되어있나요?

- Status line , Headers , Body로 구성되어 있습니다.

- Status line 에는 HttpVersion , status Code, status message 가 있습니다.

 

ex) 

HTTP/1.1 200 OK

Date : Mon, 07 Feb 2022 11:22:01 GMT

Server : Apache

 

HTTP 의 Method에는 어떤 종류가 있나요?

- GET , POST , PUT , PATCH 가 있습니다.

 

GET , POST 는 어떤 차이가 있나요?

- GET은 주로 클라이언트가 서버에게 데이터를 조회하는 경우 사용합니다. URL 뒤에 쿼리 스트링을 추가하여 정보를 조회합니다.

반면 POST는 클라이언트가 서버에게 주로 데이터를 생성하는 경우 사용합니다. 전달할 데이터를 BODY에 포함해서 요청합니다.

 

- GET은 URL을 이용하여 캐싱한후 같은 요청에 대해 좀더 빠른 응답을 할 수 있습니다. 반면 POST는 BODY의 내용을 캐싱해야하는데 이는 어렵기 때문에 캐싱을 하지 않습니다. BODY의 내용을 캐싱해야하는 이유는 POST의 요청은 BODY로 구분해야하기 때문입니다.

 

PUT과 POST의 차이가 무엇인가요?

- PUT은 모든 리소스를 대체하기 위해 사용합니다. POST는 리소스 생성을 목적으로 하는 경우가 많기 때문에 멱등하지 않습니다. 멱등하다란 매번 똑같은 요청을 해도 늘 같은 결과를 반환하는 것을 말합니다. PUT은 요청한 리소스를 바탕으로 항상 서버의 리소스를 대체하기 (완전히 갈아끼움) 때문에 늘 같은 결과를 보장하지만 POST는 그렇지 않습니다.

 

- 예를 들어, 상품을 추가하는 것이 POST요청이고 장바구니에 상품 A만 담는 것을 PUT요청이라고 했을때 POST요청을 통해 장바구니는 계속 늘어나겠지만 PUT요청은 아무리해도 장바구니에 상품A만 있을 것입니다.

 

PUT 과 PATCH의 차이는 무엇인가요?

- PUT 은 모든 리소스를 대체하지만 PATCH는 일부 리소스만 대체해버립니다.

 

예를 들어, 서버에 아래와 같은 데이터가 있다고 가정합시다.

{
    "id" : "1",
    "name" : "JAKE",
    "age" : "30"
}

다음과 같은 PUT 요청의 BODY를 살펴봅시다.

{
    "id" : "1",
    "name" : "ATO"
}

위와 같은 요청을 통해 서버는 아래와 같은 결과가 될것입니다.

왜냐하면 완전히 대체되었기 때문입니다.

{
    "id" : "1",
    "name" : "ATO",
    "age" : null
}

똑같은 요청을 PATCH 로 하면 어떨까요?

{
    "id" : "1",
    "name" : "ATO",
    "age" : "30"
}

이 처럼 name에 해당하는 부분만 변경되었습니다. 

 

www.google.com  에 접속하는 과정을 설명해주세요.

- 사용자가 브라우저에서 URL을 입력합니다.

- 응용계층에서 Request Message를 생성합니다.

- 응용계층에서 DNS 서버에 URL에 해당하는 IP주소를 검색합니다.

- HTTP요청 메세지를 완성하고 TCP 전송계층에 전달합니다.

- TCP 전송계층에서 TCP 헤더를 추가하고 IP계층에 IP헤더를 추가한 뒤 2계층과 1계층을 거쳐 서버로 패킷을 보냅니다.

- 서버의 전송계층에서 패킷을 UNPACK한 후 메세지를 복원합니다.

- 서버의 HTTP URL을 통해 응용계층에서 처리한 후 Response 메세지를 생성합니다.

- Request Message의 정보를 이용해 TCP 헤더와 IP헤더를 추가합니다.

- 2계층과 1계층을 거쳐 다시 클라이언트로 패킷을 보냅니다.

- 클라이언트는 Response Message가 브라우저로 전달되면  HTML 랜더링을 통해 모니터에 보여집니다.

 

 

댓글