[PonsWarp] Rust와 WASM은 속도 욕심보다 메모리 생존을 위한 선택이었다
작은 파일에서는 멀쩡하던 전송이 큰 파일에서 브라우저 메모리에 그대로 쌓이던 발견이 먼저 떠오른다. 그래서 용어 사전 대신, 그 날 무엇을 보고 무엇을 바꿨는지부터 적는다. 아래에서는 PonsWarp을 중심으로, 깨진 가정과 다시 그은 경계를 순서대로 남긴다.

Rust/WASM이 필요해진 지점
그래서 PonsWarp는 별도 제품처럼 분리됐다. 서버가 파일을 들고 있지 않는다는 원칙을 유지하면서도 브라우저가 버틸 수 있는 흐름 제어와 저장 전략을 먼저 세워야 했다. 그래서 대용량 전송을 '더 빠르게'가 아니라 '덜 무너지게' 만드는 과정으로 다시 써야 한다. 특히 PonsWarp에서는 재현 조건을 같이 적어야 의미가 있었다. Rust와 WASM은 속 전송 성공과 저장 성공은 다르며, 브라우저가 파일을 어디에 들고 있는지가 제품의 생존 문제였다는 문제가 있었다. 다음 글에서는 OPFS/저장 안전망 판단을 이어진다.

처음에는 JS로 충분할 줄 알았다
Rust와 WASM은 속 정량적으로는 전송 조각, 확인 응답, 저장 경로, 재시도 기준을 나눠 볼 수 있게 만들었다.
정성적으로는 사용자가 '거의 다 됐는데 왜 깨졌지'라는 불신을 덜 느끼게 하는 게 목표였다. 브라우저 메모리, 수신 속도, 저장 방식, ACK, 백프레셔가 한꺼번에 걸렸다. 특히 큰 파일에서는 마지막 몇 퍼센트에서 실패하는 순간이 제일 잔인했다. 전송 성공과 저장 성공은 같은 말이 아니었다. 2GB 근처에서 깨지는 문제는 속도 문제가 아니라 제품이 파일을 어디에 들고 있느냐의 문제였다.
방 안에서 파일을 보내면 충분할 줄 알았는데, 파일 크기가 커질수록 회의방의 리듬까지 흔들렸다. 작은 파일에서는 아무 일도 없어 보였다. 문제는 파일이 커진 뒤에야 드러났다. 브라우저가 조각을 얌전히 흘려보내는 게 아니라 메모리 위에 쌓아두고 있었다.
메모리 생존이 선명해진 순간
이 흐름은 PonsLink 안에서 고장난 파일 전송이 어떻게 PonsWarp로 분리됐는지 따라간다. 그래서 PonsWarp는 별도 제품처럼 분리됐다. 서버가 파일을 들고 있지 않는다는 원칙을 유지하면서도 브라우저가 버틸 수 있는 흐름 제어와 저장 전략을 먼저 세워야 했다. 그래서 대용량 전송을 '더 빠르게'가 아니라 '덜 무너지게' 만드는 과정으로 다시 써야 한다. 전송 성공과 저장 성공은 다르며, 브라우저가 파일을 어디에 들고 있는지가 제품의 생존 문제였다는 문제가 있었다. 다음 글에서는 OPFS/저장 안전망 판단을 이어진다. PonsWarp를 설명할 때 서버/클라이언트/사용자 중 누구 문장으로 말하는지 먼저 고르면 논쟁이 줄었다.
Rust 경계 나누기
정량적으로는 전송 조각, 확인 응답, 저장 경로, 재시도 기준을 나눠 볼 수 있게 만들었다. 정성적으로는 사용자가 '거의 다 됐는데 왜 깨졌지'라는 불신을 덜 느끼게 하는 게 목표였다.
전송은 단순히 빨리 보내는 문제가 아니었다. 브라우저 메모리, 수신 속도, 저장 방식, ACK, 백프레셔가 한꺼번에 걸렸다. 특히 큰 파일에서는 마지막 몇 퍼센트에서 실패하는 순간이 제일 잔인했다. 전송 성공과 저장 성공은 같은 말이 아니었다. 2GB 근처에서 깨지는 문제는 속도 문제가 아니라 제품이 파일을 어디에 들고 있느냐의 문제였다.
처음에는 PonsLink 안에 있는 파일 전송 기능이었다. 방 안에서 파일을 보내면 충분할 줄 알았는데, 파일 크기가 커질수록 회의방의 리듬까지 흔들렸다. 작은 파일에서는 아무 일도 없어 보였다. 문제는 파일이 커진 뒤에야 드러났다. 브라우저가 조각을 얌전히 흘려보내는 게 아니라 메모리 위에 쌓아두고 있었다. 이 흐름은 PonsLink 안에서 고장난 파일 전송이 어떻게 PonsWarp로 분리됐는지 따라간다.
마치며
그래서 PonsWarp는 별도 제품처럼 분리됐다. 서버가 파일을 들고 있지 않는다는 원칙을 유지하면서도 브라우저가 버틸 수 있는 흐름 제어와 저장 전략을 먼저 세워야 했다. 그래서 대용량 전송을 '더 빠르게'가 아니라 '덜 무너지게' 만드는 과정으로 다시 써야 한다. 특히 PonsWarp에서는 재현 조건을 같이 적어야 의미가 있었다. 전송 성공과 저장 성공은 다르며, 브라우저가 파일을 어디에 들고 있는지가 제품의 생존 문제였다는 문제가 있었다. 다음 글에서는 OPFS/저장 안전망 판단을 이어진다.