csct3434
실시간 통신 방식 비교 : Polling, Long Polling, Server Sent Event, WebSocket 본문
실시간 통신 방식 비교 : Polling, Long Polling, Server Sent Event, WebSocket
csct3434 2025. 1. 17. 00:15
실시간 통신에 활용될 수 있는 각각의 통신 방식 및 기술들이 실제로 어떻게 활용되는지 설명과 함께 살펴보도록 하겠습니다.
Polling
Polling은 가장 기본적인 실시간 통신 방식으로, 클라이언트가 주기적으로 서버에 새로운 데이터가 있는지 확인하는 방식입니다. 매우 단순한 방식이지만, 실제로 새로운 데이터가 없더라도 계속해서 요청을 보내야 하므로 서버와 네트워크에 불필요한 부하를 주는 단점이 있습니다. 또한 실시간성을 높이기 위해 폴링 주기를 높일 경우 요청이 많이 발생하여 서버의 부하가 증가할 수 있습니다. 반대로 폴링의 주기를 늘릴 경우 실시간성이 떨어지게 됩니다.
활용 사례 : 데이터 업데이트가 빈번하지 않은 경우, 실시간성이 크게 중요하지 않은 경우
- 스포츠 경기의 문자 중계 (경기 상황이 1-2분 간격으로 업데이트)
- 주식 시세 정보를 15초나 30초 간격으로 갱신하는 경우
- 날씨 정보나 기상 데이터를 5분 간격으로 갱신하는 대시보드 구현
Long Polling
Long Polling은 일반 Polling의 단점을 보완한 방식으로, 서버는 새로운 데이터나 타임아웃이 발생할 때까지 응답을 보내지 않고 클라이언트와의 연결을 유지합니다. 새로운 데이터가 발생하면 응답을 보내고 연결을 종료하며, 클라이언트는 다시 새로운 요청을 보냅니다.
이 방식은 불필요한 요청을 줄일 수 있지만, 여전히 요청-응답 사이클이 존재하여 오버헤드가 발생한다는 단점이 있습니다.
또한, 데이터가 빈번하게 업데이트 되는 상황에서는 Polling 방식과 큰 차이가 없다는 한계도 있습니다.
활용 사례
- 이메일 시스템 : 클라이언트에서 새로운 메일 알림을 구현할 때
- 온라인 퀴즈 게임 : 다음 문제 출제 시점까지 대기할 때
- 온라인 경매 시스템 : 새 입찰가 등록 알림을 구현할 때
HTTP Streaming
HTTP Streaming은 하나의 HTTP 연결을 통해 서버가 클라이언트로 계속해서 데이터를 보내는 방식입니다.
서버는 청크(chunk) 단위로 데이터를 계속 전송하며, 클라이언트는 이 데이터를 실시간으로 받아 처리할 수 있습니다.
Polling 방식과 달리 매 데이터 전송마다 새로운 연결을 설정하는 오버헤드가 없어 효율적입니다.
Server Sent Event
Server Sent Event는 HTTP Streaming을 표준화한 기술로, 서버에서 클라이언트로 단방향 이벤트 스트림을 전송합니다.
SSE는 W3C 표준 기술로 안정적으로 동작하며 자동 재연결 기능을 제공합니다.
하지만 최대 동시 연결 수에 제한이 있으며 (HTTP/1.1 - 6개, HTTP/2 - 100개), 양방향 통신이 불가능합니다. 또한, Internet Explorer에서는 SSE가 지원되지 않아 이를 활용할 수 없습니다.
활용 사례 : 클라이언트가 서버로부터 데이터를 실시간으로 전송받고 싶은 경우
- 암호화폐 시세 정보 제공
- 실시간 데이터 시각화
WebSocket
WebSocket은 가장 진보된 실시간 통신 방식으로, HTTP와는 별개의 프로토콜입니다. 초기 연결은 HTTP를 통해 이루어지지만, 이후 'ws://' 또는 'wss://' 프로토콜을 사용하는 WebSocket 연결로 업그레이드됩니다.
기존 HTTP 통신에서의 불필요한 헤더 전송이 없어 더 가볍고 빠르게 통신할 수 있으며, 양방향으로 데이터를 주고받을 수 있다는 것이 가장 큰 장점입니다.
단점으로는 구현이 비교적 복잡하며 웹소켓을 지원하지 않는 환경에 대한 Fallback 처리가 필요합니다. 또한, 프록시나 로드밸런서 설정이 복잡할 수 있습니다.
활용 사례
- 실시간 멀티플레이어 온라인 게임
- 협업 도구 : Google Docs
- 화상 회의
정리
선택 기준 요약
- 실시간성이 매우 중요하고 양방향 통신이 필요한 경우 → WebSocket
- 서버에서 클라이언트로의 단방향 실시간 통신만 필요한 경우 → SSE
- 간단한 실시간 기능이 필요한 경우 → Long Polling
- 업데이트가 빈번하지 않은 경우 → Polling
온라인 쇼핑몰 예시
- 채팅 상담 : WebSocket
- 재고 현황 : Polling
- 특가 상품 알림 : SSE
'개발 일지' 카테고리의 다른 글
STOMP (Simple Text Oriented Messaging Protocol) (10) | 2024.07.23 |
---|---|
AWS WAF를 활용한 봇 공격 차단 (feat. web ACL) (1) | 2024.06.04 |
CloudWatch Log Group으로 로그 전송하기 (feat. CloudWatch Agent) (0) | 2024.05.25 |
스프링부트 액세스 로그 설정 방법 (0) | 2024.05.25 |
Amazon S3 트리거와 Lambda를 활용한 썸네일 이미지 생성 (2) - 코드 구현 (1) | 2024.04.20 |