웹에서의 다양한 통신 방식

SeHun.J·2024년 10월 11일

기록용으로 남깁니다.
일단 아는 정보만.

통신 방식

  1. HTTP
    1-1. Polling
    1-2. Long Polling
    1-3. Stream(response Type)
    1-4. SSE (Server-Sent Events)
  2. WebSocket

HTTP

HTTP(Hypertext Transfer Protocol)는 클라이언트(브라우저)와 서버 간의 요청-응답 모델로 작동하는 프로토콜입니다. HTTP는 웹에서 정보(HTML, 이미지, JSON 등)를 주고받기 위해 사용되며, 기본적으로 요청을 보내고 응답을 받는 방식으로 동작합니다.

특징

  • Stateless: HTTP는 기본적으로 Stateless 프로토콜로, 서버는 클라이언트의 이전 요청 상태를 기억하지 않습니다.
  • 단방향 통신: 클라이언트가 요청할 때만 응답을 보낼 수 있습니다.

Polling (폴링)

Polling은 클라이언트가 서버에 주기적으로 요청을 보내 서버의 상태를 확인하는 방법입니다. 이 방식은 실시간 통신을 필요로 하는 애플리케이션에서 사용됩니다.

특징

  • 단순성: HTTP 통신을 그저 주기적으로 보내서 구현하므로 간단하고 모든 브라우저에서 지원이 가능합니다.
  • 비효율성: 불필요한 요청이 많아져 네트워크 트래픽이 증가합니다.
  • 서버부하: 빈번한 요청으로 인해 서버에 부하가 증가합니다.

Long Polling (롱폴링)

Long Polling은 Polling의 개선된 형태로, 클라이언트가 서버에 요청을 보내고 서버가 새로운 데이터가 준비될 때까지 응답을 지연시키는 방식입니다. 새로운 데이터가 도착하면 서버는 클라이언트에 응답하고 클라이언트는 즉시 새 요청을 보냅니다.

특징

  • 효율성: 폴링 방식에서 불필요한 요청을 줄여 효율이 개선되었습니다.
  • 상태 변화 감지: 새로운 데이터가 준비되면 즉시 클라이언트에 전달되므로 더 나은 실시간 통신이 가능합니다.
  • 커넥션 유지: 서버에서 각 클라이언트의 요청을 유지해야 하므로 리소스 소모가 증가합니다.

Stream (responseType)

Stream은 HTTP 프로토콜을 사용하여 데이터를 스트리밍하는 방식으로, 클라이언트가 서버에 요청하면 서버가 데이터를 연속적으로 전송합니다. 주로 대량의 데이터 전송이나 실시간 데이터 피드에 사용됩니다.

특징

  • 실시간 전송: 데이터가 준비되는 대로 클라이언트에 전송할 수 있어 빠른 반응성을 제공합니다.
  • 브라우저 호환성: 모든 브라우저가 Stream를 동일하게 지원하지 않을 수 있습니다.
  • HTTP/2: Stream은 기본적으로 HTTP/2부터 지원합니다.

참고
https://web.dev/articles/fetch-upload-streaming?hl=ko

SSE (Server-Sent Events)

SSE는 서버에서 클라이언트로 데이터를 푸시하는 데 사용되는 기술입니다. HTTP 프로토콜을 기반으로 하며, 클라이언트는 서버에 연결을 유지하여 서버로부터 이벤트를 수신할 수 있습니다.

특징

  • 단순한 구현: SSE는 HTTP를 기반으로 하므로 사용하기 쉽고 잘 지원됩니다.
  • 자동 재연결: 연결이 끊어지면 클라이언트가 자동으로 재연결할 수 있습니다.
  • 단방향 통신: 서버에서 클라이언트로만 데이터를 푸시할 수 있으며, 클라이언트가 서버에 데이터를 전송하는 데는 다른 방법이 필요합니다.
  • 종료감지 어려움: 클라이언트가 페이지를 닫아도 서버에서 감지하기가 어렵습니다.
  • 서버 부담: SSE는 지속적인 연결을 유지해야 하므로, 많은 클라이언트가 동시에 연결을 유지할 경우 서버 부담이 커질 수 있습니다.
  • 메소드 제한: GET 메소드로만 요청을 보낼 수 있어서, 요청과 함께 데이터를 보내기가 어렵습니다.
  • 연결 제약: HTTP 버전에 따라 브라우저가 최대로 연결할 수 있는 SSE 커넥션은 HTTP1.1은 6개, HTTP2는 100개로 제약이 있습니다.
  • 데이터 포맷: 서버에서 전송하는 데이터는 텍스트 기반이어야 하며, 이진 데이터 전송에는 적합하지 않습니다.

WebSocket

WebSocket은 클라이언트와 서버 간의 양방향 통신을 지원하는 프로토콜로, 초기 HTTP 핸드셰이크 후 지속적인 연결을 유지합니다. 이를 통해 클라이언트와 서버 간의 데이터 전송이 실시간으로 이루어집니다.

특징

  • 양방향 통신: 클라이언트와 서버가 서로 데이터 전송을 자유롭게 할 수 있어 실시간 애플리케이션에 적합합니다.
  • 효율성: 연결이 지속되므로 새로운 요청을 위한 오버헤드가 줄어듭니다.
  • 서버 부담: 지속적인 연결로 인해 연결된 클라이언트 수가 많을수록 부담이 증가합니다.
profile
취직 준비중인 개발자

0개의 댓글