05AM

WebSocket의 정의와 HTTP와의 차이점 본문

1 week 1 conquer/CS

WebSocket의 정의와 HTTP와의 차이점

_05AM 2023. 4. 20. 21:48
WebSocket을 알아보기 전에 HTTP의 정의를 먼저 알아보자.

HTTP

서버와 클라이언트는 프로토콜이라는 정해진 규약에 따라 통신하는데, HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다.

 

서버와 클라이언트의 통신에 일반적으로 사용되는 http 프로토콜은 클라이언트가 요청을 보내면 서버가 응답하는 형식으로, 서버는 응답을 보낸 후 연결을 끊는 단방향 통신이다. 또한 서버가 클라이언트의 상태를 보존하지 않는 무상태성이라는 특징을 가지고 있어 실시간으로 빠른 응답이 어렵다.

[출처] https://dev.classmethod.jp/articles/about-http/
[출처] https://dev.classmethod.jp/articles/about-http/

 

이런 점을 보완하기 위해 개발된 프로토콜이 WebSocket이다.

WebSocket

서버와 클라이언트 간의 양방향 통신을 제공하기 위해 개발된 프로토콜(WS)이다.

 

WebSocket은 클라이언트가 접속 요청을 하고 웹 서버가 응답한 후 연결을 끊는 것이 아니라 연결을 그대로 유지하고 클라이언트의 요청 없이도 서버에서 데이터를 전송할 수 있는 전이중 양방향 통신을 지원한다.

 

최초 접속은 일반 HTTP 요청을 통해 이루어지고, 이후 Handshaking 과정을 통해 WebSocket을 통한 통신이 이어진다. 이후에는 양방향으로 데이터를 주고 받을 수 있다.

클라이언트와 서버 간의 연결은 당사자 중 하나에 의해 종료되거나 시간 초과에 의해 닫힐 때까지 열린 상태로 유지되고, 클라이언트 또는 서버 측에서 연결이 종료될 때까지 동일한 채널을 사용하여 통신이 수행된다.

https://velog.io/@kmh916/Spring-Boot-채팅-구현SockJSStomp-0.-WebSocketSockJSStomp-란

 

HTTP 요청을 그대로 사용하기 때문에 기존의 80(http), 443(https) 포트로 접속을 하므로 추가 방화벽 설정 없이도 양방향 통신이 가능하고, HTTP 규격인 CORS 적용이나 인증 등의 과정을 기존과 동일하게 가져갈 수 있는 것이 WebSocket의 장점이다.

 

WebSocket을 사용하면 전송되는 데이터를 암호화할 수 있다. 이를 위해 추가 기능이 WSS 프로토콜을 통해 사용되며, 송신측에서는 데이터를 인코딩하고 수신측에서는 디코딩한다. 모든 중개자의 경우 정보가 암호화된 상태로 유지된다. 암호화가 없으면 데이터가 위협의 대상이 된다.

 

WebSocket은 서비스를 동적으로 만들어주지만, 데이터의 크기가 작고 전송 빈도가 적다면 Ajax, Streaming, Long polling 기술이 더 효과적일 경우도 있다. 뉴스나 메일, SNS 피드는 동적으로 업데이트 되어야 하지만 그 빈도가 낮고, 게임, 금융, 챗봇, 푸쉬 알림, IoT 등의 분야에서는 실시간을 지원해야 한다. 상황에 따라서 적합한 기술을 선정하는 과정이 필요하다.

 

 

참고

WebSocket이란 무엇이며 어떻게 생성합니까? | AppMaster
[Spring Boot] WebSocket과 채팅 (1)

Comments