[HTTP] 2. HTTP 의 특징

반응형

HTTP (Hypertext Transfer Protocol)

웹서버와 웹브라우저 간의 웹정보를 교환하기위한 프로토콜 (통신규약) 이다.

 

0. HTTP 특징

  • 클라이언트 - 서버 구조
  • HTTP 메시지를 이용
  • 비연결성 (Connectionless)
  • 무상태 (Stateless)
  • 단순함

 

1. 클라이언트 - 서버 구조

클라이언트(웹브라우저 등) 가 요청을 보내면 서버가 응답을 하는 구조이다. 1개의 요청(Request)에는 1개의 응답(Response) 를 반환하도록 되어있다. 또한 같은 조건의 요청이라면 응답은 항상 같다.

 

 

2. HTTP 메시지를 이용

HTTP 는 TCP/IP 로 클라이언트가 송신하는 요청(Request) 와 서버의 응답(Response) 으로 되어 있다.

리퀘스트에는 헤더 필드나 메시지의 바디가 존재하며, 요청메소드로 지정한다.

리스폰스에는 상태, 헤더 필드, 메시지의 바디가 존재하며, 처리 결과는 상태 코드로 표시된다.

 

자세한 내용은 아래를 참고하자.

링크1 : [HTTP] 3. HTTP 요청 메시지 (Request)

링크2 : [HTTP] 4. HTTP 응답 메시지 (Response)

 

 

3. 비연결성 (Connectionless)

HTTP 는 클라이언트와 서버가 TCP/IP 연결을 맺는다. 연결을 맺은 후 클라이언트의 요청이 있고 그에대한 서버가 응답을하면 연결을 끊는다

요청에 대한 응답이 끝나면 연결을 종료한다 (비연결성)

이용자의 수가 많더라도 실제로 동시에 처리하는 요청은 그렇게 많지 않다. 수많은 이용자들의 클라이언트와 서버의 연결을 유지한다면, 실제로 처리되는 요청수보다 연결을 하고있는 그 자체에대한 자원낭비가 커지게 된다. 따라서 사용하지 않을때는 연결을 끊어 자원(리소스)의 낭비를 줄일 수 있다.

 

물론, 이러한 성격 때문에 매번 TCP/IP 연결 (3-way handshake) 시간이 추가된다. 그 결과로 매번 연결과 해제에 의해 서버에 막대한 부하가 생길 수 있다.

 

이에대한 해결책으로도 지속적 연결(persistent connections, keep-alive 속성)이 나오게 되었다. 자세한 내용은 아래에도 정리해 두었다.

 

[HTTP] 1. HTTP 의 역사

HTTP 역사 네트워크의 애플리케이션 계층에서 동작하는 애플리케이션 프로토콜 중 가장 잘 알려진 것이 HTTP (Hypertext Transfer Protocol) 이다. 웹 브라우저는 URL의 'http' 부분을 보고 액세스한다. HTTP 는

gymdev.tistory.com

HTTP/1.1 의 지속적 연결로 문제를 해결하였고 HTTP/2 와 HTTP/3 에서 더 많은 최적화를 진행중이다.

 

 

4. 무상태 (Stateless)

서버가 클라이언트의 상태를 보존하고 있지 않는다.

장점 : 서버 확장성 높음 (스케일 아웃)

단점 : 클라이언트가 추가 데이터 전송

 

■ 상태유지 (Stateful)

상태를 유지한다면?

서버가 클라이언트의 상태를 유지한다면 서버가 클라이언트의 정보를 가지고 있으므로 클라이언트는 최소한의 데이터만으로 요청할 수 있다. 이 때문에 해당 서버를 교체하게 된다면 이전 상태를 알 수 없게 되므로 상태 정보를 다른 서버에도 전달해야 한다.

 

고객 : A버거 세트 주세요

점원 : 음료는 무엇으로 하시겠습니까? (A버거 세트 상태 유지)

 

고객 : 콜라로 주세요

점원 : 알겠습니다. 5,000원 결제 도와드리겠습니다. 어떻게 결제하시겠어요? (A버거 세트, 음료 콜라 선택 상태 유지)

 

고객 : 카드로 하겠습니다.

점원 : 결제되었습니다. (A버거 세트, 음료 콜라 선택, 카드 상태 유지)

 

만약, 점원이 중간에 바뀐다면?

고객 : A버거 세트 주세요

점원1 : 음료는 무엇으로 하시겠습니까?

 

고객 : 콜라로 주세요

점원2 : ?? 콜라만 주문하시겠어요?

 

고객 : 카드로 하겠습니다.

점원3 : ?? 어떤 메뉴를 카드로 주문하시겠어요?

 

 무상태(Stateless)

서버가 클라이언트의 상태를 유지하지 않는다면, 클라이언트는 매번 데이터를 추가하여 요청해야 한다. 매번 데이터를 송신하므로 서버가 중간에 바뀌어도 문제가 되지 않는다.

즉, 갑자기 클라이언트의 증가에따라 무한히 서버를 증설할 수 있다. (수평확장이 유리하다, 스케일 아웃)

 

고객 : A버거 세트 주세요

점원 : 음료는 무엇으로 하시겠습니까?

 

고객 : A버거 세트, 음료는 콜라로 주세요

점원 : 알겠습니다. A버거 세트, 콜라로 선택하셔서 5,000원 결제 도와드리겠습니다. 어떻게 결제하시겠어요?

 

고객 : A버거 세트, 음료는 콜라로 주세요 결제는 카드로 하겠습니다.

점원 : 결제되었습니다. 

 

점원이 중간에 바뀌면?

고객 : A버거 세트 주세요

점원1 : 음료는 무엇으로 하시겠습니까?

 

고객 : A버거 세트, 음료는 콜라로 주세요

점원2 : 알겠습니다. A버거 세트, 콜라로 선택하셔서 5,000원 결제 도와드리겠습니다. 어떻게 결제하시겠어요?

 

고객 : A버거 세트, 음료는 콜라로 주세요 결제는 카드로 하겠습니다.

점원3 : 결제되었습니다. 

 

 

◾무상태 (Stateless) 의 실무적 한계

  • 모든 것을 무상태로 설계할 수는 없다.
    • 예를들면, 로그인이 필요없는 화면은 무상태, 로그인의 경우는 상태유지로 설계하는 것이다.
    • 로그인한 경우, 로그인 했다는 상태를 서버에 유지해야한다.
  • 상태유지는 최소한으로 사용한다.
  • 상태를 유지하는 방법 : 브라우저 쿠키, 서버 세션 둥

 

반응형