웹 소켓 : 두 프로그램간 메세지를 교환하기 위한 통신 방법 중 하나
-> 현재 인터넷 환경(HTML5)에서 많이 사용된다.
웹 소켓을 지원하는 브라우저의 경우 웹 소켓 프로토콜 지원
양방향 통신 : 데이터 송수신을 동시에 처리할 수 있는 통신 방법(서로에게 원할 때 데이터를 주고 받을 수 있다.)
실시간 네트워킹 : 웹 환경에서 연속된 데이터를 빠르게 노출(채팅, 주식, 비디오데이터 등) -> 여러 단말기에 빠르게 데이터를 교환
동작 방법
1) 핸드 쉐이킹(http or https로 이루어짐) -> 프로토콜이 ws or wss(보안) 변경
2) 메시지 : 여러 프레임(communication에서 가장 작은 단위 데이터, 작은 헤더 + pay load로 구성) 이 모여서 구성하는 하나의 논리적 메시지 단위
-> 웹소켓 통신에 사용되는 데이터는 UTF8 인코딩
3) close 프레임을 통해 종료
특징
1) 최초 접속에서만 http 프로토콜 위에서 핸드쉐이킹을 하기 때문에 http 헤더를 사용
2) 웹소켓을 위한 별도의 포트는 없으며, 기존 포트(http-80, https-443)을 사용
3) 프레임으로 구성된 메시지라는 논리적 단위로 송수진
4) 메시지에 포함될 수 있는 교환 가능한 메시지는 텍스트와 바이너리
HTML5 이전의 기술로 구현된 서비스에서 웹 소켓처럼 사용할 수 있도록 도와주는 기술 : Socket.io, SockJS
-> Javascript를 이용하여 브러우저 종류에 상관없이 실시간 웹을 구현
-> 브라우저와 웹 서버의 종류와 버전을 파악하여 가장 적합한 기술을 선택하여 사용하는 방식
웹소켓의 한계 : 문자열들을 주고 받을 수 있게 해줄 뿐 그 이상의 일은 하지 않음
-> 주고받은 문자열의 해독은 온전히 어플리케이션에 맡김
-> HTTP는 형식을 정해두었기 때문에 모두가 약속을 따르기만 하면 해석할 수 있다.
-> 하지만 웹소켓은 형식이 정해져 있지 않아 어플리케이션에서 쉽게 해석하기 힘들다.
-> 때문에 웹소켓방식은 sub-protocols를 사용해서 주고 받는 메시지의 형태를 약속하는 경우가 많다.
STOMP (Simple Text Oriented Message Protocol)
-> 채팅 통신을 하기 위한 형식 정의
-> HTTP와 유사하게 간단히 정의되어 해석하기 편한 프로토콜
-> 일반적으로 웹소켓 위에서 사용
-> 프레임 기반 프로토콜, 프레임은 명령 / 헤더 / 바디로 구성된다.
-> 헤더와 바디는 빈 라인으로 구분하며, 바디의 끝은 NULL문자로 설정한다.