본문 바로가기
CS/네트워크

SSE, Polling, Socket

by Mecodata 2024. 4. 26.

SSE(Server-Sent-Event)

정의

- 서버에서 클라이언트로의 단방향 통신을 가능하게 하는 웹 기술 (단방향 소켓)

- 주로 실시간 업데이트 상황에서 사용 

- SSE를 통해 클라이언트는 서버로부터 업데이트된 정보를 받아 화면에 즉시 반영할 수 있음

특징

  1. 단방향 통신: SSE는 서버에서 클라이언트로의 단방향 통신을 지원
    → 클라이언트는 서버로부터 데이터를 받을 수만 있고 서버는 클라이언트로부터 데이터를 받을 수 없음
  2. 이벤트 스트림: 서버는 연결된 클라이언트에게 일련의 이벤트를 스트림으로 전송
      이벤트는 일반적으로 텍스트 형식으로 이루어져 있고, 클라이언트는 이를 받아서 처리 가능
  3. 장애 복구: SSE 연결은 HTTP 연결을 기반으로 하며, 이는 HTTP 프로토콜을 따름
      네트워크 장애 또는 기기 재부팅과 같은 상황에서도 자동으로 재연결 가능
  4. 간편한 구현: SSE는 기본적으로 웹 브라우저에서 지원되는 기술
     도의 라이브러리나 프레임워크 없이도 쉽게 구현 가능
  5. 폴링 대신 사용: SSE는 폴링에 비해 더 적은 대역폭을 사용하고 더 쉽게 구현할 수 있으며, 많은 상황에서 충분한 기능을 제공

단점

  1. 브라우저 호환성: 모든 웹 브라우저가 SSE를 완전히 지원하지는 않음
  2. 연결 유지 문제: SSE는 클라이언트와 서버 간에 지속적인 연결을 유지하고 있어야 합니다.
    →  매우 많은 클라이언트와의 연결을 관리해야 하는 상황에서는 서버 부하가 증가할 수 있음
  3. 오류 처리의 어려움: SSE에서는 클라이언트와 서버 간의 연결이 끊어졌을 때 재연결을 관리해야 함
    →  네트워크 문제나 서버 문제로 인해 연결이 끊어졌을 때 클라이언트가 적절히 처리할 수 있어야
  4. 크기 제한: 일부 브라우저에서는 SSE의 버퍼 크기에 제한을 둘 수 있음
    →  서버가 클라이언트로 보내는 데이터의 크기를 제한하거나, 클라이언트 측에서 더 큰 데이터를 처리할 수 있도록 추가적인 작업이 필요할 수 있음

 

폴링(Polling)

정의

- 클라이언트가 서버로부터 데이터를 주기적으로 요청하여 데이터를 가져오는 방식의 통신 기술

- 주로 실시간 업데이트 상황에서 사용 

종류

1. 정기적 폴링(Regular Polling)

  • 클라이언트가 일정한 간격으로 서버에 요청을 전송하는 방식의 폴링
  • 서버가 클라이언트의 요청에 대해 즉시 응답을 반환 
  • 클라이언트는 서버로부터 응답을 받은 후에 새로운 요청을 보내어 업데이트된 데이터를 가져옴
  • 비교적 구현이 쉬운 폴링이지만 서버에서 보낼 내용이 없어도 클라이언트는 알 수 없어 계속해서 Request를 통한 확인이 필요
  • 멈추지 않고 계속되는 요청으로 인하여 서버의 부하가 증가함

2. 긴 폴링(Long Polling)

  • 클라이언트가 서버에 요청을 보내면 서버는 클라이언트에게 즉시 응답 반환 X
    데이터가 업데이트되면 서버가 클라이언트에게 응답을 반환
  • 서버는 데이터를 업데이트할 때까지 클라이언트와의 연결을 유지(persist)
  • 클라이언트는 서버로부터 응답을 받은 후에 새로운 요청을 보내어 다시 데이터를 가져옴
  • 정기적 폴링에 비해 서버의 부하가 적지만 데이터의 업데이트가 빈번할 경우 정기적 폴링가 별 차이 X

특징

  1. 장애 복구: 폴링은 HTTP 연결을 기반으로 하며, 이는 HTTP 프로토콜을 따름
    →  네트워크 장애 또는 기기 재부팅과 같은 상황에서도 자동으로 재연결 가능
  2. 간편한 구현: 폴링은 기본적으로 웹 브라우저에서 지원되는 기술
    →  별도의 라이브러리나 프레임워크 없이도 쉽게 구현 가능

단점

  1. 연결 유지 문제: 폴링은 주기적으로 데이터를 가져오기 때문에 네트워크 및 서버 부하를 초래할 수 있음
  2. 실시간성과 멀어질 가능성 존재: 데이터가 업데이트될 때까지 클라이언트는 서버에 요청을 보내야 하므로 지연이 발생할 수 있음
  3. 서버 부담 증가: HTTP는 헤더가 무거운 단발성 통신이라 계속된 요청으로 인하여 다른 방식 보다 서버 부담이 증가할 수 있음

소켓(Socket)

정의

- 네트워크 통신을 위한 프로그래밍 인터페이스

- 컴퓨터 네트워크에서 프로세스 간의 양방향 통신을 가능하게 하며 소켓을 통해 데이터 송수신 가능

- 일반적으로 클라이언트와 서버 간의 통신에 사용하며 주로 TCP/IP 프로토콜을 기반으로 함
   →  HTTP에 비해 헤더가 가벼워 더 빠름

특징

  1. 양방향 통신: 소켓을 통해 양방향 통신이 가능 클라이언트와 서버는 상호 간에 데이터를 주고받을 수 있음
  2. 신뢰성: TCP 소켓은 신뢰성 있는 연결을 제공
      데이터의 전송이 보장되고 순서가 보존되며 중복된 데이터 전송이 방지됨
  3. 유연성: 다양한 네트워크 프로토콜을 지원하며 다양한 플랫폼과 언어에서 사용할 수 있음
  4. 성능: 소켓을 통한 통신은 직접적이고 효율적인 방식으로 데이터를 전송 빠른 성능을 제공
  5. 크로스 플랫폼: 다양한 운영체제와 프로그래밍 언어에서 지원 크로스 플랫폼 개발에 적합

단점

  1. 복잡성: 상대적으로 복잡한 개발 과정
  2. 보안: 소켓을 통한 통신은 보안 취약점을 가질 수 있음 추가적인 보안 기능이 필요할 수 있음
  3. 네트워크 환경 의존성: 소켓은 네트워크 환경에 의존
    네트워크 연결이 불안정하거나 지연되는 경우에는 성능이 저하될 가능성 존재
  4. 시간 지연: TCP 소켓은 연결 설정 및 해제 과정이 존재
    데이터 전송에 시간이 소요될 수 있으며 특히, 연결 설정에는 3-way handshake와 같은 추가적인 네트워크 상호작용이 필요

SSE, Polling, Socket 비교

 

'CS > 네트워크' 카테고리의 다른 글

CORS(Cross-Origin Resource Sharing, 교차 출처 자원 공유)  (0) 2024.10.23
KVM과 QEMU  (0) 2023.12.14
클러스터(Cluster)  (0) 2023.12.13
CLI vs REST 비교  (0) 2023.12.13
Ceph  (0) 2023.12.11

댓글