본문 바로가기
DevOps

WebSocket vs HTTP

qbang 2022. 1. 4.

HTTP 프로토콜의 동작 방식

일반적으로 google.com에 접속할 때마다 요청이 백엔드 서버로 이동하고, 해당 요청은 HTTP나 HTTPS 형식으로 들어간다. 요청이 전송되면 클라이언트와 서버 간에 TCP 연결이 생성되고, 응답이 수신되면 이 연결은 닫히게 된다.

웹 사이트가 각기 다른 5개의 정보를 검색하기 위해 웹 서버에 5개의 요청을 보낸다고 가정해보자. 요청이 서버에 도달할 때마다 별도의 별도의 연결을 생성할 것이다. 응답이 수신되면 서버에서는 데이터를 요청하는 작업을 수행할 것이다. 해당 방식이라면 만약 웹 서버에 대한 수백 개의 요청은 수백 개의 새로운 연결과 수백 개의 정보를 검색할 것이다. 즉, 웹 사이트를 방문할 때마다(요청이 있을 때마다) 매번 새로운 커넥션을 만드는 것이다. 

 

WebSocket이란

웹 소켓은 HTTP와 달리 'ws://주소'를 사용한다. 양방향 통신이므로 발신자와 수신자는 모두 데이터를 보낼 수 있다. 클라이언트가 서버와 연결을 설정할 때 처음으로 생성되는 연결은 클라이언트나 서버가 닫는 순간까지 유지된다. 

클라이언트(웹 브라우저)와 서버가 있다고 가정해보자. 연결을 시작할 때 handshake가 이루어지고 커넥션이 열린다. 연결이 열리면 양방향 메시지 처리 측면에서 통신이 발생한다. 클라이언트가 필요한 정보를 충분히 받고 연결을 닫기로 결정하면 연결이 종료된다.

 

WebSocket의 쓰임

웹 소켓은 대표적으로 새로고침없이 UI를 업데이트시켜야 하는 실시간 앱에서 활용할 수 있다. Ajax를 생각할 수 있지만, Ajax는 내부적으로 HTTP를 사용하고 있으므로 통신이 필요할 때마다 새로운 연결을 만든다. 이외에도 게임 앱이나, 채팅 앱 등에서 사용한다.

 

WebSocket을 지양해야 하는 경우

첫 번째로, 실시간 업데이트가 필요하지 않을 때이다. 한 번의 데이터 요청으로 충분한 경우, 굳이 WebSocket을 사용할 필요는 없다. HTTP는 응답 후 연결이 끊어지지만 WebSocket은 응답 후에도 연결이 지속되고 있기 때문이다. 두 번째로, Restful 서비스로 데이터를 가져오는 것이 충분할 때이다. 

 

출처: https://youtu.be/i5OVcTdt_OU

댓글