CS

[Network] 실시간 통신 - AJAX(polling, long polling, streaming)

KJihun 2024. 1. 31. 15:06
728x90

 

 

iso 7계층

 

 

통신을 하기 위해서는 3-way handshake를 통해 연결하는 과정을 거치고,

데이터 전송 후, 4-way handshake를 통해 연결을 끊는 과정을 거친다.

이 3-way handshake와 4-way handshake과정은 4계층의 TCP통신을 통해 이루어지고, 

HTTP통신은 7계층에서 데이터를 전송하는 부분만 담당한다.

 

즉, OSI 4계층에서 3-way-handshake로 연결과정을 거치고 7계층에서 HTTP 기반으로 데이터 전송을 하고 다시 4계층에서 4-way-handshake로 연결을 끊는 과정을 거친다.

 

HTTP통신은 TCP통신과는 다르게 일반적으로 클라이언트가 서버에게 요청을 보내고, 서버가 클라이언트에게 응답을 보내는 단방향 통신이다.

오늘은 실시간 양방향 통신에 대한 기술들을 정리하려 한다.

 

양방향 통신 기술

 

AJAX

AJAX는 HTTP의 한계성(지속적인 연결(persistent connection)의 불가능)을 극복하고자 나타난 기술(개념)이다.

 

일반적으로 웹의 프로토콜은(HTTP,HTTPS) 클라이언트(웹 브라우저)에서 서버에 요청을 요구해야지 서버에서 반응하여 응답을 통해 화면이 출력이 되는데, 이 방법은 실시간으로 데이터를 갱신하거나 인터렉티브한 동적인 웹서비스를 구현하기엔 불가능한 요소로 작용된다.

 

예를 들면 실시간으로 정보를 확인해야하는 대시보드(예: 스포츠 중계, 보안 관제서비스)의 경우 실시간으로 데이터가 재갱신(Refresh,Reload)가 자주 일어나야 하므로 기존의 방법으로는 많은 문제들에 부딪치게 된다.

 

이러한 문제를 해결하고자 세계각지의 개발자들은 여러가지 방법(혹은 편법)을 고안해내기 시작했고 이를 우리는 코멧(Comet)이라고 부르며ㅡ, 또는 Ajax(혹은 Reverse Ajax, Ajax Push)라고 한다.

 

Ajax는 일반적으로 polling , Long polling , streaming 방식이 있다.

 

1. polling

 

클라이언트가 일정 주기로 서버에게 필요한 데이터를 요청하는 방식이다.

  • 구현이 간단하지만 변경사항이 없어도 지속적으로 요청을 보내기 때문에 오버헤드 발생한다.
  • 일정 주기로 요청을 보내는 방식이기에, 다른 방법들에 비해 실시간성이 떨어진다.

 

2. Long polling

 

1. 클라이언트는 서버로 Http Request를 보낸다

2-1. 서버는 전달할 데이터가 있다면 Response 전달한다.

2-2. 전달할 데이터가 없다면 전달할 데이터가 생길 때까지 대기 후, 전송할 데이터가 생기면 클라이언트에게 전송한다.

3. 전송 후 연결을 끊는다.

  • 여전히 불필요한 HTTP 요청이 발생한다.
  • 이벤트 발생이 빈번할 경우, 연결 및 해제에 자원낭비가 심해진다.

 

3. streaming

 

1. 클라이언트가 서버에 요청 전송한다.

2. 서버는 연결을 열어두고 새로운 정보가 생길 때마다 데이터를 전송한다.

3. 클라이언트는 이를 통해 실시간으로 데이터를 수신하며, 서버는 연결을 계속 유지한 상태에서 데이터를 전송한다.

  • Long polling과 같은 방식이지만, response 후에도 연결을 끊지 않는다
  • 실시간성이 가장 뛰어나지만, 구현이 복잡하고 서버 리소스를 많이 낭비하게 될 수 있다.

 

 

 

AJAX로 구현한 실시간 통신은 서버에서 원하는 타이밍에 클라이언트에게 데이터를 보낼 수 없을 뿐더러,

HTTP의 특징인 비연결성으로 인해 실시간 통신의 효율이 많이 떨어져 외부 플러그인이 항상 필요하다.

이를 극복하고자2014년 HTML5에서 webSocket API가 등장하게 되었다.

 

[Network] 실시간 통신 - webSocket

webSocket 서버 - 클라이언트 간 언제든 양방향 통신 및 데이터 전송이 가능하도록 Socket Connection을 유지하는 기술이다. SNS, LoL같은 멀티플레이어 게임, 구글 Doc, 증권거래, 화상채팅 등 Real-time web app

developerhun.tistory.com

 

 

'CS' 카테고리의 다른 글

[CS] REST, RESTful API란?  (0) 2024.05.24
[Network] 실시간 통신 - webSocket  (0) 2024.01.31
[Network] Load Balancing, Clustering (로드밸런싱, 클러스터링)  (0) 2024.01.30
메시지 큐(MQ; Message Queue)  (0) 2024.01.30
[Spring] Batch  (0) 2023.12.07