2월 1주차 스터디 발표 자료📖
이번달 스터디 목표는 기술면접 준비입니다! 이번주의 분량은 10개 주제 정리하기..🥲
네트워크 개념은 필수로 알아야하니 HTTP부터 차근차근 정리해보려고합니다.
HTTP의 정의
Http는 Hyper Text Transfer Protocol의 약자이며, 인터넷 상에서 데이터를 주고 받기 위한
애플리케이션 계층의 프로토콜이다.
➔ HTTP 메세지에 거의 모든 형태의 데이터(리소스)를 담아 전송할 수 있다.
➔ 서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용한다.
➔ 현재 가장 많이 사용하는 HTTP 버전은 1.1이며, TCP가 기반인 프로토콜이다.
➔ 전송 가능한 데이터타입 : HTTP, TEXT, 이미지, 음성, 영상, 파일, Json, XML(API) 등
🤔TCP?
- TCP(Transmission Control Protocol)?
- 전송 계층의 연결지향 프로토콜이다.
- IP의 한계인 비연결성과 신뢰성을 해결하였다.
- 신뢰성이란 데이터의 순서와 전달을 보장하는 것을 말한다.
- TCP의 특징?
- 연결지향(3 way handshake)
➔ 그림과 같이, 3번의 메세지를 통해 client-server 모두 연결 요청이 수락되면, 데이터 전송을 한다. - 데이터 전달 보증
➔ 데이터 전송에 대한 응답이 오지않는다면, 패킷 유실로 판단하여 재전송을한다. - 순서 보장
➔ 패킷의 도착 순서가 맞지않다면, 해당 순번부터 재요청한다.
- 연결지향(3 way handshake)
HTTP의 특징
1. 클라이언트 - 서버 구조
- 요청,응답 구조
- 클라이언트는 서버에 요청을 보내고, 서버에서 응답이 올 때까지 대기한다.
- 서버는 클라이언트의 요청에 대한 결과를 만들어서 응답을 한다.
2. Stateless (무상태 프로토콜)
- 서버가 클라이언트의 상태(데이터)를 보존하지 않는다.
- 웹 애플리케이션 설계 시, 최대한 무상태로 설계해야한다.
- 장점? 서버의 확장(스케일 아웃)이 용이하다.
- 단점? 클라이언트가 필요한 데이터를 계속 전송해야한다.
2-1.🤔 Stateful과 Stateless?
- stateful은 서버가 클라이언트의 데이터를 유지한다.
- 서버 장애가 발생하면, 클라이언트는 모든 정보를 재입력해야하는 불편함이 존재한다.
- 일반적으로 브라우저의 쿠키와 서버 세션등을 사용해서 상태를 유지한다.
3. 비연결성
- 말 그대로 서버와 클라이언트의 연결을 유지하지 않는 모델이다.
- 몇 초 단위 이내의 빠른 응답 속도를 가지고있다.
- 장점? 서버 자원을 효율적으로 사용할 수 있다.
- 단점? 요청마다 TCP/IP 연결(3 way handshake)을 맺어야하는 시간이 추가된다. ➔ 지속 연결로 해결함
- 지속연결은 뭘까?
서버와의 연결을 몇 초간 유지하도록 설정하여, 해당 시간동안 필요한 리소스를 다운받는다.
3-1.🤔 연결성과 비연결성?
- 연결성이란 서버와 클라이언트의 연결을 유지하는 모델이다.
- 단점: 현재 요청하고있지않은 서버와도 연결을 유지하기 때문에 자원이 낭비된다.
4. HTTP 메세지
➔ HTTP는 HTTP 메세지에 모든 것을 전송한다.
- HTTP 메세지 구조?
시작라인,헤더,공백라인,메세지 바디로 구성되어있다. HTTP 메세지 - 요청 메세지?
➔ 요청 메세지도 message body를 가질 수 있으며, 전송할 데이터가 있을 때 사용한다.
* 요청 메세지의 start-line (request-line)?
➔ 구성 : method + SP(공백) + request-target + SP + HTTP-version CRLF(엔터)
1. method?
HTTP 메서드이며, 서버가 수행해야 할 동작을 지정한다.
종류: GET, POST, PUT, DELETE 등
2. request-target?
요청 대상이며, absolute-path?query(절대경로+?쿼리[생략가능])의 형태를 띈다.
3. HTTP Version?
HTTP 버전을 나타낸다.HTTP 메세지 - 응답 메세지?
- 응답 메세지의 start-line (status-line)
➔ 구성 : HTTP-Version + SP(공백) + status-code(상태코드) + reason-phrase(상태코드 설명글) + CRLF
1. HTTP Version?
HTTP 버전을 나타낸다.
2. HTTP 상태코드?
요청의 성공, 실패를 나타낸다.
(200대 성공 , 400대 클라이언트 요청 오류, 500대 서버 내부 오류)
3. 이유 문구?
사람이 이해할 수 있는 짧은 상태 코드 설명 글- HTTP 헤더
➔ 구성 : field-name”:” OWS(띄어쓰기 허용) field-value OWS- HTTP 전송에 필요한 모든 부가정보가 담겨있다.
ex. 메세지 바디의 내용, 메세지 바디의 크기, 인증 정보, 요청 클라이언트(브라우저) 정보 등 - 필요 시 임의의 헤더를 추가할 수 있다.
- HTTP 전송에 필요한 모든 부가정보가 담겨있다.
- HTTP 메세지 바디
- 실제로 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터를 전송할 수 있다.
5. 단순하고, 확장이 가능하다.
- HTTP 메세지는 단순하다.
- 단순하기에 확장이 가능하고, 이러한 확장성 덕분에 현재는 하이퍼텍스트 문서 뿐만아니라 여러 형태의 데이터도 전송이 가능하다.