WORK/HTTP

[인프런/김영한/모든 개발자를 위한 HTTP웹 기본 지식]HTTP 기본

Justin Mendes 2023. 4. 26. 14:37
 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런

www.inflearn.com

* 김영한 선생님의 모든 개발자를 위한 HTTP 웹 기본 지식을 수강하고 간략히 정리해보자.


HTTP

 

HTTP(HyperText Transfer Protocol)는 처음엔 문서간에 링크를 통해 연결할 수 있는 프로토콜로 사용했다. 현재는 모든 것을 전송한다.

 

이제는 아래와 같이 HTTP 메시지에 모든 것을 전송한다.

• HTML, TEXT

• IMAGE, 음성, 영상, 파일

• JSON, XML (API)

• 거의 모든 형태의 데이터 전송 가능

• 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용

• 지금은 HTTP 시대!

 

HTTP는 현재 버전 3 까지 진행중에 있지만 가장 많이 사용하고 웹개발자에게 중요한 버전은 1.1 버전이다. 1.1 버전에 거의 모든 기능이 들어가 있고 2, 3 버전은 성능이 개선된 정도이다.

 

기반 프로토콜

TCP : HTTP/1.1, HTTP/2

UDP : HTTP/3


HTTP의 특징

 

1. 클라이언트 서버 구조

클라이언트는 요청(Request)을 보내고 서버는 요청에 대한 결과를 응답(Response)하는 구조이다.

클라이언트(사용성, UI)와 서버(비지니스 로직, 데이터)를 분리하면 각각의 역할에 충실할 수 있어 양쪽이 독립적으로 진화할 수 있다.

 

2. 무상태 프로토콜(Stateless Protocol)

- 무상태 프로토콜은 서버가 클라이언트의 상태를 보존하지 않는다. 

 

위의 예로 무상태(Stateless)를 이해하면 쉽다. 위의 예에서 점원이 바뀌어도 구매가 정상적으로 수행이 가능하다. 

 

상태 유지(Stateful)에서는 항상 같은 서버가 유지되어야 한다. 그런데 도중에 서버가 장애가 났다. 그러면 client의 정보를 다시 처음부터 입력해야 하는 상황이 발생할 수 있다. 반면에 무상태(Stateless)에서는 처음 요청할 때 부터 필요한 데이터를 담아서 보내기 때문에 아무 서버나 호출해도 되고 중간에 서버가 장애가 나면 기존의 정보를 다른 서버로 전달만 하면 정상적으로 작동할 수 있다. 그래서 무상태는 스케일 아웃(서버를 수평적으로 늘리는 것)에 유리하다고 한다.

 

무상태도 한계가 있다. 서버에 유지가 필요한 상황인데 예를 들면 로그인과 같은 상황이다. 실무에서는 상태 유지는 최소한만 사용한다.

 

3. 비 연결성(Connectionless)

클라이언트와 서버가 요청(Request)시에만 연결이 된다. 그 외에는 연결을 끊는다. 계속 연결을 유지하면서 나오는 비용을 절약하기 위함이다. HTTP는 기본이 연결을 유지하지 않는 모델이다.

 

위의 사진처럼 연결을 끊었을 때 생기는 단점이 발생한다. TCP/IP는 매번 연결 시에 3-Way Handshake 시간이 추가되고

웹 사이트의 부수적인 HTML, JS, CSS, Image같은 자원들도 다운로드 해야하기 때문이다. HTTP 지속 연결을 통해 한 연결에 필요 정보를 모두 응답받은 뒤 종료되어 비용을 절약할 수 있다.

 


HTTP 메시지

HTTP 메시지 구조는 위의 사진과 같다. 

 

1.start-line : 요청(Request-line) 또는 응답(Status-line)의 자원(또는 상태)이 작성되는 공간

 Requst-line

  Format : [method]SP[request-target]SP[HTTP-version]CRLF

   *method = GET(조회), POST(요청 내역 처리), PUT, DELETE

   *request-target = 요청 대상 => 절대경로 "/"로 시작하는 경로   

   *SP(space), CRLF(enter)      

  EX : GET /search?q=hello&hl=ko HTTP/1.1

 

 Status-line

  Format : [HTTP-version]SP[status-code]SP[reason-phrase]

   *status-code : 200(성공) 400(클라이언트 요청 오류) 500(서버 내부 오류)

   *reason-phrase : 사람이 읽을 수 있는 상태코드

  EX : HTTP/1.1 200 OK 

 

2. HTTP 헤더 : 전송에 필요한 모든 부가정보를 담는다. 메시지 바디의 내용 및 크기, 압축, 인증, 브라우저 정보 등..

Format : [header-field]:OSW[field-value]OSW

  *OWS: 띄어쓰기 허용

Ex : Host: www.google.com  

Ex : Content-Type: text/html;charset=UTF-8

  *Header 필드는 엄청나게 많다.. ! 

 

3. empty line : 공백(Enter) Message Body와 구분하는 역할

 

4. HTTP Message Body : 실제 전송할 데이터. HTML, 이미지, 영상, JSON 등 byte로 표현가능한 모든 데이터