Today I Learned (기술 면접)

Parkboss·2023년 3월 30일
0

기술면접

목록 보기
4/12

질문 1)HTTP에 대해 설명하고, 알고있다면 HTTP 메세지 구조에 대해 더 자세히 설명해주세요.✅

대답 1)

HTTP는 Hyper Text Transfer Protocol의 두문자어로, 인터넷에서 데이터를 주고받을 수 있는 프로토콜로서 HTML, Text 외에도 모든 형태의 데이터(이미지, 여러 파일, JSON)를 전송할 수 있습니다..
HTTP는 클라이언트가 요청을 보내면 서버에서 결과를 응답하는 독립적인 구조입니다.
또한, HTTP는 무상태성으로 서버가 클라이언트의 상태를 저장하지 않는다는 점입니다. 상태를 저장하지 않기 때문에 서버의 확장성이 높다는 장점이 있습니다.
그리고 비연결성으로 서버와 클라이언트 간의 연결을 유지하지 않는다는 것입니다.

HTTP 메세지 4가지 구조를 가지고 있습니다.
첫 번째는 start-line은 시작 라인으로써 해당 메세지가 요청인지 응답인지에 따라 다른 형태로 작성이 됩니다.
두 번째는 header 필드 메세지가 0개 이상의 헤더 필드를 가질수 있으며, 헤더는 메시지에 대한 부가정보를 나타낸다.
세 번째는 공백 라인을 의미하고 네 번째로는 메세지 바디메시지에서 전달하고자 하는 본문 내용(html, json, xml 등등)이 작성됩니다.

HTTP 특징?

  1. 클라이언트와 서버 구조
  • 클라이언와 서버는 독립되어 클라이언트가 서버에 요청을 보내고 응답이 올 때까지 대기하고, 서버는 클라이언트에서 받은 요청에 대한 결과를 응답한다.
    클라이언트와 서버는 독자적으로 발전할 수 있어 빠르게 발전해왔다
  1. 무상태성(Stateless)
    Stateless란, 말 그래도 서버가 클라이언트의 상태를 저장하지 않는다는 것이다.
    서버가 상태를 저장하지 않기 때문에 서버의 확장성이 높다는 장점이 있다.
    하지만! 클라이언트가 추가로 데이터를 전송해야 된다는 단점이 있다.

Statefull

  • 상태를 유지하게 되면 서버 1에 요청한 고객은 서버 1과 통신을 한다. 왜냐? 서버 2와 서버 3은 해당 클라이언트의 상태를 모른다.
  • 해당 클라이언트의 상태를 가지고 있는 서버만 사용 되므로, 특정 서버에만 요청이 몰리는 경우가 발생하는 단점이 있다.
  • 만약 서버 1에서 장애가 발생하여 서버 1에서 저장된 클라이언트의 정보는 모두 손실되는 서비스적 문제가 발생한다.

Stateless

  • 서버는 매 요청마다 필요한 정보(구매할 물품, 수량, 결제 방식 등) 클라이언트로부터 받기 때문에 어느 요청을 받아도 동일한 응답을 제공할 수 있다.
  • 서버 증설 또는 줄일때의 확장성도 Statefull 방식에 비해 높다.
  • 상태 유지가 필요한 로그인이나 장바구니는 HTTP의 Cookie와 Session 등과 같은 기술을 활용해서 유지할 수 있다. 만약 이 위 두가지등의 기술을 사용하여 상태를 유지하면 Statefull과 동일한 장애가 발생하므로 여로모로 신경써야된다.

최대한 무상태로 서비스를 설계해야 된다

  1. 비연결성 (Connectionless)
  • 서버와 클라이언트 간의 연결을 유지하지 않는다는 것이다. 서버가 클라이언트에게 최종적으로 응답을 하고 난 뒤 연결을 끊어진다.
  • 서버의 자원을 효율적으로 사용하는 구조를 가지고 있다.
  • TCP/IP 위에서 동작하는 HTTP는 기본적으로 3-way handsahke과정을 통해 연결이 이루어지는데 요청이 잦을수록 이 과정이 빈번하게 수행된다.
  • HTTP는 이러한 한계를 극복하기 위해 지속 연결을 제공하여 HTTP/1.1에서는 특별한 설정이 없는 한 기본적으로 지속 연결을 사용하고 있다.
  • 지속 연결(Persistent Connections)은 요청과 응답이 처리된 이후에도 계속 연결된 상태를 유지하며 해당 Connectuion을 재 사용함으로써, 성능 향상하는 방법을 의미한다.
  • 지속 연결을 사용함으로써 처리 속도는 높일 수 있디만 적절하게 기준을 통해 연결을 끊어줄 수 있어야 된다.(입력과 출력 채널 중 한쪽만 끊기, 연결의 지속시간을 설정하기 등)

