인터넷 프로토콜
HTTP
- HTTP/1.1, HTTP/2는 TCP 기반, HTTP/3은 UDP 기반 프로토콜
- HTTP의 특징
- 클라이언트 서버 구조
- 무상태성 프로토콜(Stateless)
- 서버가 클라이언트의 상태를 보존하지 않음
- 서버의 확장성 높음(스케일 아웃), 클라이언트가 추가 데이터를 전송해야 함
- 예를 들면, 고객(클라이언트)과 점원(서버)의 관계를 살펴보면
- 점원이 상태를 저장하지 않으면, 고객이 상태를 계속 전달해주어야 하는 단점
- 하지만 고객의 증가로 점원을 추가적으로 투입해야 할 때에도 문제가 발생하지 않음
- 상태 유지 vs 무상태성
- 상태 유지는 클라이언트A의 요청은 항상 같은 서버인 서버 1이 응답해야 한다
- 서버 1에 장애가 생긴다면, 서버 2로 이동해 처음부터 다시 요청해야 한다
- 무상태성이라면 아무 서버나 호출하여 요청을 이어나가면 된다
- 또한 응답 서버를 쉽게 바꿀수 있으므로 수평 확장으로 서버를 무한히 증설할 수 있다
- 하지만 모든 것을 무상태성으로 설계할 수는 없으므로 실무적 한계에 부딪힌다
- 로그인이 필요한 서비스라면, 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 유저의 상태를 유지해야 함
- 비연결성(Connectionless)
- TCP/IP의 경우 기본적으로 연결을 유지, 서버의 자원이 계속 소모됨
- HTTP는 실제 요청을 주고받을 때만 연결을 유지하고, 응답을 주고 나면 TCP/IP 연결을 끊음, 최소한의 자원으로 서버 유지를 가능하게 함
- 트래픽이 많지 않고, 빠른 응답을 제공할 수 있는 경우에 효율적으로 작동함
- 그러나 트래픽이 많고, 큰 규모의 서비스에는 한계가 명확함
- TCP/IP 연결을 새로 맺어야 함(즉, 3way handshake 시간이 추가됨)
- 웹 브라우저로 사이트를 요청하면, HTML, JS, CSS, 추가 이미지 등 수 많은 자원이 함께 다운로드 되야 함
- 최근에는 HTTP 지속 연결(Persistent Connections)로 문제를 해결
- HTTP/2, HTTP/3에서 더 많은 최적화가 이루어짐
- HTTP 메세지
- 단순함, 확장 가능