HTTP와 WebSocket 통신의 차이

HTTP와 WebSocket은 모두 클라이언트-서버 통신에 사용되는 통신 프로토콜이지만 차이가 있습니다. 연결이 단발적인지, 지속적인지, 통신이 단방향인지 양방향인지 등에 따라 구분하며 각 특징에 맞게 활용됩니다.

Socket vs HTTP

1. HTTP 통신

HTTP(HyperText Transfer Protocol)는 단방향 통신입니다. 단방향 통신은 요청(request)과 응답(response)의 형태로 이루어집니다. 클라이언트가 서버에 요청하면 서버는 그 결과를 응답합니다. 서버는 클라이언트의 요청을 받아야만 응답을 반환합니다. 이렇게 한쪽 방향으로만 통신이 이루어지기 때문에 단방향 통신으로 간주됩니다.

 

http 통신
http 통신. 요청과 응답이 1대1로 이루어지고 있다. 출처=ably.com

 

HTTP는 stateless(상태 비저장) 프로토콜입니다. 각 요청과 응답이 독립적이며 서로 간에 상태 정보를 저장하지 않습니다. 예를 들어, 웹 사이트에 방문해서 여러 페이지를 돌아다닐 때 서버는 이전에 사용자가 한 요청을 기억하고 응답하지 않습니다. 매번 동일한 페이지 리소스를 출력합니다.

 

HTTP 통신의 예시는 정적 웹 페이지 조회하는 것을 떠올리면 됩니다. HTML, CSS, JavaScript로 구성된 컨텐츠를 요청하고 응답받아 웹 페이지에 표시하는 경우에 HTTP 통신이 사용됩니다.

 

2. WebSocket 통신

반면 웹소켓(WebSocket)는 양방향 통신을 지원하는 프로토콜입니다. 웹소켓은 클라이언트와 서버 간에 한 번 연결이 이루어지면 그 연결을 유지하면서 양방향으로 데이터를 주고받을 수 있습니다. 클라이언트가 요청해야만 서버가 응답하는 것이 아니라 양쪽 모두 언제든지 데이터를 전달할 수 있습니다.

 

websocket 통신
웹소켓 통신. 한번 연결이 이루어지고 나면 양방향으로 지속해서 통신할 수 있다. 출처=ably.com

 

클라이언트와 서버 간 연결은 어느 한쪽에 의해 종료될 때까지 활성 상태를 유지하기 때문에 stateful(상태 저장) 프로토콜입니다.

 

웹소켓이 사용되는 예시로는 실시간 채팅 앱, 온라인 게임, (출력되는 데이터가 지속적으로 변경되는)실시간 웹 등이 있습니다.

3. WebSocket 통신이 사용되는 이유

웹소켓 통신은 HTTP 일부 통신의 한계점을 극복해줍니다. 예를 들어, 아래와 같은 상황들이 있습니다.

 

1. HTTP 통신에서는 서버가 자체적으로 클라이언트에게 데이터를 보낼 수 없습니다. 때문에 서버에서 변경사항이 발생했을 때 클라이언트가 즉시 알 수 없습니다.

→ 웹소켓은 양방향 통신을 지원하기 때문에 서버에서 클라이언트에 데이터를 실시간으로 전달할 수 있습니다.

 

2. HTTP 요청은 매번 헤더 정보를 매번 반복적으로 전송합니다. 통신이 잦을수록 효율이 떨어진다고 볼 수 있습니다.

→ 웹소켓은 연결이 한 번 설정된 후에는 최소한의 헤더 정보만을 사용해 데이터를 주고받습니다. 이로써 데이터 전송에 따른 오버헤드가 줄어들어 통신 효율이 향상됩니다.

 

3. HTTP 통신은 매번 새로운 연결을 설정해야 합니다.

→ 웹소켓은 한 번 연결되면 연결이 종료될 때까지 지속됩니다. 덕분에 연결 설정에 따른 추가 지연 시간을 줄이고 지속적인 통신을 가능하게 합니다.

반응형

댓글

Designed by JB FACTORY