양방향 통신과 실시간 네트워킹 방식 - 폴링, 롱폴링, 웹소켓

회사에서 양방향통신에 대해 적용이 필요한 부분이 생겼다. 따라서 오늘은 양방향 통신과 실시간 네트워크 방식에 대해 스터디한 것을 정리해보려고 한다. 

 

HTTP(Hypertext Transfer Protocol) 통신은 기본적으로 '요청(Request)'과 '응답(Response)'으로 이루어져 있다.

 

표준 HTTP 통신방식은 다음과 같다. 

1. 클라이언트가 연결을 열고, 서버에 데이터를 요청한다.

2. 서버는 요청에 대한 응답(클라이언트의 요청에 따른 결과값)을 클라이언트에 다시 보낸다. 

3. 클라이언트가 서버에 요청을 보내고, 요청에 대한 응답을 받으면 통신이 종료된다.

HTTP 표준 통신방식

간단한 HTTP 요청은 서버 정보를 수신하는 가장 일반적인 방법이다. 하지만 클라이언트가 서버 데이터 변경을 실시간으로 알아차리기 위한 방법은 뭐가 있을까? 바로 폴링, 롱 폴링, 웹소켓 등이 있다. 

 

 

폴링(Polling)

폴링은 클라이언트가 서버에 일정한 주기로 요청을 보내고, 서버는 해당 요청의 응답으로 현재 상태의 데이터를 반환하는 방식이다.

 

폴링의 문제점은 변경 사항이 없어도 클라이언트가 서버에 새로운 데이터를 계속 요청해야 한다는 것이다. 그 결과 HTTP 오버헤드가 발생한다.

폴링(Polling)

롱 폴링(Long Polling)

롱 폴링은 클라이언트가 일정한 주기로 서버에 데이터를 요청하고, 서버는 데이터가 업데이트되거나 타임아웃이 발생하면 응답을 반환한다. 

 

롱 폴링은 폴링에 비해 불필요한 네트워크 트래픽을 줄이고, 실시간성을 보다 효과적으로 구현할 수 있다. 그러나 클라이언트의 연결 유지와 서버의 동시 접속 처리에 대한 고려가 필요하다.

롱 폴링(Long Polling)

웹소켓(WebSocket)

웹소켓은 클라이언트와 서버 간의 지속적인 양방향 연결을 제공하여 실시간 데이터 전송과 이벤트 기반 통신을 가능하게 한다.

  1. WebSocket 열기 : 이 과정을 Handshake라고도 하며, 클라이언트와 서버 간의 HTTP 요청/ 응답 교환으로 구성된다.
  2. WebSocket을 통한 데이터 전송: 성공적인 Handshake 이후, 클라이언트와 서버는 지속적으로 메시지를 교환할 수 있다.
  3. WebSocket 연결 닫기 : 목적을 달성하면 클라이언트와 서버 모두 종료 메시지를 전송할 수 있다. 

웹소켓(WebSocket)

 

웹소켓은 TCP 프로토콜을 기반으로 동작하며, 더 낮은 지연과 더 효율적인 네트워크 통신을 제공한다.

 

비교 및 요약

  1. 폴링: 주기적으로 서버에 데이터를 요청하는 방식으로 실시간성이 요구되지 않는 경우에 적합하지만, 불필요한 네트워크 트래픽 발생 가능
  2. 롱 폴링: 클라이언트의 요청을 지연시키고, 데이터가 업데이트되면 응답을 반환하는 방식으로 실시간성을 향상시킬 수 있으나, 클라이언트와 서버의 연결 유지에 대한 고려 필요
  3. 웹소켓: 실시간 양방향 통신을 제공하며, 지속적인 연결을 통해 데이터를 푸시하고 이벤트 기반 통신을 가능하게 함으로써 가장 효율적인 실시간 네트워킹 방식