Jaebi의 Binary는 호남선

[Swift] 실시간 데이터 표현 본문

Swift

[Swift] 실시간 데이터 표현

jaebijae 2025. 2. 4. 20:57

HTTP / SSE / WebSocket

특징 HTTP SSE (Server-Sent-Events) WebSocket
통신 방향 단방향 (Client → Server) 단방향 (Server → Client) 양방향 (Client ↔︎ Server)
연결 방식 요청/응답 반복 지속적인 HTTP 연결 초기 Handshake후 WebSocket 프로토콜 사용
실시간성 낮음 (주기적 요청 필요) 높음 (서버에서 실시간으로 이벤트 푸시) 매우 높음 (양방향 실시간 통신 가능)
오버헤드 높음 (매번 HTTP 요청/응답) 낮음 (하나의 지속적인 연결 사용) 매우 낮음 (헤더가 간단하고 연결 유지)
유지 연결 요청시 새 연결 생성 하나의 연결 유지 지속적인 연결 유지
프로토콜 HTTP/1.1 또는 HTTP/2 HTTP/1.1 WebSocket 프로토콜 (ws://, wss://)
사용 주기적으로 상태를 확인해야 하는 간단한 요청 간단한 실시간 UI 업데이트
실시간 알림
복잡한 실시간 데이터 교환
양방향 통신이 필요

 

WebSocket

  • 클라이언트와 서버를 연결하고 실시간으로 통신이 가능하도록 하는 통신 프로토콜
  • 기존 HTTP와 다르게 지속적인 연결을 유지하며 데이터를 실시간으로 수송신할 수 있음
  • 생성 → 연결 → 송수신 → 닫기 Flow로 실행됨
  • Swift로 first-party인 URLSessionWebSocketTask 및 third-party StarScream이 있음
  • 주의 사항:
    • 네트워크 상태 관리 - 연결이 끊어질 수 있으므로 재연결 로직이 필요함
    • 보안 - wss:// 프로토콜을 사용하여 SSL/TLS로 데이터 암호화
    • 백그라운드 작업 - 앱이 백그라운드로 전환 될때 WebSocket 관리 필요
  •  
 
상황 Action
앱 Foreground 상태로 진입 WebSocket 연결 유지 또는 재연결
앱 Background 상태로 진입 중요하지 않는경우 연결 종료
앱 종료 WebSocket 연결 종료 및 서버에 상태 업데이트*
네트워크 연결 끊김 자동 재연결 로직 실행
네트워크 다시 연결됨 WebSocket 재연결 시도