웹소켓 (Web Socket)

1. HTTP 환경의 소켓 통신, 웹소켓 (Web Socket)의 개요

(1) 웹소켓의 개념/필요성

개념필요성
웹서버와 웹브라우저 간 실시간 통신을 위해 ws 프로토콜 기반 클라이언트와 서버 사이에 지속적인 양방향 통신 채널을 제공하는 기술– HTTP 환경 실시간 양방향 통신 필요
– 리치 인터넷 어플리케이션 서비스 필요
– TCP/IP 기반 지속적인 연결 필요
– 웹서버에서 정보 push 기능 필요

(2) 웹소켓의 특징

기술 구현 측면HTML5의 기능으로 양방향 통신 API 제공
– 웹서버와 웹응용 간 Handshake 기반 상호 연결
– 양방향 전이중 통신 (Bi-Direction Full Duplex)
– TCP/IP 소켓 구조 (Listen, Accept, Send, Receive 등)
서비스 제공 측면– 대부분의 웹브라우저 지원(Google Chrome, MS Edge, Firefox 등)
– 기능이 웹브라우저에 내장되어 별도의 설치 과정 불필요
– Windows, UNIX/Linux 등 운영체제 플랫폼에 독립적
– 연결 지향 서비스로 서버 측면의 오버헤드, 보안취약점 발생
  • 웹소켓 프로토콜은 2011년 IETF에서 RFC 6455로 표준화되었으며, 웹소켓 API는 W3C에서 표준화
  • 웹소켓은 HTTP에서 사용하는 TCP 80, 443을 사용하여 HTTP 프로토콜과 호환되나 양방향 전이중 통신이 불가능한 HTTP와는 구별됨

 

2. 웹소켓의 동작 과정 및 구현 요소

(1) 웹소켓의 동작 과정

동작 과정
과정 별
처리 내용
– 웹브라우저와 웹서버간 Handshake를 통해 연결
– 웹브라우저에서 WebSocket 객체 생성
– 웹브라우저는 연결 시 사용한 WebSocket 객체를 이용하여 데이터 전송
(send() 함수 이용하여 웹서버로 데이터 전송)
– 웹서버로부터 처리된 결과는 WebSocket 객체의 핸들러를 통해서 수신
(onMessage() 핸들러를 이용하여 웹서버로부터 데이터 수신)
– Event 발생 시 웹서버에서 데이터를 브라우저로 Push
– 웹브라우저는 WebSocket 객체의 핸들러를 통해 지속적 수신
(onMessage() 핸들러를 이용하여 웹서버로부터 데이터 수신)
– 웹브라우저는 이를 위해 Polling 불필요

(2) 웹소켓 동작을 위한 구현 요소

기능구현 요소구현 방법
서버 연결WebSocket 함수var type 객체명 = new WebSocket(도메인[URL]);
(e.g.) var wSocket = new ws://domain/demoapp
데이터 송신send 함수wSocket.send(송신메시지);
데이터 수신onmessage 함수wSocket.onmessage=function(e);
(웹서버로부터 수신된 Push 데이터 처리)
연결 설정onopen 함수wSocket.onopen();
연결 해제onclose 함수wSocket.onclose();
서버 구현jWebSocketServer웹브라우저와 통신을 위해 웹소켓 서버 구현
(e.g.) JVM 환경에서 jWebSocketServer 실행
  • 웹서버의 웹 소켓 서버 구현을 위해서는 Apache Tomcat을 이용하거나 Standalone으로 구현

 

3. 웹소켓 사용 시 고려사항

  • 웹소켓 사용시 보안취약점 존재 여부 점검
  • 웹서버 부하를 고려한 서비스 설계 (Standalone, JVM 환경 등)
  • 웹소켓을 위한 다양한 오픈소스 활용 및 웹소켓 모듈별 성능 검증 실시
  • 예상되는 동시접속자 수용 위한 성능 테스트 수행(PUSH 테스트 등)

 

[참고]

  • W3C, The Web Sockets API
  • MDN Web Docs, WebSocket을 이용하여 클라이언트 애플리케이션 작성하기

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^