웹소켓 소개

 

사용자가 직접 화면을 갱신하지 않아도 자동으로 화면을 갱신하는 애플리케이션이 있다.

주식이나 채팅 애플리케이션이 대표적이다. 이러한 일을 하려면 서버에 주기적으로 요청을 보내서 받아오거나 서버에서 데이터를 보내주어야한다.

요청에 대해서만 응답하는 HTTP 통신

 

웹은 HTTP 프로토콜 위에서 동작하고 있기 때문에 요청을 보내야지만 서버가 응답을 주게 된다.

즉 양방향 통신을 지원하지 않는다.

 

웹소켓(WebSocket)

웹소켓(ws)은 하나의 TCP 컨넥션으로 서버와 클라이언트 간에 양방향 통신을 할 수 있게 만든 프로토콜이다.

웹소켓은 양방향 통신을 지원하므로 브라우저 상에서 리프레시 없이 실시간성을 요구하는 애플리케이션을 구현한다.

 

 

양방향 통신이 가능한 웹소켓

 

웹소켓의 특징은 크게 두 가지이다.

 

1. 양방향 통신

양방향 통신은 데이터를 동시에 처리한다는 뜻이며 클라이언트와 서버가 원하는 때 데이터를 주고받을 수 있다는 의미.

통상적인 HTTP 통신은 클라이언트가 요청하는 때만 서버가 응답하는 단방향 통신이였다.

 

2. 실시간 네트워킹을 구현하는 것이 용이하다.

웹 환경에서 연속된 데이터를 빠르게 노출하고 싶을 때, 예를 들어 채팅이나 주식 앱에 적합.

또한 브로드캐스팅을 지원하므로 여러 클라이언트와 빠르게 데이터를 교환할 수 있어 편리하다.

※브로드캐스팅 : 데이터를 전송할 때 여러 단말장치 대해 동일한 정보나 메시지를 일제히 전송하는 기술.

 

 

 

웹소켓의 동작 방법

 

웹소켓 프로토콜은 크게 핸드 쉐이크와 데이터 전송으로 나눌 수 있다.

 

핸드 쉐이크 : 통신을 하는 웹서버와 브라우저가 암호화 통신을 시작할 수 있도록 신분을 확인하고, 필요한 정보를 클라이언트와 서버가 주고 받거니하는 과정이 악수와 비슷해서 붙혀진 이름이다.

 

SSL 핸드쉐이크 과정

 

 

※ SSL : TCP/UDP같은 일반적인 통신에 안전한 계층을 추가하는 방식

SSL에 탑재된 기술 : 통신 대상을 확인하는 신분 확인, 하나의 키로 암호화/복호화를 수행하는 대칭키 암호화 방식 등

 

 

1. 먼저 클라이언트가 서버에 접속해 말을 걸면서 몇가지 정보를 제공한다.

  • 브라우저가 사용하는 SSL혹은TLS 버전 정보
  • 브라우저가 지원하는 암호화 방식
  • 브라우저가 임의로 생성한 난수

2. 서버도 인사에 응답하고, 다음 정보를 클라이언트에게 제공한다.

  • 서버의 공개키가 담긴 SSL 인증서
  • 서버가 임의로 생성한 난수

 

3. 브라우저는 서버가 제공한 SSL인증서가 믿을만한지 확인

  • CA공개키를 가지고 암호화된 SSL인증서를 복호화해서 확인

 

4. 브라우저의 난수 값과 서버에서 받은 난수 값을 이영해 premaster secret 값을 생성

 

5. 서버는 사이트의 비밀키로 받은 premaster secret 값을 복호화 한다.

  • 서버는 premaster secret 값을 master key로 저정해 session key를 만들고 이 키를 이용해 데이터의 암호화/복호화를 진행한다.

 

6. SSL handshake를 종료하고, HTTPS 통신을 시작

  • 브러우저와 서버는 SSL handshake를 정상적으로 완료하고, 웹상에서 데이터를 세션키를 통해 암호화/복호화하면서 HTTPS통해 주고 받는다.

'WEB > WebSocket' 카테고리의 다른 글

NameSpace 설정하기  (0) 2024.05.10
(WebSocket) NestJS 채팅 어플리케이션 만들기  (0) 2024.05.04

+ Recent posts