Java - Spring &&n SpringBoot

웹 네트워크 기본 공부 2) HTTP 알아보기

TerianP 2022. 8. 17.
728x90

HTTP 란?

  • HyperText Transfer Protocol
  • 무상태 프로토콜이며 비연결성프로토콜이다 ⇒ Stateless && connectionless
  • image, 음성, 영상, 파일
  • json, xml 등의 api
  • 이외에도 거의 모든 형태의 데이터 전송 가능
  • 데이터 전달에도 거의 HTTP 사용!!
  • 아주 예외적인 경우 아니면 거의 HTTP 사용!!
  • HTTP 는 아주 다양한 버전이 있으나 1.1 버전이 특히 많이 사용된다.

 

1) HTTP의 특징 : 무상태 프로토콜 - Stateless

  • 서버가 클라이언트의 상태를 보존X
  • 장점 : 서버 확장성이 높다
  • 단점 : 클라이언트가 추가 데이터 전송

 

Stateful 과 Stateless 의 차이

  • Stateful : 상태유지 ⇒ 서버가 클라이언트의 상태 유지
    • 상태가 유지된다고 하는것은 서버쪽에서 내가 뭘 선택했는지 알고 있다는 것!
    • 결국 서버와 클라이언트는 아래와 같은 대화가 진행될 것이다.
나 : 상품 A 선택할게
서버 : Ok 상품 A 선택 저장

나 : 신용카드로 결제할래
서버 : 좋아 상품 A 선택했고, 신용카드 선택했어

나 : 200만원 결제할게
서버 : 확인! 너는 상품 A를 신용카드로 200만원 결제했어. 배송비는 별도야^^

 

  • Stateless : 무상태 ⇒ 서버가 상태 유지 X, 클라이언트가 그때 그때마다 서버에게 내용을 모두 전달
    • 서버에서 클라이언트의 상태가 유지되지 않기에 클라이언트는 서버가 필요한 정보를 그때 그때마다 모두 전달!
    • 결국 서버와 클라이언트는 아래와 같은 대화가 진행될 것이다.
나 : 상품 A 선택할게
서버 : 응 그런던지(저장X)

나 : 상품 A를 신용카드로 결제할래
서버 : 응 그러던지(내용저장X)

나 : 상품 A를 신용카드로 200만원 결제할게
서버 : 오키! 주문할게 근데 배송비는 별도야!

요약하자면 Stateful 과 Stateless 는 결국 클라이언트의 정보를 저장하는 쿠키와 세션이 있고 없고의 차이로 정리할 수 있다.

 

결국 Stateful 과 Stateless 가 왜 필요할까?

바로 Stateful 에서 발생하는 아래의 문제점으로 인해서이다.

  • 하지만 기업의 서비스를 이용하는 사람들의 숫자가 많아서 서버를 10대를 쓴다면 이제 문제가 발생한다.
  • 클라이언트가 서버에 요청할 때마다 동일한 서버에만 요청을 하는 것이 아니다. 1 번 서버에 처음 접속하여 2번 서버에서 물건을 선택하고 3번 서버에서 결제 정보를 확인하고 10번 서버에서 결제를 처리하게 된다면 Stateful 의 경우 ‘서버가 상태를 저장’ 하고 있어야하는 만큼 서버에서 서버로 넘어갈 때 사용자 요청 처리에 대한 내용에 공백이 생기게 되고 서비스가 제대로 이루어 질 수가 없다. 아니면 각 서버로 넘어갈때마다 서버에서 서버로 다시 정보를 넘겨주어야한다.
  • 반면 Stateless 는 이런 문제에서 자유롭다. 왜냐하면 10번 서버에서 결제를 처리 할 때 클라이언트쪽에서 서버에 모든 정보를 전달하기 때문에 다른 서버로 옮겨가더라도 내가 현재 도달한 서버가 장애가 나서 다른 서버로 가더라도 전혀 문제가 생기지 않는다.
  • 이러한 문제점에 의해서 그리고 HTTP 프로토콜 자체도 무상태 프로토콜임으로 Stateful 상태유지는 최소한으로만 사용해야하며 최대한 무상태로 설계가 필요하다.

 


 

HTTP의 특징 : 비 연결성 프로토콜

  • 클라이언트가 요청하고 서버는 응답하고 연결 종료!!

초기 비연결성

  • HTTP 는 기본이 연결을 유지하지 않는 모델
    • 일반적으로 초 단위 이하의 빠른 속도로 응답
    • 서버 자원을 매우 효율적으로 사용할 수 있음
  • 그러나 단점도 분명히 있다.
    • 연결이 종료되면 다시 연결을 해야한다 → 3 way handshake 를 다시 해야한다.
    • 웹 브라우저로 많은 자원이 다운로드된다 → js, css 등등 ⇒ 연결하면 또 받아야한다
  • 이런 단점을 해결하기 위해 최근에는 지속 연결 - Persistent Connections - 를 사용한다.

지속 연결


HTTP 의 특징 : HTTP 의 메시지

HTTP 메시지 구조

  • start-line 시작 라인 : request-line 요청 // status-line : 응답
  • Request-line : 요청
    • request-line : method(get,post) 공백 request-target 공백 HTTP-version
    • method : GET(리소스 조회), POST(요청 내역 처리),put, delete 등을 의미한다
    • request-target : 절대결로?쿼리
    • Http Version : HTTP 버전
  • status-line : 응답
    • HTTP-version 공백 status-code 공백 reason-phrase(이유문구)
    • HTTP 버전
    • HTTP 상태 코드 : 요청 성공, 실패를 나타냄
    • 200 : 성공
    • 400 : 클라이언트의 요청 오류
    • 500 : 서버의 문제
  • header : 헤더
    • HTTP 전송에 필요한 모든 부가 정보가 담긴다
    • 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관리 정보
  • empty line 공백 라인 CRLF —> 필수
  • message body

 

HTTP 상태 코드

  • 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능
  • 1XX : 요청이 수신되어 처리중 → 거의 사용 X
  • 2XX Successful : 요청 정상 처리
  • 3XX Redirection : 요청을 완료하려면 추가 행동이 필요
  • 4XX Client Error : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
    • 대표 코드 404 - page not found

내가 문제인 404 상태

  • 5XX Server Error : 서버 오류, 서버가 정상 요청을 처리하지 못함
    • 대표 코드 500 - Server Error

서버가 아픈 500 상태

  • 클라이언트가 인식할 수 없는 상태코드를 서버가 반환하면 상위 상태코드로 해석해서 처리하게 된다.
    • 299 ?? → 200 Ok
    • 451 ?? → 4XX Client Error
    • 556 ?? → 5XX Server Error

- Reference

모든 사진 : 인프런 김영한님의 개발자를 위한 HTTP 기본 지식 강의

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

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

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

www.inflearn.com

 

https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-Stateful-Stateless-%EC%A0%95%EB%A6%AC

 

[WEB] 🌐 Stateful / Stateless 정리

Stateful 과 Stateless 의 차이 무상태 Stateless 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하지 않음을 의미합니다. Stateless 구조에서 server는 단순히 요청이 오면 응답을 보내는 역

inpa.tistory.com

 

댓글