본문 바로가기
JAVA & SPRING/HTTP 웹 기본 지식

HTTP 웹 기본 지식 -2일차(HTTP)

by 눈오는1월 2023. 8. 3.
728x90

HTTP 정의

💡 HTTP는 HyperText Transfer Protocol의 약자로 말 그대로 HyperText 즉 html을 전송하기 위한 프로토콜이다.

현재는 html 뿐만 아니라 이미지, json, xml 등등 거의 모든 형태의 데이터를 전송할 수 있고 서버 간의 데이터를 주고받을 때도 이용한다

HTTP / 1.1이 많이 쓰이고 요즘은 HTTP/2 나 HTTP/3도 많이 발전해 왔고 쓰인다. (HTTP/2 나 HTP/3는 성능 개선이 된 경우이다, HTTP/3의 특징은 TCP 대신 UDP를 사용한다.)

 

HTTP 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜(stateless)
  • 비연결성
  • HTTP 메세지
  • 단순함, 확장 가능

1. 클라이언트 서버 구조

💡 request response 구조로 말 그대로 클라이언트와 서버를 분리했다.

과거에는 하나였지만, 둘을 분리함으로써 비즈니스 로직과 데이터는 서버가 관리하고 클라이언트는 UI/UX를 담당할 수 있다. 그로 인해 양쪽이 독립적으로 발전할 수 있게 되었다.

클라이언트는 서버에 request를 하고 서버가 response를 보내고 난 후 클라이언트가 이를 받아서 동작한다.

 

2. 무상태 프로토콜(seateless)

💡 서버가 클라이언트의 상태를 보존하지 않는다. (반대인 상태유지 프로토콜(stateful)은 서버가 클라이언트의 이전상태를 보존한다)

Ex) 상태유지, 무상태 예시 <상태> 노트북을 사기 위해 3가지 질문이 있다.

  1. 노트북 얼마예요?
  2. 2개 구매하겠습니다.
  3. 신용카드로 구매할게요

(첫 번째 상황) 만약 매장에 점원이 한 명이라면, 점원 혼자서 3가지 질문을 받기 때문에 의사소통하는데 전혀 지장이 없다. 점원 - 고객 Q1 : 1번 질문 A : 100만 원입니다. Q2 : 2번 질문 A : 신용카드로 결제하시겠어요. 현금으로 결제하시겠어요? Q3 : 3번 질문 A : 네 카드리더기에 카드 꽂아주세요.

⇒ 이러한 경우를 상태유지 프로토콜이라고 한다. (첫 번째 질문을 받고 노트북을 상태 유지하고 2번째 질문을 받고 노트북, 2개 상태 유지를 하고 3번째 질문을 통해 노트북, 2개, 신용카드 결제 상태유지가 된다)

 

(두 번째 상황) 매장에 점원이 여러 명 있고, 고객이 각각의 질문을 점원들에게 질문한다고 하면 의사소통하는데 어느 정도 문제가 생긴다.

점원 1 - 고객 Q : 1번 질문 A : 100만 원입니다.

점원 2 - 고객 Q2. 2번 질문 A : …2개요? 어떤 걸 2개 원하시는 건가요?

점원 3 - 고객 Q3 : 3번 질문 A: … 무엇을 몇 개 구매하고 싶으신 건가요?

⇒ 이러한 경우를 무상태 프로토콜이라고 한다.

 

무상태 프로토콜 장단점

 

장점

서버 확장성이 높다.

이유 상태유지 상태에서 만약 서버에 장애가 발생하면 클라이언트는 다른 서버에게 처음부터 다시 request를 해야 한다. 무상태 상태에서 만약 서버에 장애가 발생하면 처음부터 request를 할 필요 없이 다른 서버에 request를 하면 된다. 이러한 이유로 무상태에서는 수평 확장이 유리하다(스케일 아웃)

 

단점

클라이언트가 추가 데이터를 전송해야 한다. 이유 위 예시처럼 클라이언트의 요청이 길어질 수밖에 없는 구조이다.

결론 최대한 무상태로 가고 어쩔 수 없는 부분에서만 상태유지를 하게 해야 한다.(ex 로그인)

 

3. 비 연결성

💡 연결을 필요할 때만 연결하고 평소에는 연결을 유지하지 않는 상태로 하는 것이다. why : 서로 요청이 없어도 연결을 하는 과정은 불필요한 리소스가 발생하기 때문이다. 그래서 HTTP의 기본은 연결을 유지하는 모델로 되어있다.

 

장점

불 필요한 리소스 발생이 없다.

단점

  1. TCP/IP를 새로 맺어야 한다.
  2. 웹 브라우저는 HTML, js, css 추가 이미지 등 다른 자원을 요청하므로 그만큼 연결을 해야 한다. → Persistent Connections로 문제 해결이 가능하다.

4. HTTP 메시지

💡 HTTP 구조에는 헤더와 바디가 존재한다.

HTTP 헤더 HTTP 전송에 필요한 모든 부가정보가 들어가 있다. 만약 필요시 임의의 헤더 추가 가능하다(물론 클라이언트와 서버가 서로 동의한 상태에서)

HTTP 메시지 바디에는 실제 전송할 데이터가 있다. HTML 문서를 포함한 이미지, 영상, JSON, XML 등등 실제로 보낼 데이터가 여기에 존재한다.

 

5. 단순함 확장가능

원래 크게 성공한 기술은 단순하고 확장 가능한 게 잘 만든 것처럼 HTTP 역시 단순하고 확장성이 매우 뛰어나다.

 

 

728x90