R-Blogger블로그·해설한국어2023-11-17
R-universe, 모든 R 패키지에 WASM 바이너리 빌드 제공
요약 R-universe는 이제 WebR 애플리케이션(예: shinylive)에서 사용하기 위한 모든 R 패키지의 WASM 바이너리를 빌드합니다. 예를 들어, dplyr의 개발 버전을 테스트하려면 WebR 데모 페이지를 열고 다음 명령을 실행하십시오. install.packages('dplyr', repos = c('https://tidyverse.r-universe.dev', 'https://repo.r-wasm.org')) 아래에서 설명하듯이 아직 모든 R 패키지가 지원되는 것은 아닙니다. 일부 패키지는 WebAssembly에서 동작하도록 일부 수정을 필요로 하지만, 지원 범위는 빠르게 확대되고 있습니다. r-universe 대시보드는 사용 가능한 패키지를 보여 주며, 빌드 로그에 대한 링크를 제공해 문제 해결에 도움을 줍니다. WebAssembly란? R 생태계에서 가장 흥미로운 최근 발전 중 하나는 George Stagg(포싯)께서 진행하신 WebR 프로젝트로, R을 WebAssembly(WASM)로 포팅한 것입니다. 기술적인 세부사항에 깊이 들어가지 않지만, WebAssembly는 웹사이트 내에서 안전하게 컴파일된 코드(예: C/C++/Fortran/Rust)를 실행할 수 있는 새로운 포터블 바이너리 코드 포맷입니다. 모든 주요 브라우저가 WASM을 지원하며, 다른 환경에서도 점차 채택되고 있습니다. 예를 들어, Cloudflare는 CDN 워커에서 wasm 바이너리를 실행할 수 있게 해주고, R 패키지 V8은 R에서 실험적인 WASM 엔진을 제공합니다. WebAssembly는 이제 어디서나 실행 가능한 실행 파일을 배포할 수 있는 보편적인 바이너리 실행 형식이 되고 있습니다. R을 WebAssembly에 포팅하기 WebR은 R의 (약간 수정된) 버전을 WebAssembly로 포팅한 것입니다. George Stagg가 수행한 대규모 작업을 감안할 때, R 코드베이스는 C 및 Fortran 코드를 많이 포함합니다. 앞서 언급한 바와 같이, 우리는 C/Fortran을 WASM으로 단순히 컴파일할 수 있지만, WASM이 모든 웹사이트에서 안전하게 실행되어야 하기 때문에 제한된 플랫폼입니다. 대부분의 시스템에서 제공되는 일반적인 기능(네트워크 소켓 열기, 쉘 명령 실행, 로컬 파일 시스템 접근 등)은 WASM에서 비활성화됩니다. 따라서 소프트웨어를 WASM으로 포팅하려면 이러한 제한을 우회하고 코드가 정상 동작하도록 조정해야 합니다. 비디오 프레젠테이션에서 George는 R을 WebAssembly 내부에서 실행하기 위해 사용되는 가상 파일 시스템과 오프스크린 캔버스 등 일부 핵심 구성 요소를 간략히 소개합니다. 또한, 서버 없이 완전하게 WebAssembly에서 실행되는 실험적 Shiny 버전인 shinylive에 대한 슬라이드를 확인해 보십시오. R 패키지 빌드 WASM에서 동작하는 R이 준비되었으므로, 다음 과제는 2만3000개가 넘는 기여된 R 패키지를 WebAssembly용으로 빌드하는 것입니다. 직관적으로는 R에서 소스에서 패키지를 직접 설치할 수 없다는 점이 바로 눈에 띕니다. 필요한 도구 체인(emscripten 및/또는 rust toolchains)은 WASM에서 실행되기 위해서는 WASM이 아니라 다른 플랫폼에서 빌드되어야 합니다. 결과적으로 생성된 바이너리 패키지는 패키지 저장소에서 제공되며, WebR은 이를 다운로드하고 설치합니다. 이 과정을 수작업으로 수행하는 것은 매우 번거롭지만, George의 도움으로 R 패키지를 WebAssembly용으로 빌드할 수 있는 모든 툴체인을 포함한 Docker 컨테이너를 만들고 r-universe 빌드 워크플로우에 연결했습니다. 이제 r-universe는 추적 중인 모든 패키지의 각 상위 커밋에 대해 자동으로 WebR 호환 바이너리 패키지를 빌드합니다. 사용자는 앞서 설명한 install.packages를 통해 패키지를 설치할 수 있으며, 해당 패키지 홈페이지에서 바이너리 패키지에 대한 직접 링크도 제공합니다. 시스템 라이브러리 가용성 일부 인기 R 패키지가 아직 WebAssembly에서 제공되지 않는 주된 이유는 외부 시스템 라이브러리(예: libcurl, gdal) 의존성 때문입니다. 대부분의 플랫폼에서는 apt 또는 brew와 같은 패키지 매니저를 통해 이러한 라이브러리를 설치할 수 있지만, 현재 WebAssembly용으로 잘 설계된 패키지 매니저는 존재하지 않아 수동으로 라이브러리를 포팅하고 빌드해야 합니다. 현재 Docker 빌드 이미지에는 r-wasm 레시피 스크립트에서 빌드되는 약 25개의 외부 C/C++ 라이브러리가 포함되어 있습니다. 이는 주로 R 공간 패키지(gdal 및 종속성)와 기본 R 빌드에 사용되는 그래픽 관련 라이브러리로 구성된 임의의 선택입니다. WebR에서 사용 가능한 R 패키지 범위를 확장하려면 이 목록을 확대해야 합니다. 현재 사용 가능한 시스템 라이브러리가 없으신 R 패키지의 경우, 위 레시피에 PR을 보내실 수 있으나, 먼저 로컬에서 Docker 이미지를 빌드하여 테스트해 주시기 바랍니다. 향후 적절한 emscripten 패키지 매니저가 등장하면 이러한 라이브러리를 제공해 줄 것으로 기대됩니다. WebAssembly Coverage 현재 R-universe는 총 41086개의 패키지를 추적하고 있으며, 이 중 38677개가 WASM 바이너리를 보유하고 있습니다. 다만, 이는 중복이 포함된 수치이며, CRAN 패키지의 최신 릴리스와 업스트림 Git 저장소(개발 버전)를 모두 추적하고 있기 때문입니다. 또 다른 중요한 점은 많은 R 패키지가 WebAssembly로 컴파일될 수 있지만, 현재 사용 가능한 다른 R 패키지에 의존하고 있어 아직 사용이 불가능한 경우가 많다는 것입니다. 이는 시스템 라이브러리에 의존하는 패키지들이 다른 많은 패키지의 핵심 종속성으로 사용되기 때문입니다. WebR 프로젝트는 CRAN 패키지의 WASM 상태를 모니터링하는 Shiny 앱을 제공합니다(로드 속도가 느릴 수 있으므로 잠시만 기다려 주세요). 현재 20040개의 CRAN 패키지 중 19356개가 WebAssembly로 빌드될 수 있으며, 그 중 10483개는 모든 종속성이 확보된 상태입니다.
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
- 작성자
- R-Blogger
- 출처
- R-Blogger
- 플랫폼
- R-Blogger
- 분류
- 블로그·해설
- 언어
- 한국어
- 발행일
- 2023-11-17