1. WebSocket 프로토콜
WebSocket은 RFC6445 표준이며, WebSocket을 사용하기 위해서는 ws 프로토콜을 사용합니다.
WebSocket은 Transport Protocol로서, 웹에서 사용하는 Socket으로 생각하면 됩니다.
웹은 HTTP 프로토콜을 사용하는데, WS 프로토콜을 사용하기 위해서는 어떤 과정을 거칠까요?
HTTP에서 WebSocket으로의 프토토콜 전환을 WebSocket HandShake라고 합니다.
브라우저는 프로토콜을 HTTP에서 Websocket으로 전환하려는 요청을 Header에 Upgrade 속성을 추가하여 서버로 보냅니다.
이 요청을 받은 서버가 WebSocket 프로토콜을 이해하면, Upgrade 속성을 통해 프로토콜 전환을 동의하게 되고,
그러면 브라우저와 서버는 ws 프로토콜을 사용하게 됩니다.
ws 프로콜로 전환되면, HTTP 연결은 중단되며 동일한 TCP / IP 연결을 통해 WebSocket 연결로 대체 됩니다.
WebSocket 연결은 기본적으로 HTTP( 80 ), HTTPS ( 443 )와 동일한 포트를 사용합니다.
즉, CORS 적용이나 인증 등의 과정을 기존 HTTP 방식으로 사용할 수 있는 장점이 있습니다.
2. WebSocket 특징
1) 양방향 통신
WebSocket에서 클라이언트와 서버는 지속적으로 연결된 TCP 라인을 통해 양뱡향 통신을 합니다.
처음 WebSocket을 사용할 때 Ajax와 비슷한 느낌을 받았는데, 가장 큰 차이점은 서버에서 클라이언트로 요청을 보낼 수 있다는 것입니다.
- Ajax는 클라이언트에서 서버로밖에 요청을 못하는 단방향 통신입니다.
- WebSocket은 어느 쪽에서든 요청을 보낼 수 있는 양방향 통신입니다.
2) 실시간 통신 / 성능
WebSocket은 클라이언트와 서버가 연결되어 있기 때문에 실시간 통신이 가능합니다.
그래서 실시간 채팅, 주식 등 실시간 정보가 필요한 서비스에서 주로 활용되곤 합니다.
실시간 통신은 성능이 중요한 이슈일텐데, WebSocket은 성능이 얼마나 좋을까요?
어느 논문( 링크 )에 따르면 WebSocket이 Ajax 통신보다 적게는 5배 많게는 10배 정도의 좋은 성능을 보인다고 합니다.
( 통계자료가 있던 위의 링크가 사라졌네요.. 검색을 해봤더니, 정확한 통계자료는 찾지 못했습니다. )
단, 페이지가 로드될 때 클라이언트가 서버와 커넥션을 맺으므로 성능이 더 빠르다는 주장이 많았습니다.
3) Cross Browser 문제
Web Socket은 구 버전 브라우저 ( IE 8 이하 )에서는 지원이 불가능하다는 단점이 있습니다.
2018년 6월 기준으로 WebSocket을 지원하는 주요 브라우저는 다음과 같습니다.
Can I Use - 링크
4) Stateful
WebSocket은 HTTP와 달리 상태를 유지( Stateful )하기 때문에 서버와 클라이언트는 연결을 항상 유지해야 합니다.
따라서 부하가 발생할 수 있다는 단점이 있고, 비정상적으로 연결이 끊어졌을 때 적절하게 대응할 수 있어야 합니다.
이상으로 WebSocket에 대해 알아보았습니다.
WebSocket은 클라이언트와 서버가 실시간 양방향 통신을 하는 프로토콜입니다.
WebSocket은 실시간 양방향 데이터 통신이 필요한 경우, 많은 수의 동시 접속자를 수용해야 하는 경우, 브라우저에서 TCP 기반의 통신으로 확장해야 하는 경우 등의 상황에서 사용하면 좋습니다.
[ 참고 자료 ]
http://www.websocket.org/aboutwebsocket.html
'개발 지식' 카테고리의 다른 글
메시징 시스템( Messaging System )의 이해 (4) | 2020.03.12 |
---|---|
지속적인 통합 ( CI, Continuous Integration ) - Jenkins (0) | 2018.06.03 |
JSON 과 javascript Object 차이 (2) | 2018.04.08 |
웹 서버와 WAS( Web Application Server ) 차이 (10) | 2018.01.25 |
[클라우드] SaaS, PaaS, IaaS (0) | 2018.01.24 |
객체 지향 프로그래밍( OOP ) 개념 (14) | 2018.01.24 |
[소프트웨어 공학] 유스케이스와 UML (4) | 2017.12.26 |