[개념 정리] 4가지 있는 실시간 통신 방법

khyojun·2024년 8월 29일
7

개념 정리

목록 보기
3/3
post-thumbnail

최근 사내 프로젝트를 맡게 되어 코드를 보고 있었는데요!

그러던 중 SSE 라는 단어를 처음 보고 난 후에 공부를 시작하였습니다.
공부하다보니 현재 개발에 참여하고 있는 프로젝트에서도 이후 기능 요구사항에 있는 실시간 통신을 위한 친구라는 것을 알게 되어 나머지 방식들도 함께 정리해봤습니다!

1. Polling(short polling)

  • 클라이언트가 평범한 req 를 서버로 계속 날려서 이벤트 내용 전달 방식
  • 폴링은 client의 요청에 따라 서버만 데이터를 보낼 수 있는 단방향 통신 방식
  • 대시보드 갱신같은 곳에서 유용하게 사용할 수 있다.

장점

  • BE 단에서 많이 구현할 필요는 없다.
  • 엄청 간단한 방식

단점

  • 불필요한 네트워크 호출이 많이 일어난다.
  • HTTP resouce connection 을 맺고 끊는 작업을 매번 해줘야하다보니까 많이 부담스러움
  • polling은 높은 HTTP오버헤드가 발생
    • HTTP 오버헤드 : 내용보다 기타 다른 정보때문에 데이터량, 처리시간 증가하는 걸 말하는 것
  • 실시간 통신 방식에는 적절하지 않다. 빈 응답이 너무 많이 올 수 있고 서버 부하가 심하기 때문

2. Long Polling

  • 준 실시간 방식
  • 이전 polling과는 달리 조금 connection 시간을 길게 가져감으로써 요청 수를 줄여나가는 방식
  • 클라이언트에서 이후 바로 http req를 날려 다음 이벤트를 기다리게 됨.
  • 해당 클라이언트로 전달할 이벤트가 있으면 그 순간 response 메시지를 전달하면서 연결 종료

장점

  • 낮은 HTTP 오버헤드

단점

  • 채팅 어플리케이션에서 비효율적이다.
    • 사용자가 채팅을 안하더라도 주기적으로 연결을 맺기 때문이다.(일정 시간이 지났을 경우)
  • 다수의 클라이언트에게 동시 이벤트 발생하면 서버의 부담이 급증

3. Servet Sent Events(SSE)

  • Content-Type: text/event-stream 을 사용하여 클라이언트에게 이벤트 스트림 전송
  • HTTP 1.1 이상 버전을 사용해야함! (Persistent Connection)
  • 웹 애플리케이션이 실시간 업데이트를 수신 하고자 할 때 사용
    • SNS 알림, 주식 시장 업데이트, 실시간 스포츠 토토 서비스
  • HTTP 프로토콜을 사용한다.
  • HTTP 통신을 종료하지 않고 연결하는 방식

장점

  • HTML5 표준안 어느정도 웹소켓의 역할을 하면서 더 가볍다.
  • Long Polling과 다르게 요청을 주기적으로 안 보내고 연결을 맺지 않고 지속해서 연결할 수 있다.

단점

  • Web Socket 과는 다르게 UTF-8 데이터 유형으로만 보낼 수 있다.
  • websocket과 달리 server → client 단방향이기에 서버의 event나 message를 client로 push 하는 작업에 유용하게 사용될 수 있다.

4. WebSocket

  • 양방향 채널을 이용해서 채팅방처럼 양방향 통신을 가능하게 하는 기술.
  • 어느 한 쪽이 연결이 종료되면 양쪽 같이 종료됨!
  • http req rep 방식은 요청한 client에게만 response가 가능한데 ws 은 웹소켓 포트에 접속해 있는 모든 클라이언트에게 이벤트 방식으로 응답.
  • 실시간 업데이트를 필요로 하는 애플리케이션에 주로 필요한 기능.
    • ex) 게임, 채팅
  • 실시간 업데이트, 연속적인 스트림 : WebSocket

장점

  • WebSocket은 binary Data, UTF-8 데이터를 보낼 수 있다.
  • 방화벽을 열지 않고도 양방향 통신이 가능하고, http 규격 cors, 인증 등의 과정을 기존과 동일하게 가져감
  • HTTP 1.1 이상이어야 한다 (Persistent Connection)
  • 양방향 통신
  • 첫 연결에서만 handshaking 진행
  • 짧은 대기 시간
  • 지속적인 연결 가능

단점

  • WebSocket은 문자열들을 주고 받을 수 있게 해줄 뿐 그 이상의 일을 하지 않는다
  • 실시간 응답이 아닐 때 사용하면 리소스가 낭비될 수도 있어 상황마다 잘 판단하여 사용해야한다.

출처

profile
코드를 씹고 뜯고 맛보고 즐기는 것을 지향하는 개발자가 되고 싶습니다

0개의 댓글