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로 데이터를 주고받고 연결을 해야 하는데 서버 입장에서는 무수히 많은 클라이언트를 상대하기 힘들 것이다.
연결성과 비연결성을 그림으로 알아보겠습니다.
연결성 모델은 모든 클라이언트가 서버와 연결되어있는 반면 비연결성 모델은 자신에게 요청이 들어오는 클라이언트만 연결되어 있는 것을 볼 수 있다.
비연결성의 이점
- 초 단위 이하의 빠른 응답 속도
- 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에서 처리하는 요청은 수십개 이하
- 서버 자원을 매우 효율적으로 사용 가능
비연결성의 단점
- TCP/IP 연결을 새로 맺어야 함 (3 Way Handshake 시간 추가)
- 지금은 HTTP 지속 연결로 문제 해결
초기 HTTP와 현재의 HTTP 연결 방식을 그림으로 살펴보면 아래와 같다.
'HTTP' 카테고리의 다른 글
[HTTP] HTTP 상태 코드 (0) | 2024.09.13 |
---|---|
[HTTP] IP, TCP, UDP (0) | 2024.09.10 |