본문 바로가기

HTTP

[HTTP] HTTP 알아보기 (특징, 구조, 비연결성, 무상태)

반응형

HTTP란?

HyperText Transfer Protocol

클라이언트와 서버 사이가 서로 데이터를 주고받기 위한 하나의 통신 규약입니다.

 

무엇을 주고받을 수 있나요?

  • HTML, TEXT
  • 이미지, 음성,영상, 파일
  • JSON, XML (API)
  • 거의 모든 형태의 데이터
  • 서버와 서버간의 데이터

 

HTTP의 특징

  • 클라이언트 서버 구조로 동작한다.
  • 무상태 프로토콜 지향 (Stateless), 비연결성
  • HTTP 메세지를 이용한 통신
  • 단순함, 확장 가능

 

클라이언트 서버 구조

Request Response 구조라고도 하며 클라이언트가 서버에 요청을 보내고 응답을 대기한다. 서버는 요청을 받고 그 요청에 대한 결과를 만들어서 응답을 한다.

클라이언트와 서버를 분리하는 것이 중요한 이유?

클라이언트와 서버를 분리해내고 클라이언트에는 사용자가 더 편리하게 이용할 수 있도록 UI, UX를 서버에는 비즈니스 로직, 데이터를 각각 개발시킨다면 클라이언트와 서버가 각각 독립적으로 진화할 수 있다.

 

무상태 프로토콜 (Stateless)

Stateful과 Statelss의 차이점

클라이언트의 상태를 보존한다는 것은 서버와 클라이언트가 1대1로 대응한다고 생각할 수 있다. 클라이언트를 (고객) 서버를 (점원)이라고 한다면 

클라이언트 : 이 상품 얼마인가요?

점원 : 20만원입니다.

클라이언트: 2개 구매하겠습니다.

점원 : 40만원입니다. 결제는 어떻게 하시겠어요?

클라이언트 : 카드로 하겠습니다.

이렇게 1대1로 서버와 클라이언트가 서로 바뀌지 않고 대응하게 된다.

 

반면 클라이언트의 상태를 보존하지 않는 Stateless라면 어떻게 될까?

 

클라이언트 : 이 상품 얼마인가요?

점원 A: 20만원입니다.

 

클라이언트 : 상품 2개 구입하겠습니다.

점원 B : 40만원입니다. 결제는 어떻게 하시겠어요?

 

클라이언트 : 상품 2개 카드로 구매하겠습니다.

점원 C : 40만원 결제했습니다.

이렇게 Stateless 상태라면 중간중간 점원이 바뀌어도 된다. 이를 서버와 클라이언트 관계로 설명한다면 갑자기 클라이언트 요청이 증가했을 때 서버의 수를 무한히 늘릴 수 있게 된다. 위의 예시처럼 하나의 클라이언트를 하나의 서버가 일일이 다 케어해주는 것이 아니라 유연한 방식으로 어떤 점원을 만나도 상황이 해결될 수 있도록 클라이언트의 요청에 서버가 알아야 할 정보들을 다 넣어서 주기 때문에 어떤 서버가 대응을 해도 문제를 해결할 수 있게 된다.

일상생활에서 Stateless를 사용하는 예시 (동일한 시간에 여러 요청이 폭주하여 대용량 트래픽이 발생하는 경우)

  • 선착순 이벤트
  • 명절 KTX 예약
  • 티켓팅

 

비연결성 (Connectionless)

위에서도 말했듯이 HTTP는 서버와 클라이언트가 서로 통신하는 규약이라고 말했다.

서버와 클라이언트가 통신을 할 때 일반적으로 서버의 수가 많을까 클라이언트의 수가 많을까?

클라이언트가 많을 것이다. 그렇다면 클라이언트와 서버가 N : 1로 데이터를 주고받고 연결을 해야 하는데 서버 입장에서는 무수히 많은 클라이언트를 상대하기 힘들 것이다. 

 

연결성과 비연결성을 그림으로 알아보겠습니다.

출처 : 인프런 모든 개발자를 위한 HTTP 웹 기본지식

 

 

출처 : 모든 개발자를 위한 http 웹 기본지식

 

연결성 모델은 모든 클라이언트가 서버와 연결되어있는 반면 비연결성 모델은 자신에게 요청이 들어오는 클라이언트만 연결되어 있는 것을 볼 수 있다. 

비연결성의 이점

  • 초 단위 이하의 빠른 응답 속도
  • 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에서 처리하는 요청은 수십개 이하
  • 서버 자원을 매우 효율적으로 사용 가능

비연결성의 단점

  • TCP/IP 연결을 새로 맺어야 함 (3 Way Handshake 시간 추가)
  • 지금은 HTTP 지속 연결로 문제 해결

 

초기 HTTP와 현재의 HTTP 연결 방식을 그림으로 살펴보면 아래와 같다.

출처 : 인프런 - 모든 개발자를 위한 http 웹 기본지식

 

출처 : 인프런 - 모든 개발자를 위한 http 웹 기본지식

 

반응형

'HTTP' 카테고리의 다른 글

[HTTP] HTTP 상태 코드  (0) 2024.09.13
[HTTP] IP, TCP, UDP  (0) 2024.09.10