실시간 통신 기술

김민건·2021년 12월 18일
0

기술

목록 보기
12/19

#주저리주저리

일반적으로 (적어도 내 주변에서) WebRTC라고 하면 "그거 그냥 실시간 통신할 때 쓰는 기술 아닌가요?" 라고 생각한다. 하지만 실시간 통신을 사용하기 위한 기술로는 Polling, WebSocket, SSE 등 다양한 기술들이 존재하고, 그 중 하나로 WebRTC가 존재하는 것!

그럼 WebRTC가 다른 기술들과 어떤 점에서 다르길래 WebRTC를 사용하는걸까?

실시간 통신 기술 종류

1. Polling

아마 컴퓨터 공학을 공부하다가 polling이란 단어를 한번쯤 들어보셨을 것 같다. OS에서 폴링과 인터럽트 방식이 나뉘어질 때 그 폴링방식처럼, 계~~~속 주기적으로 확인해보는 방식을 의미한다. HTTP 연결에서는 Stateless와 Connectionless의 특징을 지니기 때문에 서버가 클라이언트에게 발송할 데이터가 생기더라도 서버가 일방적으로 클라이언트에게 응답을 보낼 수 없다. 요청을 받아야 응답을 보내는 구조로 클라이언트가 요청을 보낼 때까지 기다려야하는 것이다.

이를 1차원적으로 해결한 방식이 "폴링"이다. 데이터를 전달해주려면 요청이 필요해? 그럼 요청을 주기적으로 계속 보내면서 서버가 전달하고자하는 내용이 있는지, 이벤트가 발생했는지 확인해서 가져오는 것이다.

따라서 HTTP 오버헤드가 상당히 증가한다는 단점을 지니고 있다.

적합한 서비스

  • 실시간 메시지 전달이 중요하지 않음 ( 조금 delay 되도 됨 )
  • 잦은 요청에 대응할 수 있는 강인한 서버를 지닌 곳.......

2. Long Polling

사실 polling과 유사하게 동작하지만 조건과 설정이 딱 2가지 추가된 형태라고 보면 좋을 것 같다.

  • 폴링 하나의 생명주기를 비약적으로 늘린다
  • 이벤트가 발생할 때까지 대기한다

즉, polling은 그냥 무작정 계속 요청을 날리고 봤다면, long polling은 시간을 최대한 늘려서 이벤트가 발생할 때까지 대기하도록 설계하는 것을 의미한다. polling에서 HTTP 요청 빈도가 확 줄어든 개선 방안이다.

적합한 서비스

  • 실시간 메시지 전달이 중요하지만, 잦은 데이터 전달이 없는 경우에 사용

3. WebSocket

소켓 통신은 HTTP 통신이 아니다. 마찬가지로 TCP위에서 동작하지만, WS 혹은 WSS라는 통신 프로토콜로 양방향 통신과 영구성을 지닌다. 따라서 HTTP와 달리 STATEFUL하며 Polling처럼 주기적으로 요청을 받을 필요없다. 하지만 소켓통신은 HTTP통신에서 웹 소켓 핸드쉐이크 요청을 통해 HTTP -> 소켓 통신으로 전환과정을 거치면서 일어나기 때문에 HTTP 통신과 묶여서 사용된다.

따라서 양측에서 언제든지 원하는 데이터를 보낼 수 있는 구조를 지니고 있지만, 연결을 지속적으로 맺고 있어야하는 만큼, 클라이언트 연결 수를 유지해야 한다는 문제점을 지니고 있다.
( Spring기반의 웹 서버의 경우 일반적으로 Connection 하나 당 Thread 하나를 잡아먹는다고 하는데... )

적합한 서비스

  • 양방향 통신이 필요하고, Socket 통신을 위한 전용 서버를 구축할 환경이 되는 곳

4. SSE

서버에서 클라이언트로 단방향으로 데이터를 전달할 수 있는 HTML5 표준 기술이다. WebSocket과 다르게 별도의 프로토콜을 구축할 필요도 없고, Polling처럼 요청을 주기적으로 보내서 응답을 받을 필요가 없다. 단, 클라이언트의 요청없이 서버에서 클라이언트에게 단방향 통신을 하기 때문에 모든 실시간 통신이 필요한 기능에는 사용하지 못한다는 단점이 있다.

채팅과 같이 클라이언트의 요청을 받아야하는 필요가 있을 때는 SSE보단 WebSocket이 더 적합할 수 있고, 주식 시세 표시 정도의 용도라면 SSE가 더 효율적일 수 있다.

적합한 서비스

  • 서버에서 일방적인 데이터 전달이 필요한 곳
  • 스트리밍 서비스 ( 대용량 데이터를 잘게 나눠서 일부분씩 전달하는 서비스 )

5. WebRTC

위의 모든 기술들은 Client-Server 구조로 동작하지만, WebRTC는 P2P 방식으로 통신이 이루어지며 WebRTC는 TCP위에서도 동작할 수 있지만, 일반적인 경우 UDP로 통신을 하기 때문에 속도적인 측면에서 "진짜" 실시간 통신이라고 칭할 수 있을만큼 빠르다는 장점을 지닌다.

하지만 P2P 방식인 만큼, 사용자가 많아질수록 성능이 안 좋아진다는 단점이 있다.

적합한 서비스

  • 정말 실시간 통신이 최우선인 서비스
  • 1:1 혹은 소규모 대상 실시간 통신이 중점인 서비스

마무리

전반적인 실시간 통신 방법에 대해 간략히 살펴보았다.
다음에는 최신 스트리밍 및 화상 서비스에 활용되는 WebRTC와 RTMP 등에 대해 좀 더 자세하고 집중적으로 알아보자

profile
백엔드 꿈나무

0개의 댓글