WebSockets vs Server-Sent-Events vs Long-Polling vs WebRTC vs WebTransport | RxDB - JavaScript Database
Rxdb
Client 에서 Server로 request를 했을 때, 곧바로 결과를 보내주기 어려운 경우들이 있습니다. 프로세싱 하는데 시간이 오래 걸리는 경우들입니다. 이러한 경우 주로 비동기 (async) 적으로 처리하게 되는데 일단 프로세싱이 시작되었다는 내용만 리턴한 후, 완료되면 server에서 client로 push를 날리는 형태로 주로 구현하게 됩니다.
이게 특히나 중요한 것이 ML모델들 중에는 inference 시간이 오래 걸리는 모델들이 많기 때문이고, 특히나 요즘 Generative AI 관련 모델들은 LLM 들이 주로 많이 활용되는 만큼 inference 시간이 길어지는 경우가 많아서 이게 더 중요하게 됩니다.
모바일 (Android, iOS 등) 의 경우 해당 플랫폼에서 제공하는 push 서비스를 사용하기도 하고 streaming 형태로 구현하기도 하는데, 이런 비동기 처리 시에 활용할 만한 방법을 잘 정리해 놓은 글이 있어서 소개합니다.
https://rxdb.info/articles/websockets-sse-polling-webrtc-webtransport.html
Websocket이나 Polling (long-polling) 뿐 아니라 SSE, WebRTC, WebTransport 같은 방법들도 소개가 되어 있습니다.
Polling은 간단하고 여러 형태로 응용이 가능하기 때문에, 가장 쉽게 선택할 수 있는 방법입니다.
SSE는 효율적이긴 하지만 경험 상 troubleshooting이 쉽지 않았고 생각만큼 안정적이지는 않았습니다. 지금은 어떨지 모르겠네요.
Websocket이나 WebRTC 의 경우 성능이 좋기는 하고 특히 websocket은 여러 use-case 덕분에 안정적이기도 하고 troubleshooting도 비교적 쉽지만, client-server 사이에서 실시간으로 많은 커뮤니케이션을 하는 게 아니라면 connection을 유지를 함으로 생기는 부하를 고려해야 할 것으로 보입니다.
WebTransport는 처음 봤는데, 아직 지원 안하는 브라우저도 많고 표준도 아니라서 production에서는 쓰기 어려울 것으로 보입니다.
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 3월 19일 오전 5:38