[PonsWarp] Signaling 서버는 파일 운반자가 아니라 소개자였다
처음에는 PonsLink 안에 있는 파일 전송 기능이었다. 방 안에서 파일을 보내면 충분할 줄 알았는데, 파일 크기가 커질수록 회의방의 리듬까지 흔들렸다. 브라우저끼리 직접 붙이면 서버 부담이 줄고 구조도 단순해질 줄 알았다. 그런데 WebRTC는 연결의 문만 열어줬고, 질서는 제품이 직접 만들어야 했다.
정성적으로는 사용자가 '거의 다 됐는데 왜 깨졌지'라는 불신을 덜 느끼게 하는 게 목표였다. 전송은 단순히 빨리 보내는 문제가 아니었다. 브라우저 메모리, 수신 속도, 저장 방식, ACK, 백프레셔가 한꺼번에 걸렸다. 특히 큰 파일에서는 마지막 몇 퍼센트에서 실패하는 순간이 제일 잔인했다.
신호 교환, 입장 순서, 메시지 채널, 파일 채널이 조금만 어긋나도 사용자는 '연결됐다'가 아니라 '불안하다'고 느꼈다. 특히 PonsWarp에서는 재현 조건을 같이 적어야 의미가 있었다. 그래서 PonsWarp는 별도 제품처럼 분리됐다. 서버가 파일을 들고 있지 않는다는 원칙을 유지하면서도 브라우저가 버틸 수 있는 흐름 제어와 저장 전략을 먼저 세워야 했다.

Signaling이 필요해진 지점
처음에는 PonsLink 안에 있는 파일 전송 기능이었다. 방 안에서 파일을 보내면 충분할 줄 알았는데, 파일 크기가 커질수록 회의방의 리듬까지 흔들렸다. 브라우저끼리 직접 붙이면 서버 부담이 줄고 구조도 단순해질 줄 알았다. 그런데 WebRTC는 연결의 문만 열어줬고, 질서는 제품이 직접 만들어야 했다.
정성적으로는 사용자가 '거의 다 됐는데 왜 깨졌지'라는 불신을 덜 느끼게 하는 게 목표였다. 전송은 단순히 빨리 보내는 문제가 아니었다. 브라우저 메모리, 수신 속도, 저장 방식, ACK, 백프레셔가 한꺼번에 걸렸다. 특히 큰 파일에서는 마지막 몇 퍼센트에서 실패하는 순간이 제일 잔인했다.
신호 교환, 입장 순서, 메시지 채널, 파일 채널이 조금만 어긋나도 사용자는 '연결됐다'가 아니라 '불안하다'고 느꼈다. 특히 PonsWarp에서는 재현 조건을 같이 적어야 의미가 있었다. 그래서 PonsWarp는 별도 제품처럼 분리됐다. 서버가 파일을 들고 있지 않는다는 원칙을 유지하면서도 브라우저가 버틸 수 있는 흐름 제어와 저장 전략을 먼저 세워야 했다.

현재 구성의 가정
그래서 P2P 기술 설명이 아니라, 직접 연결 뒤에 남는 제품 책임을 보여주는 글이 돼야 한다. WebRTC는 연결의 일부만 열어줄 뿐 제품이 책임질 상태, 순서, 실패 복구는 남는다는 문제가 있었다. 다음 글에서는 메시지/파일/상태 흐름 중 어디가 다시 갈라졌는지 이어졌다. Signaling 서버는
가정을 깨는 사례
이 흐름은 브라우저끼리 파일을 직접 보내면서 부딪힌 전송 엔진의 벽을 따라간다. 처음에는 PonsLink 안에 있는 파일 전송 기능이었다. 방 안에서 파일을 보내면 충분할 줄 알았는데, 파일 크기가 커질수록 회의방의 리듬까지 흔들렸다. 브라우저끼리 직접 붙이면 서버 부담이 줄고 구조도 단순해질 줄 알았다. 그런데 WebRTC는 연결의 문만 열어줬고, 질서는 제품이 직접 만들어야 했다.
Signaling 서버는 정성적으로는 사용자가 '거의 다 됐는데 왜 깨졌지'라는 불신을 덜 느끼게 하는 게 목표였다. 브라우저 메모리, 수신 속도, 저장 방식, ACK, 백프레셔가 한꺼번에 걸렸다. 특히 큰 파일에서는 마지막 몇 퍼센트에서 실패하는 순간이 제일 잔인했다.
신호 교환, 입장 순서, 메시지 채널, 파일 채널이 조금만 어긋나도 사용자는 '연결됐다'가 아니라 '불안하다'고 느꼈다. 그래서 PonsWarp는 별도 제품처럼 분리됐다. 서버가 파일을 들고 있지 않는다는 원칙을 유지하면서도 브라우저가 버틸 수 있는 흐름 제어와 저장 전략을 먼저 세워야 했다. PonsWarp를 설명할 때 서버/클라이언트/사용자 중 누구 문장으로 말하는지 먼저 고르면 논쟁이 줄었다.
분리·중계·직접연결 선택
Signaling 서버는 WebRTC는 연결의 일부만 열어줄 뿐 제품이 책임질 상태, 순서, 실패 복구는 남는다는 문제가 있었다. 다음 글에서는 메시지/파일/상태 흐름 중 어디가 다시 갈라졌는지 이어졌다.
실패 모드
그래서 P2P 기술 설명이 아니라, 직접 연결 뒤에 남는 제품 책임을 보여주는 글이 돼야 한다. WebRTC는 연결의 일부만 열어줄 뿐 제품이 책임질 상태, 순서, 실패 복구는 남는다는 문제가 있었다. 다음 글에서는 메시지/파일/상태 흐름 중 어디가 다시 갈라졌는지 이어졌다. 특히 PonsWarp에서는 재현 조건을 같이 적어야 의미가 있었다. 이 흐름은 브라우저끼리 파일을 직접 보내면서 부딪힌 전송 엔진의 벽을 따라간다.
마치며
방 안에서 파일을 보내면 충분할 줄 알았는데, 파일 크기가 커질수록 회의방의 리듬까지 흔들렸다. 브라우저끼리 직접 붙이면 서버 부담이 줄고 구조도 단순해질 줄 알았다. 그런데 WebRTC는 연결의 문만 열어줬고, 질서는 제품이 직접 만들어야 했다.
정성적으로는 사용자가 '거의 다 됐는데 왜 깨졌지'라는 불신을 덜 느끼게 하는 게 목표였다. 전송은 단순히 빨리 보내는 문제가 아니었다. 브라우저 메모리, 수신 속도, 저장 방식, ACK, 백프레셔가 한꺼번에 걸렸다. 특히 큰 파일에서는 마지막 몇 퍼센트에서 실패하는 순간이 제일 잔인했다. 신호 교환, 입장 순서, 메시지 채널, 파일 채널이 조금만 어긋나도 사용자는 '연결됐다'가 아니라 '불안하다'고 느꼈다.
특히 PonsWarp에서는 재현 조건을 같이 적어야 의미가 있었다. 그래서 PonsWarp는 별도 제품처럼 분리됐다. 서버가 파일을 들고 있지 않는다는 원칙을 유지하면서도 브라우저가 버틸 수 있는 흐름 제어와 저장 전략을 먼저 세워야 했다. 특히 PonsWarp에서는 재현 조건을 같이 적어야 의미가 있었다.