polling과 SSE, websocket

meek·2023년 5월 25일
0

TIL

목록 보기
2/24
post-thumbnail

모두 웹 애플리케이션에서 실시간 통신을 구현하는 데 사용되는 기술이고, 이것에 대해 알아보았다!

Polling

Polling(폴링)은 클라이언트가 서버에 정기적으로 요청을 보내고, 서버는 새로운 업데이트가 있는지 확인하여 응답을 반환하는 방식이다. 클라이언트는 일정한 간격으로 서버에 반복적으로 요청을 보내야 하므로 지연이 발생할수 있다. 서버에 업데이트가 없는 경우에도 요청과 응답이 계속 발생하므로 불필요한 트래픽이 발생할 수 있다.

SSE

SSE는 Server-Sent Events로써 단방향 통신식 방식이다. 서버에서 클라이언트로 데이터를 푸시한다. 클라이언트는 서버와의 연결을 유지한 상태로 서버로부터의 업데이트를 받을 수 있게 된다. SSE는 기존 HTTP 연결을 재사용하므로 추가적인 연결을 설정할 필요가 없다. 하지만 SSE는 단방향 통신이므로 클라이언트에서 서버로 데이터를 보낼 수는 없다.

WebSocket

WebSocket은 양방향 통신을 제공하는 실시간 통신 프로토콜이다. 클라이언트와 서버 간에 지속적인 연결을 유지하고, 양방향으로 데이터를 전송할 수 있다. WebSocket은 초기 연결 설정 이후에는 폴링이나 추가적인 요청이 필요하지 않으므로 실시간성이 좋고 지연 시간이 감소된다. 또한, WebSocket은 표준 프로토콜이기 때문에 다양한 플랫폼과 언어에서 지원된다.


Websocket의 다양한 특징들로 인해 실시간 요구 사항을 충족할 수 있는 기술 중 하나로 인정받고 있다.

Websocket은 양방향 통신을 통해 클라이언트와 서버 간을 통신을 지원한다. 이러한 양방향 통신은 실시간 상호작용, 실시간 업데이트, 채팅 애플리케이션 등과 같은 실시간 기능을 구현하는 데 이상적이다.

그리고 클라이언트와 서버 간의 지속적인 연결을 제공해 초기 연결 설정 후에는 추가적인 연결 설정이 필요하지 않으므로 연결 지연 시간이 줄어든다. 이는 폴링이나 SSE와 달리 클라이언트가 주기적으로 서버에 요청을 보내지 않아도 되고, 서버는 업데이트가 발생할 때망 데이터를 전송할 수 있게 된다. 따라서 Websocket은 더 효율적이고 실시간성이 뛰어난 통신을 제공하게 된다.

Websocket은 표준 프로토콜로서 다양한 플랫폼과 언어에서 지원된다. 이는 클라이언트와 서버 간의 상호 운용성을 보장하고, 개발자들이 특정 플랫폼에 종속되지 않고 다양한 환경에서 실시간 통신을 구현할 수 있다는 장점을 제공한다.

Websocket은 HTTP를 기반으로 하지만, 폴링이나 SSE와 달리 요청 및 응답 헤더를 반복적으로 전송할 필요가 없다(-> 낮은 오버헤드). 이는 불필요한 트래픽과 서버 부하를 줄여준다. 또한, Websocket은 이진 데이터 전송도 지원하므로 텍스트 외에도 파일 전송 등 다양한 용도로 사용할 수 있다.


하지만 Websocket이 아닌 polling과 SSE가 더 적합한 경우도 있다.

첫번째, 실시간 통신 요구 사항이 상대적으로 낮거나 실시간 업데이트가 필요하지 않은 경우에는 폴링이나 SSE를 선택하는 것을 고려할 수 있다. 예를 들어, 간단한 푸시 알림이나 일방적인 데이터 푸시만 필요한 경우가 있다!

두번째, Websocket은 지속적인 연결을 유지하게 되므로 클라이언트와 서버 간에 계속해서 데이터를 주고 받는다. 이를 통해 서버의 부하가 증가할 수 있다는 것을 알 수 있다. 만약 서버의 부하를 최소화해야 한다면, polling이나 SSE를 사용하는 것도 고려해볼 수 있다. 왜냐하면 polling은 클라이언트가 서버에 주기적인 요청을 보내므로 서버의 부하를 조절할 수 있고, SSE는 단방향 통신이기 때문에 클라이언트에서 서버로 데이터를 보내지 않기 때문에 부하가 감소할 수 있다.

마지막은 일부 프록시 서버나 방화벽에서 WebSocket 트래픽을 차단하는 경우가 있을 수 있다. 이 경우는 네트워크 환경이 제한적이라고 보며, polling이나 SSE를 사용하여 통신을 구현할 수 있다. polling은 기본 HTTP 요청을 사용하므로 WebSocket을 지원하지 않는 환경에서도 동작할 수 있다. SSE는 일방적인 통신이기 때문에 WebSocket과 비교해 더 쉽게 통신할 수 있을 수 있다.

profile
hello, world!

0개의 댓글