SERIESPonsLink 알고리즘 노트
[PonsLink] DataChannel 재생을 버티게 하는 백프레셔와 지터 버퍼
·3 min read·131 views
PonsLinkPonsCastBackpressureJitterBufferTokenBucketMSE
PonsCast는 파일을 보내는 기능보다 같은 시간을 공유하는 방식에 가까웠다. 화면 공유는 쉽게 떠올릴 수 있는 답이었지만, 내가 가진 파일을 상대의 언어와 속도에 맞춰 함께 보는 일은 화면을 복제하는 것과 달랐다. DataChannel 재생이 끊기면 이 차이가 바로 드러났다.

재생이 밀리기 시작한 순간
보내는 쪽이 계속 데이터를 밀어 넣으면 받는 쪽은 잠깐 뒤처진다. 그 차이가 쌓이면 재생은 끊기고, 같은 장면을 보고 있다는 약속도 무너진다. 내부에서는 버퍼가 조금 늘어난 것처럼 보여도 사용자에게는 불안정한 경험으로 남는다.

기다리는 장치를 넣다
백프레셔는 수신자가 감당할 수 있을 때까지 보내는 쪽을 멈추게 한다. 지터 버퍼는 도착 시간이 흔들리는 데이터를 짧게 모아 순서대로 꺼낸다. 둘 다 최고 속도를 위한 장치가 아니라, 네트워크의 흔들림을 사용자에게 그대로 전달하지 않기 위한 장치였다.
DataChannel을 선택한 이유도 같다. PonsCast는 화면을 일방적으로 보여 주는 기능이 아니라 두 사람이 같은 파일을 각자의 환경에서 함께 읽는 흐름이어야 했다. 전달 속도보다 재생의 리듬을 먼저 보게 된 이유다.
마치며
같은 시간을 공유하려면 데이터를 빨리 보내는 것만으로는 부족하다. 언제 기다리고 얼마나 쌓아 둘지 정해야 한다. 백프레셔와 지터 버퍼는 PonsCast의 목적을 구현 세부사항으로 옮긴 선택이었다.