본문 바로가기
Spring/스프링을 위한 HTTP 기본 지식

#3 HTTP_기본 속성

by 히포파타마스 2021. 6. 16.

HTTP

 

1. HTTP란?

 

HTTP(HyperText Transfer Protocol)는 웹 통신에 있어서 데이터를 전송하는 방식에 대한 규약이다.

 

HTML, TEXT, 이미지, 음성, 영상, 파일 JSON, XML등 거의 모든 형태의 데이터를 전송 할 수 있고 서버간에 데이터를 주고받을 때도 대부분 HTTP를 사용한다.

 

현재는 1997년에 출시된 HTTP/1.1 버전이 가장 많이 사용된다.

 

■ 기반 프로토콜

· TCP: HTTP/1.1, HTTP/2

· UDP: HTTP/3

· HTTP/1.1가 주류지만 HTTP/2와 HTTP/3도 점점 증가하는 추세이다.

 

■ HTTP 특징

· 클라이언트 서버 구조

 - Request, Respnes 구조

 - 클라이언트는 서버에 요청을 보내고 서버가 요청에 대한 결과를 만들어서 응답하는 방식

· 무상태 프로토콜(stateless), 비연결성

· HTTP 메세지

· 단순함, 확장 가능

 

 

2. 무상태 프로토콜

HTTP는 서버가 클라이언트의 상태를 보존하지 않는다(Stateless).

 

이 때문에 클라이언트는 서버가 필요한 데이터를 한번에 보내게 된다.

 

HTTP는 위와같이 무상태 프로토콜의 특징으로 인해 상태를 유지하는 프로토콜(stateful)에 비해 서버를 쉽게 늘릴 수 있다. 

 

 

[무상태_서버 호출]

클라이언트는 서버가 필요한 데이터를 전부 보내기 때문에 어떤 서버든 상관하지 않고 응답을 기대할 수 있다.

 

 

[무상태_서버 장애]

중간에 연결중인 서버가 장애가 나도 다른서버에 요청 데이터를 다시 전달할 수만 있으면 응답을 받을 수 있다.

 

이 때문에 무상태방식은 서버를 수평적으로 확장하기 쉽다.

 

■ 무상태 방식의 한계

· 상태를 유지해야하는 경우가 있을 수 있다.

ex) 로그인

· 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태를 유지한다.

· 개발시 상태 유지는 최소한만 사용한다.

 

 

3. 비연결성

HTTP는 기본적으로 연결을 유지하지 않는 모델이다.

 

이 때문에 빠른 속도로 응답이 가능하고 대량의 요청이 들어와도 실제 서버에서 동시 처리하는 요청은 수십개 이하로 매우 작다.

 

비연결성으로 인해 서버는 자원을 매우 효율적으로 사용할 수 있다.

 

■ 비연결성 방식의 한계와 극복

· 매번 TCP/IP 연결을 새로 맺어야 하기 때문에 연결마다 검증 시간이 추가된다.

· 매번 HTML, CSS, 추가 이미지 등 수 많은 자원이 함께 다운로드된다.

· 현재는 HTTP 지속 연결(Persisent Connections)로 문제 해결

 

 

[HTTP 초기 연결]

HTTP 초기에는 매 요청마다 연결, 종료작업이 이루어져서 연속된 요청에 추가적인 시간이 소요되었다.

 

 

[HTTP 지속 연결]

HTTP 지속 연결은 연속된 요청에 연결을 종료하지 않기 때문에 종료 후 연결까지의 시간을 단축할 수 있다.

 

4. HTTP 메세지

 

HTTP 메세지는 차례대로 다음과 같은 요소로 구성되어 있다.

 

· 시작 라인(start-line)

· 헤더(header)

· 공백 라인(empty line)

· 본문 (message body)

 

 

[HTTP 메시지 구조]

 

■ 시작라인

 □ 요청 메시지

 · method SP(공백) request-target SP HTTP-version CRLF(엔터)

 ex) GET /search?q=hello&hl=ko HTTP/1.1

 · HTTP 메서드 (GET)

  - 서버가 수행해야 할 동작 지정

  - GET, POST, PUT, DELETE...

 · 요청 대상 (/search?q=hello&hl=ko)

  - absolute-path[?query]

  - 절대경로("/"로 시작하는 경로)

 · HTTP Version (HTTP/1.1)

 

 □ 응답 메시지

 · HTTP-version SP status-code SP reason-phrase CRLF

 ex) HTTP/1.1 200 OK

 · HTTP Version (HTTP/1.1)

 · HTTP 상태 코드 (200): 요청 성공, 실패를 나타냄

  - 200: 성공

  - 400: 클러이언트 요청 오류

  - 500: 서버 내부 오류

 · 이유 문구 (OK): 사람이 이해할 수 있는 짧은 상태 코드 설명 글   

 

■ HTTP 헤더

· field-name ":" OWS field-value OWS(띄어쓰기 허용)

ex) Host: www.google.com 

· field-name (HOST)

 - field-name은 대소문자 구분이 없다.

· field-value (www.google.com)

· HTTP 전송에 필요한 모든 부가정보가 기입될 수 있다.

 - 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 캐시 관리 정보...

 

■ HTTP 메시지 바디

· 실제 전송할 데이터

· HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능

'Spring > 스프링을 위한 HTTP 기본 지식' 카테고리의 다른 글

#6 HTTP 상태코드  (0) 2021.06.17
#5 HTTP_메서드 활용  (0) 2021.06.17
#4 HTTP_메서드  (0) 2021.06.16
#2 URI  (0) 2021.06.16
#1 인터넷 네트워크  (0) 2021.06.14

댓글