질의응답 형식으로 면접하듯이 정리해봤습니다.
아무리 잘 아는 질문이라고 해도 막상 대답하려고 하면 어려운거 같습니다.
완벽히 아는게 아니라는걸 알려주는거 같기도합니다.
스스로 질문해보고 응답해보면 기억에 잘 남는거 같습니다.
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 랜더링을 통해 모니터에 보여집니다.
'CS' 카테고리의 다른 글
[OS] 운영체제 질문 - (프로세스,스레드,동기화 문제,교착상태,페이징,가상메모리) (1) | 2022.06.15 |
---|---|
[DB] 인덱스 (1) | 2022.06.14 |
[DB] 트랜잭션 질문 및 응답 (0) | 2022.06.08 |
[네트워크] 쿠키,세션 질문 및 응답 (0) | 2022.06.08 |
[네트워크] TCP 질문 및 응답 (0) | 2022.06.08 |
댓글