HTTP 프로토콜 특징
HTTP 프로토콜은 상태가 없는(stateless) 프로토콜입니다. 여기서 상태가 없다라는 말은 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리가 된다는 말입니다. 좀 더 쉽게 말해서 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다는 말이죠.
이러한 특징 덕택에 서버는 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능 상의 이점이 생깁니다.
HTTP 프로토콜은 일반적으로 TCP/IP 통신 위에서 동작하며 기본 포트는 80번입니다.
URL을 이용하면 서버에 특정 데이터를 요청할 수 있습니다. 여기서 요청하는 데이터에 특정 동작을 수행하고 싶으면 어떻게 해야 할까요? 바로 HTTP 요청 메서드(Http Request Methods)를 이용합니다.
일반적으로 HTTP 요청 메서드는 HTTP Verbs라고도 불리우며 아래와 같이 주요 메서드를 갖고 있습니다.
- GET : 존재하는 자원에 대한 요청
- POST : 새로운 자원을 생성
- PUT : 존재하는 자원에 대한 변경
- DELETE : 존재하는 자원에 대한 삭제
이와 같이 데이터에 대한 조회, 생성, 변경, 삭제 동작을 HTTP 요청 메서드로 정의할 수 있습니다. 참고로 때에 따라서는 POST 메서드로 PUT, DELETE의 동작도 수행할 수 있습니다.
기타 요청 메서드는 다음과 같습니다.
- HEAD : 서버 헤더 정보를 획득. GET과 비슷하나 Response Body를 반환하지 않음
- OPTIONS : 서버 옵션들을 확인하기 위한 요청. CORS에서 사용
웹 소켓 통신 특징
웹소켓은 서버와 클라이언트 간의 효율적인 양방향 통신을 실현하기 위한 구조이다. 최근에는 Gmail처럼 데이터의 실시간 특성을 중시한 웹 애플리케이션이 많이 등장하여 많은 주목을 받고 있다.
자바스크립트의 처리 성능이 크게 개선된 현재, 웹 애플리케이션의 성능면에서 병목 현상이 나타나는 것은 네트워크 통신 부분으로 웹 소켓은 실시간 웹을 구현하기 위한 핵심 기술로 기대받고 있다.
웹 소켓은 단순한 API로 구성되어 있어, 서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술이다.
XMLHttpRequest와 Server-Sent Event를 조합해서 양방향 통신을 구현하는 경우와 비교해 통신 효율이 좋고, 설계나 구현도 간단해지는 장점이 있다.
HyperText Transfer Protocol인 HTTP는 오랜 시간 우리 곁에 있었다. 우리의 브라우저 창에는 늘 http:// 가 따라 붙고 있으니 말이다.
그러나, 이 오랜 시간 사용된 HTTP는 Client-Server간 접속을 유지하지 않으며, Client-Server간 한 번에 한 방향으로만 통신이 가능한 half-duplex이다.
점차 서로간 주고받는 데이터의 양이 많아지면서 half-duplex(반이중)으로 인한 성능 저하는 피할 수 없게 되었다.
또한 HTTP는 지나치게 많은 헤더 데이터를 가지고 있다. 특히 Client(브라우저)가 요청을 보내지 않아도 Server가 데이터를 보내주는 기능의 구현에 있어서는 많은 고민이 있어왔지만 HTTP의 근본적 메커니즘 탓에 한계가 있어왔다. (Polling, Long Polling 등) 그래서 HTML5에 이 WebSocket이 포함되었다. 이름처럼, 이 WebSocket을 사용하면 더 이상 ActiveX를 사용하지 않고도 TCP/IP 소켓통신을 구현할 수 있다. 또한 네트워크의 과부하를 줄이고 애플리케이션의 반응성을 높일 수 있게 된다.
앞서 말한 HTTP 헤더 크기 문제도 800byte에서 수 kbyte의 헤더 크기를 가지고 있는 HTTP와 달리 WebSocket은 수 byte 수준으로 압축이 가능하다.
물론 WebScoekt이 HTTP를 대체하는 것은 아니다. 다만 HTTP가 적합치 않은 메세징, 트랜잭션 및 애플리케이션 특성 상 트래픽이 높고 지연시간이 낮은 환경에서 유용하다. RMI(Rremote Method Invocation), JMS(Java Messaging Service), XMPP(Extensible Messaging and Presence Protocol) 등이 그 예이다.
출처 : https://joshua1988.github.io/web-development/http-part1/
'기타' 카테고리의 다른 글
지렁이의 죽음에 대한 고찰 (1) | 2023.10.14 |
---|---|
개발자 면접 예상 질문 알아보기 (0) | 2023.09.25 |
죽기 전에 꼭 해보고 싶은 것들 (버킷리스트) (0) | 2023.09.16 |
제로 아이스크림이 별로 없는 이유 (0) | 2023.09.09 |
인메모리 데이터베이스: Redis와 RabbitMQ의 차이점과 데이터 내구성 보장 방법 탐색 (0) | 2023.02.20 |
댓글