Step-by-Step

HTTP vs WebSocket vs Socket.IO 본문

IT 기술

HTTP vs WebSocket vs Socket.IO

희주(KHJ) 2023. 3. 8. 21:17

Http vs WebSocket

출처 : https://www.scaleway.com/en/blog/iot-hub-what-use-case-for-websockets

HTTP(HyperText Transfer Protocol)은 기본적으로 "Client의 요청 - Server의 응답" 방식으로 이루어져있다. 클라이언트의 요청이 있는 경우에만 서버가 응답으로 리소스를 전송한 후, 연결을 바로 끊는 일방향 통신 기법이다. 또한 서버는 클라이언트의 정보를 저장하지 않는 Stateless 속성을 지녔으며, 쿠키나 세션을 통해 Stateful하도록 만들 수는 있다. 하지만 클라이언트가 정보가 필요한 경우에만 요청하고 응답하는 방식은, 두 클라이언트 사이의 정보를 유지하면서 끊임없이 정보를 주고받는 실시간 및 양방향 통신에는 적합하지 않다. 만약 HTTP로 채팅이나 실시간 통신을 구현하게 된다면, 모든 클라이언트들이 다른 클라이언트로부터 온 메세지가 있는지 지속적으로 서버에 요청 후 응답을 받아 확인해야 할 것이다.

WebSocket은 하나의 TCP 접속으로 양방향 통신을 제공하는 컴퓨터 통신 프로토콜이다. HTTP 포트 80(http)과 443(https) 위에서 동작되도록 설계되었기 때문에 HTTP 프로토콜과 호환이 된다. 기본적으로 클라이언트로부터 HTTP 요청이 오면, HTTP 업그레이드 헤더를 이용한 웹소켓 핸드쉐이크를 통해 HTTP 프로토콜에서 웹소켓 프로토콜로 변경하게 된다. 클라이언트가 일방적으로 요청을 보내는 HTTP와 달리, 웹 소켓에서는 서버가 직접 브라우저에 데이터를 보낼 수 있고 브라우저도 요청없이 서버로부터 데이터를 받을 수 있다. 또한 REQ - RES 구조를 이루고 있지 않아서, 데이터 전송에 대한 응답이 필수가 아니다. 

 

 

WebSocket vs Socket.IO

일단 WebSocket프로토콜이고, Socket.IO는 웹 소켓 기술을 이용하는 라이브러리이다.

웹 소켓의 확장형 답게 Socket.IO도 양방향 통신을 지원할 뿐 아니라, String 전달 방식 / 접속 중인 소켓 저장 및 필드 값 지정 등 여러 불편함을 개선한 기능들이 지원된다. Socket.IO를 이용하면 JSON, 함수 등의 정보를 전달할 수 있으며, 각 소켓의 룸 정보를 부여하여 룸 별로 소켓을 구별할 수 있다. 또한 WebSocketServer 시점에서 Socket의 정보를 일일이 가져와 처리하는 것이 아니라, 소켓 시점에서 소켓 단위로 처리할 수 있다. 

 

 

+++

WebSocket만 이용하면 양방향 통신 방식을 이용하되 많은 기능이 없어 사용자가 필요한 부분만 직접 커스텀해서 제작할 수 있으며, 직관적이고 가벼운 어플리케이션 제작이 가능하다. 반대로 Socket.IO를 사용하면 WebSocket을 포함한 편리한 기능을 많이 이용할 수 있고, 간결한 코드 작성이 가능하다는 장점이 있다.

저는 Socket.IO가 훨씬 편한듯 합니다.

 

 

Comments