블로그로
tech 2026-03-28

클라우드 API보다 WebAssembly를 선택한 이유

클라우드 API보다 WebAssembly를 선택한 이유

어느 늦은 저녁, 우리 팀은 클라우드 청구서와 지연 시간 히스토그램의 스프레드시트를 바라보고 있었습니다. 트래픽이 급증할 때마다 자동 확장, 콜드 스타트, 그리고 두 페이지를 병합하기 위해 정말로 PDF를 대양 너머로 보내야 하는지에 대한 또 다른 대화가 의미했습니다. 그날 밤 우리는 단순한 질문을 했습니다: 브라우저가 대신 무거운 작업을 할 수 있다면?

우리 아키텍처를 바꾼 순간

Ai2Done은 생산성 도구가 계약서, 송장 또는 가족 사진을 제3자 서버에 신뢰하도록 요구해서는 안 된다는 믿음에서 태어났습니다. 클라우드 API는 강력하지만 영구적인 의존성을 도입합니다: 바이트가 기기를 떠나, 통제할 수 없는 네트워크를 횡단하고, 결코 감사할 수 없는 디스크에 도달합니다. 많은 워크플로우에는 그것이 허용 가능하지만; 우리 사용자에게는 거래 차단기였습니다.

WebAssembly는 서버에서 사용하는 것과 같은 언어인 Go에서 컴파일된 실제 코드를 사용자의 탭 내에서 실행할 수 있는 신뢰할 수 있는 경로를 제공했습니다. 파일을 블랙박스에 업로드하는 얇은 클라이언트를 스케치하는 대신, 예측 가능한 성능과 놀라운 이그레스 수수료 없이 로컬에서 실행되는 휴대용 바이너리를 출하할 수 있었습니다.

왜 "그냥" JavaScript를 사용하지 않는가?

우리는 UI와 오케스트레이션을 위한 JavaScript를 사랑하지만, 메가바이트의 PDF 로직이나 암호화를 손으로 작성한 JS로 옮기는 것은 출하하는 데 더 느리고 Go 도구와 동기화 유지가 더 어려웠을 것입니다. WASM은 우리가 전투에서 검증된 라이브러리(pdfcpu 스타일 파이프라인 생각)를 재사용하고 스택 전체에서 타입과 테스트를 공유할 수 있게 해줍니다. 브라우저는 호스트가 되며, 재작성 대상이 아닙니다.

JS의 최소 브리지는 .wasm 모듈을 로드하고, 파일 핸들과 진행 콜백을 전달하고, 결과를 렌더링합니다. 나머지는 Go에 남아있습니다:

// 개념적 모양: WASM은 얇은 API를 노출하고; 실제 작업은 internal/tools에 머뭅니다.
func ProcessPDF(input []byte) ([]byte, error) {
    // 병합, 분할, 암호화 —— 모두 결정론적, 모두 로컬
    return merged, nil
}

우리가 얻은 것

구조에 의한 프라이버시. 처리가 WASM에서 발생할 때, "우리가 파일을 처리할 수 있다"고 말하는 개인정보 보호정책이 필요하지 않습니다 —— "할 수 없다"고 말할 수 있습니다. 바이트가 기기를 절대 떠나지 않기 때문입니다. 그것은 마케팅이 아닙니다; 물리학입니다.

중요한 곳의 지연 시간. 배치 작업의 경우 네트워크 왕복이 종종 지배합니다. 로컬 WASM은 그 변수를 완전히 제거합니다. 진행률 표시줄은 다른 사람의 지역 큐 깊이가 아니라 실제 CPU 작업을 반영합니다.

비용 예측 가능성. 우리의 인프라 청구서는 사용자 문서의 기가바이트가 아니라 사이트로의 트래픽에 따라 확장됩니다. 그 정렬은 모든 변환을 측정하는 대신 제품 품질에 집중하게 합니다.

우리가 정직하게 받아들이는 트레이드오프

WASM은 무료가 아닙니다. 초기 다운로드 크기가 중요하므로 Brotli로 압축하고, 도구별로 lazy-load하고, 사용자가 탭 충돌 대신 친근한 메시지를 받도록 합리적인 파일 한도를 설정합니다. 브라우저의 메모리 상한선은 실제입니다; 우리는 그것들을 문서화하고 진행률을 표면화하여 사용자가 앱이 작동 중이고 동결되지 않았음을 알 수 있도록 합니다.

우리는 여전히 거기에 속한 것들에 서버를 사용합니다: 인증, 검색 인덱싱, 정적 자산 전달. 분할은 의도적입니다: 신원과 발견을 위한 서버, 변환을 위한 클라이언트.

앞으로 보기

클라우드 API보다 WASM을 선택한 것은 클라우드에 대한 베팅이 아니었습니다 —— 사용자 주권에 대한 베팅이었습니다. 새로운 도구를 출하할 때마다 우리는 그것이 먼저 로컬에서 실행될 수 있는지 묻습니다. 그 규율은 Ai2Done을 빠르고, 정직하고, 매일 의존하는 사람들과 일치하게 유지합니다. 이 공간에서 빌드하고 있다면 우리의 경로가 기본 업로드-처리 파이프라인에 의문을 제기할 권한을 부여하기를 바랍니다 —— 그리고 브라우저가 받는 신용보다 더 많은 일을 하도록 허락하기를 바랍니다.