Enthusiasm! Enthusiasm!

HTTP 기본 본문

자바 스프링/HTTP웹 기본지식

HTTP 기본

열동 2023. 1. 27. 00:55

HTTP(HyperText Transfer Protocol)

HTTP는 HyperText Transfer Protocol의 약자로 웹 상에서 정보를 주고 받을 수 있는 프로토콜이다. HTTP의 기본 개념들과 특징을 알아보자.

 

HTTP의 특징

  • HTTP 메시지(헤더+바디)에 모든것을 전송한다.
  • HTML,TEXT,이미지,파일,API…등 서버간에 데이터를 주고 받을 때도 HTTP를 사용한다.
  • 가장 많이 사용하는 버전은 HTTP/1.1이다. 현재 2,3도 나왔으며 2까지는 TCP, 3부터는 UDP를 사용한다.
  • 클라이언트<->서버 구조 / 무상태 프로토콜(Stateless) / 비연결성 HTTP 메시지 / 단순하고 확장 가능하다.

무상태 프로토콜

  • 서버가 클라이언트의 상태를 보존하지않는다.
  • 서버의 확장성이 높으나 클라이언트가 추가 데이터를 전송해야한다.
  • Stateful과 Stateless의 차이는 다음과 같이 고객과 점원의 예시를 통해 쉽게 이해 가능하다.

-Stateful: 서버가 클라이언트의 상태를 계속 알고있어야 한다.

->ex) 이 노트북 얼마에요? / 2개 구매 할게요 / 신용카드로 구매 할게요

같은 점원(서버)이 계속 대화를 하면 위의 대화가 성립한다.(점원이 클라이언트가 무엇을 물어봤는지 알고있어 대화가 성립.)

만약 각 질문마다 다른 점원이 대답을 한다 가정하면, 두번째 질문을 받은 점원은 무엇을 2개 산다는지 알 수 없다. 세번째 점원도 무엇을 몇 개 신용카드로 구매할지 알 수 없다.

즉 중간에 서버가 문제가 생겨 다른 서버로 바뀌면 처음부터 다시 진행해야한다.

 

-Stateless: 서버가 클라이언트의 상태를 모르고 있어도 된다.

->ex) 이 노트북 얼마에요? / 노트북 2개 구매할게요 / 노트북 두개 신용카드로 구매할게요

각 질문마다 다른 점원이 문제 없이 응답할 수 있다.

즉 중간에 서버가 바뀌어도 계속 진행할 수 있다.

장점

  • 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다.
  • 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
  • 무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설 가능

한계

  • 모든 것을 무상태로 설계 할 수 없는 경우도 있다.
  • 무상태 예시) 로그인이 필요 없는 단순한 서비스 소개 화면
  • 상태 유지예시) 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
  • 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지, 최소한만 사용하는게 좋다.

비 연결성(connectionless)

  • HTTP는 일반적으로 초 단위 이하의 빠른 속도로 응답하기 때문에 기본이 연결을 유지하지 않는 모델이다. 따라서 서버 자원을 효율적으로 사용 가능하다.
  • 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 적다. 이는 모든 사용자가 동시에 검색버튼을 누르거나 하지 않기 때문이다.
  • 단점은 매번 TCP/IP 연결을 새로 맺어야 한다. 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 JS, css, 이미지등 다른 자원이 함께 다운로드 되어야 하는데, 각 과정마다 연결을 맺었다 끊으면 시간이 낭비된다.
  • 현재는 HTTP 지속 연결로 단점을 해결하였다.

HTTP 메시지

HTTP 메시지는 HTTP 요청 메시지와 HTTP 응답 메시지로 나뉜다. 이 메시지들의 기본 구조와 간단한 특징을 알아보자.

HTTP 메시지 구조

HTTP 메시지 구조

-요청 메시지는 대부분 시작 라인과 헤더를 통해 내용을 전달하며, 대부분 body를 사용하지 않는다.(사용할 수는 있음)

-응답 메시지는 시작라인,헤더,메시지 바디를 전부 사용하며 메시지 바디에 전송할 데이터를 담아 전송한다.

HTTP 요청 메시지

HTTP 요청메시지 예시

시작라인

  • HTTP 메서드: GET, POST, PUT, DELETE …등이 있으며 서버가 수행해야할 동작을 지정한다.
  • 요청 대상 absolute-path[?query] (절대경로[?쿼리]) 형식이다. (절대경로= "/" 로 시작하는 경로)
  • HTTP 버전: HTTP의 버전을 명시한다.

헤더

  • 요청메시지에서의 헤더는 General 헤더와 Request헤더 등이 있다. 추후 구체적으로 다룰 예정이다.

HTTP 응답 메시지

HTTP 응답메시지 예시

시작라인

  • HTTP 버전, 상태코드,이유문구(사람이 이해할 수 있는 짧은 상태코드)
  • 상태코드 200:성공, 400:클라이언트 내부 오류, 500:서버 내부 오류 등

헤더

  • HTTP 전송에 필요한 모든 부가정보
  • 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보,

메시지 바디

  • 실제 전송할 데이터를 담는다.
  • HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능

이상으로 HTTP의 기본 개념과 HTTP 메시지 바디에 대해 알아보았으며, 세부 내용은 이후 포스팅에서 구체적으로 다룰 예정이다!


이전 포스팅-https://yulddong.tistory.com/18

 

인터넷 네트워크와 웹 브라우저 요청 흐름

인터넷 네트워크 기초 인터넷 망은 복잡한 구조로 되어있다. 인터넷에서 컴퓨터끼리 통신하는 방법에 대해 알아보자. 인터넷 프로토콜 스택의 4계층 인터넷 프로토콜 스택 4계층이란 인터넷에

yulddong.tistory.com

 

다음 포스팅-https://yulddong.tistory.com/21

 

HTTP 메서드

이번 포스팅에서는 HTTP API를 설계하는 과정을 통해 HTTP 메서드가 어떻게 사용되는지 설명하겠다. 다음과 같이 회원정보 API를 만든다고 가정하자. 두 API중 어느게 더 좋은 API 일까? API에서 URI를

yulddong.tistory.com


이 포스팅은 모든 개발자를 위한 HTTP 웹 기본지식 (By Inflearn 김영한님) 강의 및 강의자료를 참고하여 작성하였습니다.

'자바 스프링 > HTTP웹 기본지식' 카테고리의 다른 글

HTTP 헤더  (0) 2023.04.03
HTTP 상태코드  (1) 2023.02.02
HTTP 메서드  (0) 2023.01.29
인터넷 네트워크와 웹 브라우저 요청 흐름  (0) 2023.01.16
Comments