SSE(Server-Sent-Event)
정의
- 서버에서 클라이언트로의 단방향 통신을 가능하게 하는 웹 기술 (단방향 소켓)
- 주로 실시간 업데이트 상황에서 사용
- SSE를 통해 클라이언트는 서버로부터 업데이트된 정보를 받아 화면에 즉시 반영할 수 있음
특징
- 단방향 통신: SSE는 서버에서 클라이언트로의 단방향 통신을 지원
→ 클라이언트는 서버로부터 데이터를 받을 수만 있고 서버는 클라이언트로부터 데이터를 받을 수 없음 - 이벤트 스트림: 서버는 연결된 클라이언트에게 일련의 이벤트를 스트림으로 전송
→ 이벤트는 일반적으로 텍스트 형식으로 이루어져 있고, 클라이언트는 이를 받아서 처리 가능 - 장애 복구: SSE 연결은 HTTP 연결을 기반으로 하며, 이는 HTTP 프로토콜을 따름
→ 네트워크 장애 또는 기기 재부팅과 같은 상황에서도 자동으로 재연결 가능 - 간편한 구현: SSE는 기본적으로 웹 브라우저에서 지원되는 기술
→ 별도의 라이브러리나 프레임워크 없이도 쉽게 구현 가능 - 폴링 대신 사용: SSE는 폴링에 비해 더 적은 대역폭을 사용하고 더 쉽게 구현할 수 있으며, 많은 상황에서 충분한 기능을 제공
단점
- 브라우저 호환성: 모든 웹 브라우저가 SSE를 완전히 지원하지는 않음
- 연결 유지 문제: SSE는 클라이언트와 서버 간에 지속적인 연결을 유지하고 있어야 합니다.
→ 매우 많은 클라이언트와의 연결을 관리해야 하는 상황에서는 서버 부하가 증가할 수 있음 - 오류 처리의 어려움: SSE에서는 클라이언트와 서버 간의 연결이 끊어졌을 때 재연결을 관리해야 함
→ 네트워크 문제나 서버 문제로 인해 연결이 끊어졌을 때 클라이언트가 적절히 처리할 수 있어야 함 - 크기 제한: 일부 브라우저에서는 SSE의 버퍼 크기에 제한을 둘 수 있음
→ 서버가 클라이언트로 보내는 데이터의 크기를 제한하거나, 클라이언트 측에서 더 큰 데이터를 처리할 수 있도록 추가적인 작업이 필요할 수 있음
폴링(Polling)
정의
- 클라이언트가 서버로부터 데이터를 주기적으로 요청하여 데이터를 가져오는 방식의 통신 기술
- 주로 실시간 업데이트 상황에서 사용
종류
1. 정기적 폴링(Regular Polling)
- 클라이언트가 일정한 간격으로 서버에 요청을 전송하는 방식의 폴링
- 서버가 클라이언트의 요청에 대해 즉시 응답을 반환
- 클라이언트는 서버로부터 응답을 받은 후에 새로운 요청을 보내어 업데이트된 데이터를 가져옴
- 비교적 구현이 쉬운 폴링이지만 서버에서 보낼 내용이 없어도 클라이언트는 알 수 없어 계속해서 Request를 통한 확인이 필요
- 멈추지 않고 계속되는 요청으로 인하여 서버의 부하가 증가함
2. 긴 폴링(Long Polling)
- 클라이언트가 서버에 요청을 보내면 서버는 클라이언트에게 즉시 응답 반환 X
→ 데이터가 업데이트되면 서버가 클라이언트에게 응답을 반환 - 서버는 데이터를 업데이트할 때까지 클라이언트와의 연결을 유지(persist)함
- 클라이언트는 서버로부터 응답을 받은 후에 새로운 요청을 보내어 다시 데이터를 가져옴
- 정기적 폴링에 비해 서버의 부하가 적지만 데이터의 업데이트가 빈번할 경우 정기적 폴링가 별 차이 X
특징
- 장애 복구: 폴링은 HTTP 연결을 기반으로 하며, 이는 HTTP 프로토콜을 따름
→ 네트워크 장애 또는 기기 재부팅과 같은 상황에서도 자동으로 재연결 가능 - 간편한 구현: 폴링은 기본적으로 웹 브라우저에서 지원되는 기술
→ 별도의 라이브러리나 프레임워크 없이도 쉽게 구현 가능
단점
- 연결 유지 문제: 폴링은 주기적으로 데이터를 가져오기 때문에 네트워크 및 서버 부하를 초래할 수 있음
- 실시간성과 멀어질 가능성 존재: 데이터가 업데이트될 때까지 클라이언트는 서버에 요청을 보내야 하므로 지연이 발생할 수 있음
- 서버 부담 증가: HTTP는 헤더가 무거운 단발성 통신이라 계속된 요청으로 인하여 다른 방식 보다 서버 부담이 증가할 수 있음
소켓(Socket)
정의
- 네트워크 통신을 위한 프로그래밍 인터페이스
- 컴퓨터 네트워크에서 프로세스 간의 양방향 통신을 가능하게 하며 소켓을 통해 데이터 송수신 가능
- 일반적으로 클라이언트와 서버 간의 통신에 사용하며 주로 TCP/IP 프로토콜을 기반으로 함
→ HTTP에 비해 헤더가 가벼워 더 빠름
특징
- 양방향 통신: 소켓을 통해 양방향 통신이 가능 → 클라이언트와 서버는 상호 간에 데이터를 주고받을 수 있음
- 신뢰성: TCP 소켓은 신뢰성 있는 연결을 제공
→ 데이터의 전송이 보장되고 순서가 보존되며 중복된 데이터 전송이 방지됨 - 유연성: 다양한 네트워크 프로토콜을 지원하며 다양한 플랫폼과 언어에서 사용할 수 있음
- 성능: 소켓을 통한 통신은 직접적이고 효율적인 방식으로 데이터를 전송 → 빠른 성능을 제공
- 크로스 플랫폼: 다양한 운영체제와 프로그래밍 언어에서 지원 → 크로스 플랫폼 개발에 적합
단점
- 복잡성: 상대적으로 복잡한 개발 과정
- 보안: 소켓을 통한 통신은 보안 취약점을 가질 수 있음 → 추가적인 보안 기능이 필요할 수 있음
- 네트워크 환경 의존성: 소켓은 네트워크 환경에 의존
→ 네트워크 연결이 불안정하거나 지연되는 경우에는 성능이 저하될 가능성 존재 - 시간 지연: 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 |
댓글