WebAssembly에서 tar 아카이브를 파일시스템으로 마운트하기
·2026.04.24 19:13
tar.gz를 풀지 않고 WebAssembly에서 직접 파일시스템으로 마운트하는 방법을 소개했다.
tar.gz를 전개하지 않고, tar 안의 파일 오프셋과 크기를 담은 JSON 인덱스를 만들어 Emscripten의 WORKERFS에 바로 마운트한다.
이 방식은 tar의 512바이트 헤더와 연속 데이터 구조를 활용한다. tar-vfs-index는 tar 또는 tar.gz 스트림을 읽어 file_packager 호환 메타데이터를 생성하고, 각 파일의 start/end 바이트 범위를 기록한다.
마운트 절차는 다음과 같다.
fetch()로 tar.gz와 메타데이터를 함께 가져온다.- 브라우저의 DecompressionStream('gzip') 으로 tar 데이터를 풀어 Blob을 만든다.
FS.mount(WORKERFS, { packages: [{ metadata, blob }] }, '/pkg')로 가상 파일시스템에 연결한다.
이렇게 하면 C/C++ 코드가 파일을 읽을 때 Blob을 필요한 구간만 슬라이스하므로, 파일을 따로 추출하지 않아도 된다. WebR은 이 접근을 R 패키지 배포에 적용해, 정적 서버의 plain tar.gz를 그대로 쓰면서도 로딩 속도와 메모리 효율을 개선했다.
또 다른 방식으로는 --append 옵션으로 인덱스를 tarball 끝에 붙여 단일 파일로 배포할 수 있다. 로더는 먼저 내장 메타데이터를 분리한 뒤 같은 방식으로 마운트한다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.