Android WebSocket

노준혁·2023년 6월 19일

https://www.youtube.com/watch?v=sKCCwl5lNBk&ab_channel=PhilippLackner # Ktor
https://github.com/elye/demo_android_jetchat_with_websocket/tree/main/app/src/main/java/com/example/compose/jetchat
https://youtu.be/qUmE2nrgepo
https://code-lab1.tistory.com/300


WebSocket Protocol

  • 클라이언트와 서버를 연결하고 실시간 양방향 통신 유지
  • HTTP 프로토콜과는 달리 연결이 설정되면 양방향으로 별도의 요청을 보내지 않고도 데이터를 수신할 수 있음
  • 기본 HTTP 연결을 사용하여 초기 핸드셰이크를 수행한 후, 연결은 WebSocket 프로토콜로 업그레이드되어 하나의 TCP 접속에 전이중 통신 채널이 열림.
  • 양방향 통신 동안에는 클라이언트가 따로 Request를 한 것이 없어도 데이터가 저절로 서버로부터 수신되어질 수 있다.
  • WebSocket은 HTTP와는 달리 Stateful이다.
  • 웹소켓은 TCP연결 처럼 핸드셰이크를 이용해 연결을 맺는 과정에서 HTTP 프로토콜에서 웹소켓 프로토콜로 변경하게 되는 것이다.
  • 상호작용이 빈번하고 실시간으로 데이터를 주고받아야 하는 애플리케이션에 적합

WebSocket의 주요 특징:

  1. 양방향 통신:

    WebSocket은 서버와 클라이언트 간에 동시에 데이터를 주고받을 수 있는 양방향 통신 채널을 제공 → 실시간 상호작용이 가능.

  2. 낮은 지연 시간:

    WebSocket은 한 번 연결이 수립되면 지속적으로 열려 있으므로, 추가적인 핸드셰이크 없이 데이터를 빠르게 주고받을 수 있음.

  3. 효율적인 통신:

    한 번 연결이 개설되면, 추가적인 헤더 또는 메타데이터 없이 작은 패킷으로도 데이터를 전송할 수 있다. → 이는 트래픽 부하를 줄이고 효율성을 높음.

  4. 이진 및 텍스트 데이터 지원:

    WebSocket은 텍스트와 이진 데이터 모두 지원→ 더 다양한 유형의 데이터를 처리할 수 있습니다.

WebSocket 장점:

  1. 실시간 통신:

    양방향 통신 능력으로 인해 채팅, 게임, 실시간 트레이딩 등과 같은 실시간 애플리케이션에 이상적

  2. 효율성:

    WebSocket은 지속적인 연결과 작은 오버헤드로 인해, HTTP 폴링 방법보다 통신 효율이 높음

  3. 표준화 및 브라우저 지원:

    WebSocket은 IETF에 의해 표준화되었으며, 모든 주요 웹 브라우저에서 지원됨.

WebSocket 단점:

  1. 복잡성:

    WebSocket은 상대적으로 복잡한 프로토콜이며, 구현과 디버깅이 다른 방법들에 비해 까다로움

  2. 호환성 문제:

    WebSocket은 HTTP와 다른 프로토콜이므로, 일부 프록시, 방화벽, 또는 네트워크 인프라가 WebSocket 트래픽을 적절하게 처리하지 못할 가능성이 있음

  3. 보안 고려사항:

    WebSocket은 보안을 위해 WSS(WebSocket Secure)를 사용할 수 있지만, 개발자들은 여전히 중간자 공격(Man-in-the-Middle attacks), 크로스 사이트 웹소켓 하이재킹(Cross-Site WebSocket Hijacking) 등과 같은 보안 이슈를 고려해야 함.

  4. 서버 자원 사용:

    지속적인 연결로 인해, 많은 수의 동시 사용자를 지원하는 데 서버 자원 부하가 높아질 것을 고려해야 함.

profile
https://github.com/nohjunh

1개의 댓글

comment-user-thumbnail
2024년 1월 1일

좋은 글 감사합니다~

답글 달기