HTTP Message 구조

  1. start-line (시작라인)
  • 시작 라인은 requset-linestatus-line으로 나누어지는데 해당 메세지가 요청인지 응답지에 따라 구분된다.
start line = requset-line / status-line

요청 메세지

  • method: 메서드는 서버가 수행해주길 원하는 동작을 지정하는 부분으로 GET,POST,PUT,DELETE등이 있다.
  • SP: 공백 (한 칸 띄움)을 의미한다.
  • request-target: 요청 타깃은 URL의 형태로 작성되며 대부분의 요청은 절대 경로를 사용한다.
  • HTTP-version :HTTP 버전은 의미 그대로 현재 HTTP 버전을 의미한다.
  • CRLF: 공백 라인을 의미한다.
request-line = method SP request-target SP HTTP-version CRLF

응답 메세지

  • HTTP-version: HTTP 버전을 의미한다.
  • SP: 공백을 의미한다.
  • status-code: 상태 코드는 3자리의 정수로 표현되며(200, 300, 400, 500 등) 요청에 대한 응답의 결과를 의미한다.
  • reason-phrase: 상태 코드에 대한 의미를 설명하는 목적으로 사용된다.(OK, BAD_REQUEST 등)
status-line = HTTP-version SP status-code SP reason-phrase CRLF

  1. Header-field (헤더 필드)
  • 요청 메시지, 응답 메시지 구분 없이 동일한 형태로 작성된다.
    추가로 요청에서만 사용되는 헤더, 응답에서만 사용되는 헤더도 존재한다.

요청 헤더

  • HTTP 메세지를 전송할 때 필요한 부가정보를 모두 나타내기 위해 사용된다.
  • 콘텐츠의 길이, 타입, host는 누구인지, 어느 브라우저에 요청했는지, 쿠키 정보, 인증 정보 등이 있다.

응답 헤더

  • 서버가 클라이언트에게 반환하는 응답에 대한 부가정보가 들어가 있다.
  1. Message-body (메시지 바디)
  • HTTP 메세지에 실제 전송하고자 하는 데이터가 들어가 있다.
  • 메세지 바디에는 html, json, xml 이미지 등 byte로 표현할 수 있는 모든 데이터가 들어갈 수 있다.
  • 메세지 바디의 길이가 0인 경우에도 요청과 응답에 메세지 바디가 포함되지만, 메세지 바디가 포함되지 않는 경우도 있다.(상태 코드 204,304 등)

질문 2)position 을 어떻게 사용하는지 알려주세요.✅

대답 2)

position속성은 웹 문서 안 요소들을 어떻게 배치할 지를 정하는 속성이다.
position 속성을 이용하면 텍스트나 이미지를 원하는 위치로 배치할 수 있고 어떤 방식으로 놓을 지를 결정할 수 있죠.
position의 속성으로로는 static, relative, absolute, fixed, sticky가 있습니다.
static은 기본값이며 요소를 나열한 순서대로 배치가능합니다.
relative는 주로 부모 요소(이전 요소)에 자엽스럽게 연결하여 위치를 지정합니다.
absoulte는 원하는 위치를 지정해 배치가 가능하며 fixed는 지정한 위치에 고정 배치이고 sticky 속성은 기준점을 이상을 넘지 않을 때는 relative 포지션처럼 동작하다 그 이상을 넘게 될 시에는 fixed 속성과 같이 동작하게 됩니다.

HTTP 참고 사이트
HTTP 참고 사이트

profile
ur gonna figure it out. just like always have.

0개의 댓글