목차
개요
Web Socket을 이용해 Web 화상 회의, SNS등의 시스텝 개발이 증가하고 있습니다. WebSocket는 새로운 네트워크용 통신규격으로서 개발 되어 지고 있습니다. 이 글에서는 WebSocket는 어떤 것 인지에 대해 소개 하겠습니다.
Web Socket이란?
브라우저와 웹서버간의 쌍방향 통신을 하기 위한 통신 규격입니다. 쌍방향의 HTTP프로토콜로 클라이언트와 서버통신을 말하는데 Web Socket는 HTTP와 달리 ws://
또는 wss://
로 시작하며 클라이언트와 서버간의 접속은 어느쪽이든 한쪽이 접속이 끊기게 되면 종료됩니다. Web Socket이 동작하는 구조는 상태코드 101
이 프로토콜 전환을 나타 냅니다.
Web Socket는 서버단과 유저간 항상 온라인 상태를 유지함으로써 쌍방향 통신이 가능합니다. 따라서 기존의 통신규격과 비교해 실시간 정보를 공유하는 것이 가능해졌습니다. 원래는 HTML5의 사양 일부로서 만들어졌지만 현재는 단독의 프로토콜로서 쓰여지고 있습니다.
WebSocket 동작 메커니즘
WebSocket으로 통신을 시작할 때 클라이언트는 HTTP와 마찬가지로 요청을 보냅니다.
클라이언트가 다음 요청을 제출하면,
GET /chatService HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Protocol: soap, wamp Sec-WebSocket-Version: 13
서버는 이렇게 반환합니다.
HTTP/1.1 101 Switching Protocols Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: wamp
SNS의 유행이 탄생의 계기? WebSocket의 역사
지금까지는 웹에서 다양한 통신을 하기 위해서는 HTTP를 사용하는 것이 하나의 주류가 되었습니다.
HTTP상에서 작성된 문서를 전송하기 위한 프로토콜로서 사용되어, 이것에 의해 인터넷을 통한 커뮤니케이션이 가능하게 되었습니다.
그러나 세상의 변화함과 동시에 SNS 등이 등장, 즉시 반응할 수 있는 실시간 교환이 요구되게 되었습니다. 이러한 배경에서 누군가가 포스팅하게 되면 포스팅하는 순간 즉시 타인도 볼 수가 있는 통신 규격의 개발이 시작됩니다.
WebSocket이 개발될 때까지 오랫동안 HTTP를 사용하여 빈공간을 채우려 했지만 HTTP는 실시간 통신을 어렵게 만드는 몇 가지 문제가있었습니다.
우선, 하나의 커넥션으로 1개의 리퀘스트 밖에 보낼 수 없다는 것과 리퀘스트는 클라이언트측에서 밖에 보낼 수 없는 2개의 점이 문제가 되고 있었습니다.
그래도 HTTP를 계속 사용하거나 Comet라고 불리는 방법을 이용해 실시간으로 움직이는 듯이 보여질 수는 있었지만 낭비가 많아 서서히 사용 빈도가 줄어 들어져 갔습니다.
HTTP의 문제점을 해소하는 새로운 프로토콜로서 실시간 통신을 가능하게 하기 위해서 WebSocket가 탄생하게 되었습니다.
WebSocket는 현재 인터넷을 통한 채팅 툴 뿐만 아니라 고동의 커뮤니케이션에서 많이 쓰여지고 있습니다. 온라인 게임, 화상 회의, 자료를 업/다운로드하는 툴 등에서도 폭넓게 쓰여지고 있습니다. WebSocket은 현대 인터넷에서의 커뮤니케이션이 주류가 되고 있는 시대에서는 없어서는 안 되는 존재라고 말할 수 있을 것입니다.
WebSocket과HTTP의 차이
WebSocket | HTTP |
---|---|
쌍방향 프로토콜. 클라이언트에서 서버로, 서버에서 클라이언트로 데이터 송신 가능. | TCP프로토콜 상의 동작하는 단방향프로토콜. HTTP리퀘스트 메소드로 접속 가능. |
실시간 업데이트가 가능한 어플리케이션에서 활용 가능( 특히 채팅 어플리케이션) | 심플한 RESTful어플리케이션에서 사용 |
계속해서 데이터를 업데이트 가능. HTTP보다 고속. | 리퀘스트나 레스폰스에 따라 동작하므로 WebSocket보다 느림. |
WebSocket의 활용사례‐Socket.io
Socket.io는 서버(Node.js)와 클라이언트(브라우저, Node.js, 또는 다른 프로그래밍 언어) 간의 양방향 통신을 확립하기 위한 WebSocket의 기술을 응용한 라이브러리입니다.